From: Walter McKelvie Date: Wed, 25 Mar 2026 10:37:31 +0000 (-0400) Subject: network: increase transmit/receive queues size to 16384 (#41289) X-Git-Tag: v261-rc1~745 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8ddc1c07f69956a40e44d66280140ae4548b6387;p=thirdparty%2Fsystemd.git network: increase transmit/receive queues size to 16384 (#41289) A 10G Marvell AQC113 included in an ASRock TRX50WS motherboard NIC claims to support tx/rx queues as large as 8184. After boot 'ethtool -g eth0' outputs: Ring parameters for eth0: RX: 8184 RX Mini: n/a RX Jumbo: n/a TX: 8184 TX push buff len: n/a HDS thresh: n/a RX: 2048 RX Mini: n/a RX Jumbo: n/a TX: 4096 RX Buf Len: n/a CQE Size: n/a TX Push: off RX Push: off TX push buff len: n/a TCP data split: n/a HDS thresh: n/a 'ethtool --set-ring eth0 rx 8184 tx 8184 && ethtool -g eth0' yields: Ring parameters for eth0: RX: 8184 RX Mini: n/a RX Jumbo: n/a TX: 8184 TX push buff len: n/a HDS thresh: n/a RX: 8184 RX Mini: n/a RX Jumbo: n/a TX: 8184 RX Buf Len: n/a CQE Size: n/a TX Push: off RX Push: off TX push buff len: n/a TCP data split: n/a HDS thresh: n/a I can measure a throughput difference between using using buffer sizes 4096 and 8184 on my hardware, so it really seems that this is doing something beyond buggy firmware. Original PR https://github.com/systemd/systemd/pull/17635 didn't give any explanation for the limit of 4096, but that's probably what was supported by the kernel drivers at the time. A web search shows that CISCO VIC 15000 supports 16k, so allow up to that. [zjs: edited the message] --- diff --git a/man/systemd.link.xml b/man/systemd.link.xml index 602f19b6003..d26431b2b2b 100644 --- a/man/systemd.link.xml +++ b/man/systemd.link.xml @@ -666,7 +666,7 @@ TransmitQueues= - Specifies the device's number of transmit queues. An integer in the range 1…4096. + Specifies the device's number of transmit queues. An integer in the range 1…16384. When unset, the kernel's default will be used. @@ -675,7 +675,7 @@ ReceiveQueues= - Specifies the device's number of receive queues. An integer in the range 1…4096. + Specifies the device's number of receive queues. An integer in the range 1…16384. When unset, the kernel's default will be used. diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c index eefa95dc5f6..704a38831e1 100644 --- a/src/udev/net/link-config.c +++ b/src/udev/net/link-config.c @@ -1271,7 +1271,7 @@ int config_parse_rx_tx_queues( log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse %s=, ignoring assignment: %s.", lvalue, rvalue); return 0; } - if (k == 0 || k > 4096) { + if (k == 0 || k > 16384) { log_syntax(unit, LOG_WARNING, filename, line, 0, "Invalid %s=, ignoring assignment: %s.", lvalue, rvalue); return 0; }