Messages in this thread | | | Subject | Re: [Patch v3 1/3] lib: Restrict cpumask_local_spread to houskeeping CPUs | From | Nitesh Narayan Lal <> | Date | Wed, 24 Jun 2020 16:37:48 -0400 |
| |
On 6/24/20 8:13 AM, Frederic Weisbecker wrote: > On Tue, Jun 23, 2020 at 03:23:29PM -0400, Nitesh Narayan Lal wrote: >> From: Alex Belits <abelits@marvell.com> >> >> 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 <abelits@marvell.com> >> Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com> >> --- >> 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
[unhandled content-type:application/pgp-signature]
| |