Files
linux/include/uapi/linux
Bobby Eshleman b27a8560ee net: devmem: allow rx-page-size > PAGE_SIZE per dmabuf binding
Every devmem dmabuf binding today hands the page_pool PAGE_SIZE niovs.
This caps a single RX descriptor at PAGE_SIZE, burning CPU on buffer
churn for large flows.

Add a bind-time netlink attribute, NETDEV_A_DMABUF_RX_PAGE_SIZE, that
lets userspace request a larger niov size. The value must be a power of
two >= PAGE_SIZE.

The TX path is changed to always pass PAGE_SIZE.

Measurements:
Setup: kperf in devmem RX/TX cuda mode, 4 flows, 64 MB messages, 60s,
dctcp, num-rx-queues=4, dmabuf-rx/tx-size-mb=2048, 10 runs per niov
size, mlx5.

CPU Util:

   niov        net sirq %        net idle %         app sys %        app idle %
  -----  ----------------  ----------------  ----------------  ----------------
     4K   62.38 +/-  8.27   33.40 +/-  7.51   54.15 +/- 10.23   43.67 +/- 10.53
    16K   58.91 +/-  5.35   35.23 +/-  5.88   41.05 +/-  8.87   56.42 +/-  9.24
    32K   64.12 +/-  0.68   31.09 +/-  1.48   44.54 +/-  3.51   52.63 +/-  3.65
    64K   54.69 +/-  5.54   39.67 +/-  5.81   35.47 +/-  3.11   61.97 +/-  3.27

RX app sys % drops ~19% from 4K to 64K.

Throughput:

   niov       RX dev Gbps   RX flow avg Gbps
  -----  ----------------  -----------------
     4K  300.63 +/- 53.21    75.16 +/- 13.30
    16K  321.35 +/- 28.20    80.34 +/-  7.05
    32K  347.63 +/-  2.20    86.91 +/-  0.55
    64K  332.11 +/- 14.26    83.03 +/-  3.56

Throughput seems to increase, but the stdev is pretty wide so could just
be noise.

kperf support (not yet merged):
8837577f92

Acked-by: Stanislav Fomichev <sdf@fomichev.me>
Reviewed-by: Mina Almasry <almasrymina@google.com>
Reviewed-by: Nikolay Aleksandrov <razor@blackwall.org>
Signed-off-by: Bobby Eshleman <bobbyeshleman@meta.com>
Link: https://patch.msgid.link/20260805-tcpdm-large-niovs-v8-1-3e0225e2808c@meta.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-08-07 18:32:39 -07:00
..
2024-04-15 13:42:38 +02:00
2026-03-30 16:55:36 +02:00
2026-03-05 22:16:08 -05:00
2026-03-19 11:38:24 -06:00
2026-03-18 09:59:57 +00:00
2025-02-05 13:22:04 +09:00
2023-01-20 09:33:22 +00:00
2024-06-11 12:57:49 -05:00
2026-05-13 07:53:43 -06:00
2026-05-13 07:53:43 -06:00
2026-01-18 11:22:53 -05:00
2025-02-12 02:29:30 +00:00
2025-10-28 22:59:19 +01:00
2025-11-25 19:20:42 -08:00
2025-09-05 09:11:28 +02:00
2025-11-24 17:52:11 +01:00
2025-11-24 17:52:11 +01:00
2024-05-07 01:35:57 +02:00
2025-11-29 21:39:58 +09:00
2025-12-23 12:29:14 +05:30
2026-08-07 17:29:15 -07:00
2024-04-01 10:49:28 +01:00
2025-09-15 14:32:54 +02:00
2024-06-01 07:28:21 +02:00
2024-09-01 20:26:05 -07:00
2024-08-19 22:36:26 -04:00
2026-01-12 16:52:09 +01:00
2025-07-08 12:39:24 +02:00
2023-12-15 17:01:30 +01:00
2026-03-12 13:33:54 +01:00
2026-02-06 20:35:06 -08:00
2024-09-06 08:31:40 -06:00
2026-02-27 19:21:56 -08:00
2025-11-03 17:41:18 +01:00
2023-11-28 19:05:16 +00:00
2025-01-08 13:18:11 +01:00
2026-05-19 09:32:27 -07:00
2023-12-20 19:26:31 -05:00
2026-03-31 07:04:00 -06:00
2026-01-26 19:07:10 -08:00
2025-07-14 18:41:42 -07:00
2025-06-19 14:28:22 +02:00
2025-05-21 13:41:03 +02:00
2023-12-29 11:58:24 -08:00
2023-03-23 17:25:46 +01:00
2026-02-09 12:21:32 -05:00
2025-09-22 09:29:28 +01:00
2025-11-30 18:02:43 -05:00
2025-05-27 10:27:54 -04:00
2025-09-22 09:29:29 +01:00