Re: [RESEND PATCH v2 0/4] nvme-tcp: NIC topology aware I/O queue scaling and queue info export
Stanislav Fomichev <[email protected]> Fri, 31 Jul 2026 09:39:19 -0700
| Newsgroups | org.infradead.lists.linux-nvme,org.kernel.vger.netdev |
|---|---|
| Message-ID | <[email protected]> |
On 07/31, Nilay Shroff wrote:
> Hi,
>
> This is a resend of the previous series to include the networking maintainers
> and mailing list. There are no code or commit message changes since the
> previous posting.
>
> This series has been updated based on the feedback received during LSFMM.
> The changelog is updated accordingly.
>
> The NVMe/TCP host driver currently provisions I/O queues primarily based
> on CPU availability rather than the capabilities and topology of the
> underlying network interface.
>
> On modern systems with many CPUs but fewer NIC hardware queues, this can
> lead to multiple NVMe/TCP I/O workers contending for the same TX/RX queue,
> resulting in increased lock contention, cacheline bouncing, and degraded
> throughput.
>
> This RFC proposes a set of changes to better align NVMe/TCP I/O queues
> with NIC queue resources, and to expose queue/flow information to enable
> more effective system-level tuning.
>
> Key ideas
> ---------
>
> 1. Scale NVMe/TCP I/O queues based on NIC queue count
> Instead of relying solely on CPU count, limit the number of I/O workers
> to:
> min(num_online_cpus, netdev->real_num_{tx,rx}_queues)
>
> 2. Improve CPU locality
> Align NVMe/TCP I/O workers with CPUs associated with NIC IRQ affinity
> to reduce cross-CPU traffic and improve cache locality.
>
> 3. Expose queue and flow information via debugfs
> Export per-I/O queue information including:
> - queue id (qid)
> - CPU affinity
> - TCP flow (src/dst IP and ports)
[..]
> This enables userspace tools to configure:
> - IRQ affinity
> - RPS/XPS
> - ntuple steering
> - or any other scaling as deemed feasible
Can you expand on this a bit? What specifically helped the most for your
tuned case?