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):
https://github.com/facebookexperimental/kperf/commit/8837577f920876bce6986ec18869ac04439ebcd2
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
..
2025-12-29 11:58:52 +01:00
2026-05-31 11:01:50 +01:00
2026-07-22 09:48:42 -06:00
2026-01-06 10:14:13 +01:00
2026-06-21 00:18:27 +02:00
2026-03-29 21:25:09 -04:00
2026-03-30 16:55:36 +02:00
2026-06-16 08:53:53 -07:00
2026-03-05 22:16:08 -05:00
2026-06-05 09:12:08 +02:00
2026-01-21 07:47:44 -07:00
2026-06-14 17:24:25 -07:00
2026-03-19 11:38:24 -06:00
2026-04-20 17:52:48 -07:00
2026-04-07 18:56:01 +02:00
2026-07-14 07:02:39 +02:00
2026-05-19 17:53:04 +02:00
2026-05-19 17:53:05 +02:00
2026-01-16 16:42:15 +01:00
2026-03-18 09:59:57 +00:00
2026-01-09 21:44:46 +01:00
2026-07-07 11:31:26 +02:00
2026-03-03 08:55:39 +01:00
2026-07-06 14:45:05 +02:00
2026-05-08 19:23:23 -06:00
2026-05-13 07:53:43 -06:00
2026-05-13 07:53:43 -06:00
2026-01-29 02:38:40 -07:00
2026-03-18 20:01:10 -07:00
2026-07-17 12:52:21 +02:00
2026-01-18 11:22:53 -05:00
2025-12-05 13:57:39 +01:00
2026-05-15 17:49:23 +02:00
2026-02-27 07:28:08 +01:00
2026-06-03 11:38:51 +02:00
2026-01-16 15:00:54 -07:00
2025-12-23 12:29:14 +05:30
2026-07-03 08:50:43 +02:00
2026-01-14 14:43:18 -08:00
2026-05-14 12:42:11 +02:00
2026-06-08 19:13:53 -07:00
2026-06-10 07:53:26 -07:00
2026-02-26 11:41:00 +01:00
2026-08-07 17:29:15 -07:00
2026-03-06 16:32:26 -08:00
2026-03-29 22:02:11 +02:00
2026-04-28 16:08:56 -06:00
2026-06-12 10:10:34 -03:00
2026-03-12 15:07:51 +01:00
2026-05-11 15:55:57 -04:00
2025-12-16 13:23:17 -05:00
2026-06-09 17:30:57 +02:00
2026-06-14 20:17:19 +02:00
2026-06-11 15:49:51 +03:00
2026-05-26 17:26:57 -07:00
2026-01-12 16:52:09 +01:00
2026-03-04 11:22:05 +01:00
2026-07-31 18:22:48 -07:00
2026-01-26 20:02:32 -08:00
2026-04-13 14:36:22 -07:00
2026-03-24 21:42:37 +00:00
2026-03-12 13:33:54 +01:00
2026-02-06 20:35:06 -08:00
2025-12-08 23:54:02 -08:00
2026-04-14 04:44:31 +00:00
2026-08-07 18:32:39 -07:00
2026-02-17 15:04:20 +01:00
2026-01-17 15:24:05 -08:00
2026-01-17 15:24:05 -08:00
2026-07-30 16:09:22 -07:00
2026-02-27 19:21:56 -08:00
2026-01-26 10:10:58 -05:00
2026-06-09 16:32:59 -04:00
2025-12-22 15:45:29 -08:00
2025-12-22 15:45:29 -08:00
2026-07-06 16:51:44 +02:00
2026-05-21 15:33:47 +02:00
2026-08-06 15:09:23 +02:00
2026-03-17 11:09:05 +01:00
2026-06-17 12:24:50 -07:00
2025-12-23 16:05:56 -06:00
2026-01-29 17:42:29 -06:00
2026-02-10 12:00:46 -08:00
2026-03-23 16:29:15 +01:00
2026-05-14 11:41:30 +02:00
2026-05-19 09:32:27 -07:00
2025-12-17 07:35:22 -07:00
2026-04-04 18:40:58 -06:00
2026-03-14 14:03:19 +09:00
2026-06-12 18:31:32 -07:00
2026-05-21 07:41:32 +02:00
2026-05-01 21:32:20 +02:00
2026-05-12 18:30:26 -07:00
2026-04-14 19:59:25 -07:00
2026-03-31 07:04:00 -06:00
2026-07-22 08:01:02 -07:00
2026-01-26 19:07:10 -08:00
2026-01-17 11:00:28 -08:00
2026-06-01 11:08:18 -04:00
2026-02-12 11:32:37 -08:00
2026-02-08 00:13:32 -08:00
2026-02-03 15:13:25 +01:00
2026-05-20 08:49:09 +02:00
2026-06-12 16:43:10 -07:00
2026-04-17 09:43:12 -07:00
2026-01-17 15:24:05 -08:00
2026-04-09 19:08:35 -06:00
2026-03-13 18:57:45 -07:00
2026-03-21 10:42:09 +01:00
2026-06-01 21:49:14 -07:00
2026-05-04 08:35:14 +02:00
2026-01-16 15:00:54 -07:00
2026-02-09 12:21:32 -05:00
2026-03-19 12:32:08 -06:00
2026-01-21 14:43:09 +01:00
2026-06-10 02:17:00 -04:00
2026-06-10 02:14:02 -04:00
2026-05-20 17:59:21 +03:00
2025-12-26 15:00:00 -05:00
2026-02-02 18:06:00 -08:00
2026-06-08 11:53:18 -07:00
2025-12-02 04:12:49 +01:00
2025-12-24 13:52:50 +01:00
2026-06-04 12:22:47 +02:00