From: Yury Norov <ynorov@nvidia.com>
To: Florian Bezdeka <florian.bezdeka@siemens.com>
Cc: Maxime Chevallier <maxime.chevallier@bootlin.com>,
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Maxime Coquelin <mcoquelin.stm32@gmail.com>,
Alexandre Torgue <alexandre.torgue@foss.st.com>,
Yury Norov <yury.norov@gmail.com>,
Rasmus Villemoes <linux@rasmusvillemoes.dk>,
Andrew Morton <akpm@linux-foundation.org>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Clark Williams <clrkwllms@kernel.org>,
Steven Rostedt <rostedt@goodmis.org>,
Thomas Gleixner <tglx@kernel.org>,
Jan Kiszka <jan.kiszka@siemens.com>,
netdev@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-rt-devel@lists.linux.dev
Subject: Re: [PATCH RFC 0/3] genirq: Allow drivers to respect userspace IRQ affinities
Date: Wed, 19 Aug 2026 14:28:30 -0400 [thread overview]
Message-ID: <aoX1zplzjXJl6lOV@yury> (raw)
In-Reply-To: <20260819-flo-net-7-2-make-stmmac-default-affinity-aware-v1-0-3f79a99cadaf@siemens.com>
On Wed, Aug 19, 2026 at 04:30:29PM +0200, Florian Bezdeka wrote:
> Hi all,
>
> I'm trying to demonstrate a real problem for PREEMPT_RT here, using the
> stmmac driver as example. There are more drivers "affected" but let's
> ignore that for one moment. Let's discuss the underlying problem first.
>
> To achieve the best throughput most network devices are based on
> multiple queues. Each queue (pair) is equipped with one device IRQ. To
> reach the maximum throughput, spreading / balancing them between all the
> available CPUs makes sense.
>
> While some IRQ chips - and with that some architectures - implement the
> necessary spreading (or balancing) at IRQ chip level others don't do that.
> If a device driver wants to make sure that balancing happens as intended
> it has to implement that on his own (again).
>
> The typical shortcoming of those implementations: They do not honor RT
> relevant settings like the smp_default_affinity or isolated CPU cores.
> Device IRQs are balanced over "all" or "all online CPUs".
>
> That's not a problem for "normal" systems, but for RT systems - or
> systems running cpu-isolating workloads - it is.
>
> IRQ affinities can be controlled via /proc/irq/<n>/smp_affinity{_list}
> for existing IRQs and via /proc/irq/default_smp_affinity for "new" or
> "not yet registered" IRQs. Those settings - as written by user space -
> must be honored. Always.
>
> In our case the settings were bypassed by the following sequence:
>
> - system boot (all CPUs available, no isolation yet)
> - deployment of the first RT application
> - writing a new default smp affinity (remove RT isolated cores)
> - migrating away all that were targeting the now isolated cores
> - creating a cgroup with RT cores as the only usable cores
> - RT application running fine for some time
> - stmmac network interface went up for the first time
> - driver balances IRQs over all CPUs, ignoring the existing
> affinities
> - Too much IRQ traffic on RT cores
>
> Even with series applied there is (at least) one problem remaining:
>
> The /proc/irq/<n> interface is populated on the first request_irq() call.
> That means that we can not control affinities from userspace until the
> IRQ gets requested.
>
> The problem for network interfaces: We have to bring up the interfaces
> once, to be able to control such affinities.
>
> That raises the question why request_irq() is called on "link up" time,
> while the low level vector allocation takes place during device probing.
> At least that seems to be the common pattern. Can someone tell me why
> this is done this way? Shouldn't we call request_irq() at the same time?
>
> So, let's hope that all of this was short enough that somebody reads it
I did!
> and precise enough to make the problem clear. The idea behind this series
> is not fixing or applying the series as is. I'm expecting a discussion
> first. So, input welcome!
Not sure I understand the full scope, but it's not because of your
description. And I want to learn more about the RT business. I'll
comment the cpumasks part, and please keep me in CC.
Thanks,
Yury
> Signed-off-by: Florian Bezdeka <florian.bezdeka@siemens.com>
> ---
> Florian Bezdeka (3):
> cpumask: Honor irq_default_affinity in cpumask_local_spread()
> genirq: Honor existing IRQ affinities when setting affinity hints
> net: stmmac: Migrate IRQ balancing to cpumask_local_spread()
>
> drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 21 +++++++++++++++++----
> kernel/irq/manage.c | 10 ++++++++++
> lib/cpumask.c | 10 ++++++----
> 3 files changed, 33 insertions(+), 8 deletions(-)
> ---
> base-commit: aa2e13ae8d3cbe2c15ef4f7e971b2de0832794aa
> change-id: 20260810-flo-net-7-2-make-stmmac-default-affinity-aware-a145a4941d8f
>
> Best regards,
> --
> Florian Bezdeka <florian.bezdeka@siemens.com>
next prev parent reply other threads:[~2026-08-19 18:28 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-19 14:30 [PATCH RFC 0/3] genirq: Allow drivers to respect userspace IRQ affinities Florian Bezdeka
2026-08-19 14:30 ` [PATCH RFC 1/3] cpumask: Honor irq_default_affinity in cpumask_local_spread() Florian Bezdeka
2026-08-19 18:38 ` Yury Norov
2026-08-20 16:09 ` Sebastian Andrzej Siewior
2026-08-21 17:14 ` Florian Bezdeka
2026-08-21 16:36 ` Florian Bezdeka
2026-08-20 14:30 ` sashiko-bot
2026-08-19 14:30 ` [PATCH RFC 2/3] genirq: Honor existing IRQ affinities when setting affinity hints Florian Bezdeka
2026-08-20 14:30 ` sashiko-bot
2026-08-20 16:41 ` Jakub Kicinski
2026-08-21 10:38 ` Jan Kiszka
2026-08-21 10:53 ` Sebastian Andrzej Siewior
2026-08-21 17:30 ` Florian Bezdeka
2026-08-19 14:30 ` [PATCH RFC 3/3] net: stmmac: Migrate IRQ balancing to cpumask_local_spread() Florian Bezdeka
2026-08-19 18:45 ` Yury Norov
2026-08-21 16:40 ` Florian Bezdeka
2026-08-20 14:30 ` sashiko-bot
2026-08-19 18:28 ` Yury Norov [this message]
2026-08-19 23:54 ` [PATCH RFC 0/3] genirq: Allow drivers to respect userspace IRQ affinities Andrew Lunn
2026-08-20 0:10 ` Andrew Lunn
2026-08-21 16:57 ` Florian Bezdeka
2026-08-21 16:47 ` Florian Bezdeka
2026-08-20 15:12 ` Sebastian Andrzej Siewior
2026-08-21 17:09 ` Florian Bezdeka
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=aoX1zplzjXJl6lOV@yury \
--to=ynorov@nvidia.com \
--cc=akpm@linux-foundation.org \
--cc=alexandre.torgue@foss.st.com \
--cc=andrew+netdev@lunn.ch \
--cc=bigeasy@linutronix.de \
--cc=clrkwllms@kernel.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=florian.bezdeka@siemens.com \
--cc=jan.kiszka@siemens.com \
--cc=kuba@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rt-devel@lists.linux.dev \
--cc=linux-stm32@st-md-mailman.stormreply.com \
--cc=linux@rasmusvillemoes.dk \
--cc=maxime.chevallier@bootlin.com \
--cc=mcoquelin.stm32@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=rostedt@goodmis.org \
--cc=tglx@kernel.org \
--cc=yury.norov@gmail.com \
/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.