From: Yury Norov <yury.norov@gmail.com>
To: Souradeep Chakrabarti <schakrabarti@microsoft.com>
Cc: Jakub Kicinski <kuba@kernel.org>,
Souradeep Chakrabarti <schakrabarti@linux.microsoft.com>,
KY Srinivasan <kys@microsoft.com>,
Haiyang Zhang <haiyangz@microsoft.com>,
"wei.liu@kernel.org" <wei.liu@kernel.org>,
Dexuan Cui <decui@microsoft.com>,
"davem@davemloft.net" <davem@davemloft.net>,
"edumazet@google.com" <edumazet@google.com>,
"pabeni@redhat.com" <pabeni@redhat.com>,
Long Li <longli@microsoft.com>,
"sharmaajay@microsoft.com" <sharmaajay@microsoft.com>,
"leon@kernel.org" <leon@kernel.org>,
"cai.huoqing@linux.dev" <cai.huoqing@linux.dev>,
"ssengar@linux.microsoft.com" <ssengar@linux.microsoft.com>,
"vkuznets@redhat.com" <vkuznets@redhat.com>,
"tglx@linutronix.de" <tglx@linutronix.de>,
"linux-hyperv@vger.kernel.org" <linux-hyperv@vger.kernel.org>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-rdma@vger.kernel.org" <linux-rdma@vger.kernel.org>,
Paul Rosswurm <paulros@microsoft.com>
Subject: Re: [EXTERNAL] Re: [PATCH V2 net-next] net: mana: Assigning IRQ affinity on HT cores
Date: Wed, 29 Nov 2023 18:16:17 -0800 [thread overview]
Message-ID: <ZWfwcYPLVo+4V8Ps@yury-ThinkPad> (raw)
In-Reply-To: <PUZP153MB0788476CD22D5AA2ECDC11ABCCBDA@PUZP153MB0788.APCP153.PROD.OUTLOOK.COM>
On Mon, Nov 27, 2023 at 09:36:38AM +0000, Souradeep Chakrabarti wrote:
>
>
> >-----Original Message-----
> >From: Jakub Kicinski <kuba@kernel.org>
> >Sent: Wednesday, November 22, 2023 5:19 AM
> >To: Souradeep Chakrabarti <schakrabarti@linux.microsoft.com>
> >Cc: KY Srinivasan <kys@microsoft.com>; Haiyang Zhang
> ><haiyangz@microsoft.com>; wei.liu@kernel.org; Dexuan Cui
> ><decui@microsoft.com>; davem@davemloft.net; edumazet@google.com;
> >pabeni@redhat.com; Long Li <longli@microsoft.com>;
> >sharmaajay@microsoft.com; leon@kernel.org; cai.huoqing@linux.dev;
> >ssengar@linux.microsoft.com; vkuznets@redhat.com; tglx@linutronix.de; linux-
> >hyperv@vger.kernel.org; netdev@vger.kernel.org; linux-kernel@vger.kernel.org;
> >linux-rdma@vger.kernel.org; Souradeep Chakrabarti
> ><schakrabarti@microsoft.com>; Paul Rosswurm <paulros@microsoft.com>
> >Subject: [EXTERNAL] Re: [PATCH V2 net-next] net: mana: Assigning IRQ affinity on
> >HT cores
> >
> >On Tue, 21 Nov 2023 05:54:37 -0800 Souradeep Chakrabarti wrote:
> >> Existing MANA design assigns IRQ to every CPUs, including sibling
> >> hyper-threads in a core. This causes multiple IRQs to work on same CPU
> >> and may reduce the network performance with RSS.
> >>
> >> Improve the performance by adhering the configuration for RSS, which
> >> assigns IRQ on HT cores.
> >
> >Drivers should not have to carry 120 LoC for something as basic as spreading IRQs.
> >Please take a look at include/linux/topology.h and if there's nothing that fits your
> >needs there - add it. That way other drivers can reuse it.
> Because of the current design idea, it is easier to keep things inside
> the mana driver code here. As the idea of IRQ distribution here is :
> 1)Loop through interrupts to assign CPU
> 2)Find non sibling online CPU from local NUMA and assign the IRQs
> on them.
> 3)If number of IRQs is more than number of non-sibling CPU in that
> NUMA node, then assign on sibling CPU of that node.
> 4)Keep doing it till all the online CPUs are used or no more IRQs.
> 5)If all CPUs in that node are used, goto next NUMA node with CPU.
> Keep doing 2 and 3.
> 6) If all CPUs in all NUMA nodes are used, but still there are IRQs
> then wrap over from first local NUMA node and continue
> doing 2, 3 4 till all IRQs are assigned.
Hi Souradeep,
(Thanks Jakub for sharing this thread with me)
If I understand your intention right, you can leverage the existing
cpumask_local_spread().
But I think I've got something better for you. The below series adds
a for_each_numa_cpu() iterator, which may help you doing most of the
job without messing with nodes internals.
https://lore.kernel.org/netdev/ZD3l6FBnUh9vTIGc@yury-ThinkPad/T/
By using it, the pseudocode implementing your algorithm may look
like this:
unsigned int cpu, hop;
unsigned int irq = 0;
again:
cpu = get_cpu();
node = cpu_to_node(cpu);
cpumask_copy(cpus, cpu_online_mask);
for_each_numa_cpu(cpu, hop, node, cpus) {
/* All siblings are the same for IRQ spreading purpose */
irq_set_affinity_and_hint(irq, topology_sibling_cpumask());
/* One IRQ per sibling group */
cpumask_andnot(cpus, cpus, topology_sibling_cpumask());
if (++irq == num_irqs)
break;
}
if (irq < num_irqs)
goto again;
(Completely not tested, just an idea.)
Thanks,
Yury
next prev parent reply other threads:[~2023-11-30 2:18 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-21 13:54 [PATCH V2 net-next] net: mana: Assigning IRQ affinity on HT cores Souradeep Chakrabarti
2023-11-21 17:37 ` Haiyang Zhang
2023-11-21 18:51 ` Michael Kelley
2023-11-21 22:51 ` kernel test robot
2023-11-21 23:48 ` Jakub Kicinski
2023-11-27 9:36 ` [EXTERNAL] " Souradeep Chakrabarti
2023-11-27 14:32 ` Zhu Yanjun
2023-11-27 18:06 ` Jakub Kicinski
2023-11-29 22:17 ` Souradeep Chakrabarti
2023-11-30 0:02 ` Jakub Kicinski
2023-11-27 19:07 ` Florian Fainelli
2023-11-29 22:24 ` Souradeep Chakrabarti
2023-11-30 2:16 ` Yury Norov [this message]
2023-11-30 12:05 ` Souradeep Chakrabarti
2023-11-30 16:57 ` Yury Norov
2023-12-04 9:02 ` Souradeep Chakrabarti
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZWfwcYPLVo+4V8Ps@yury-ThinkPad \
--to=yury.norov@gmail.com \
--cc=cai.huoqing@linux.dev \
--cc=davem@davemloft.net \
--cc=decui@microsoft.com \
--cc=edumazet@google.com \
--cc=haiyangz@microsoft.com \
--cc=kuba@kernel.org \
--cc=kys@microsoft.com \
--cc=leon@kernel.org \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=longli@microsoft.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=paulros@microsoft.com \
--cc=schakrabarti@linux.microsoft.com \
--cc=schakrabarti@microsoft.com \
--cc=sharmaajay@microsoft.com \
--cc=ssengar@linux.microsoft.com \
--cc=tglx@linutronix.de \
--cc=vkuznets@redhat.com \
--cc=wei.liu@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.