Re: [Patch v3 1/3] lib: Restrict cpumask_local_spread to houskeeping CPUs
From: Nitesh Narayan Lal <hidden>
Date: 2020-06-24 20:38:22
Also in:
linux-pci, lkml
On 6/24/20 8:13 AM, Frederic Weisbecker wrote:
On Tue, Jun 23, 2020 at 03:23:29PM -0400, Nitesh Narayan Lal wrote:quoted
From: Alex Belits <redacted> The current implementation of cpumask_local_spread() does not respect the isolated CPUs, i.e., even if a CPU has been isolated for Real-Time task, it will return it to the caller for pinning of its IRQ threads. Having these unwanted IRQ threads on an isolated CPU adds up to a latency overhead. Restrict the CPUs that are returned for spreading IRQs only to the available housekeeping CPUs. Signed-off-by: Alex Belits <redacted> Signed-off-by: Nitesh Narayan Lal <redacted> --- lib/cpumask.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-)diff --git a/lib/cpumask.c b/lib/cpumask.c index fb22fb266f93..d73104995981 100644 --- a/lib/cpumask.c +++ b/lib/cpumask.c@@ -6,6 +6,7 @@ #include <linux/export.h> #include <linux/memblock.h> #include <linux/numa.h> +#include <linux/sched/isolation.h> /** * cpumask_next - get the next cpu in a cpumask@@ -205,22 +206,27 @@ void __init free_bootmem_cpumask_var(cpumask_var_t mask) */ unsigned int cpumask_local_spread(unsigned int i, int node) { - int cpu; + int cpu, hk_flags; + const struct cpumask *mask; + hk_flags = HK_FLAG_DOMAIN | HK_FLAG_WQ;This should be HK_FLAG_MANAGED_IRQ instead of HK_FLAG_WQ since this function seem to be used mostly to select CPUs to affine managed IRQs.
IIRC then there are drivers such as ixgbe that use cpumask_local_spread while affining NORMAL IRQs as well. But I can recheck that.
In the end the cpumask you pass to IRQ core will be filtered throughout HK_FLAG_MANAGED_IRQ anyway so better select an appropriate one in the first place to avoid an empty cpumask intersection. Now even if cpumask_local_spread() is currently mostly used to select managed irq targets, the name and role of the function don't refer to that. Probably cpumask_local_spread() should take HK_ flag in parameter so that it can correctly handle future users? That being said, I plan to merge HK_FLAG_RCU, HK_FLAG_MISC, HK_FLAG_SCHED, HK_FLAG_WQ and HK_FLAG_TIMER into HK_FLAG_UNBOUND since it doesn't make sense to divide them all.
That would be nice.
And the actual flag used inside cpumask_local_spread() could end up being HK_FLAG_DOMAIN | HK_FLAG_UNBOUND. So probably you don't need to worry about that and just change the HK_FLAG_WQ in your patch with HK_FLAG_MANAGED_IRQ. Thanks.
-- Thanks Nitesh
Attachments
- signature.asc [application/pgp-signature] 833 bytes