lkml.org 
[lkml]   [2020]   [Jun]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [Patch v3 1/3] lib: Restrict cpumask_local_spread to houskeeping CPUs
    From
    Date

    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]
    \
     
     \ /
      Last update: 2020-06-24 22:38    [W:3.320 / U:0.352 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site