mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-20 06:01:50 -05:00
net: expand NETDEV_RSS_KEY_LEN to 256 bytes
NETDEV_RSS_KEY_LEN has been set to 52 bytes in 2014, until now.
Jakub suggested we bump the size to 128 bytes or more.
Some drivers (like idpf) were already working around the core limit.
Since this change might cause some issues in admin scripts,
bump it directly to 256 in one go.
tjbp26:~# cat /proc/sys/net/core/netdev_rss_key | wc -c
768
tjbp26:~# ethtool -x eth1
RX flow hash indirection table for eth1 with 32 RX ring(s):
...
RSS hash key:
fe:16:5b:2f:93:85:c2:c9:c1:ef:bd:60:c6:e0:2b:99:4d:bf:b7:14:c8:1e:8d:cb:31:17:51:da:55:eb:91:d9:9e:f9:89:9b:44:a1:dc:08:72:3a:b3:d6:31:86:9a:fe:02:3a:0d:eb:a1:7c:f5:a3:51:3b:08:56:c9:3f:71:69:01:ba:70:38
RSS hash function:
toeplitz: on
xor: off
crc32: off
Suggested-by: Jakub Kicinski <kuba@kernel.org>
Link: https://lore.kernel.org/netdev/20260122075206.504ec591@kernel.org/
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Link: https://patch.msgid.link/20260122190349.2771064-1-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
a113a8ac50
commit
37b0ea8fef
@@ -314,21 +314,22 @@ Default: 1000
|
||||
netdev_rss_key
|
||||
--------------
|
||||
|
||||
RSS (Receive Side Scaling) enabled drivers use a 40 bytes host key that is
|
||||
randomly generated.
|
||||
RSS (Receive Side Scaling) enabled drivers use a host key that
|
||||
is randomly generated.
|
||||
Some user space might need to gather its content even if drivers do not
|
||||
provide ethtool -x support yet.
|
||||
|
||||
::
|
||||
|
||||
myhost:~# cat /proc/sys/net/core/netdev_rss_key
|
||||
84:50:f4:00:a8:15:d1:a7:e9:7f:1d:60:35:c7:47:25:42:97:74:ca:56:bb:b6:a1:d8: ... (52 bytes total)
|
||||
84:50:f4:00:a8:15:d1:a7:e9:7f:1d:60:35:c7:47:25:42:97:74:ca:56:bb:b6:a1:d8: ... (256 bytes total)
|
||||
|
||||
File contains nul bytes if no driver ever called netdev_rss_key_fill() function.
|
||||
File contains all nul bytes if no driver ever called netdev_rss_key_fill()
|
||||
function.
|
||||
|
||||
Note:
|
||||
/proc/sys/net/core/netdev_rss_key contains 52 bytes of key,
|
||||
but most drivers only use 40 bytes of it.
|
||||
/proc/sys/net/core/netdev_rss_key contains 256 bytes of key,
|
||||
but many drivers only use 40 or 52 bytes of it.
|
||||
|
||||
::
|
||||
|
||||
|
||||
@@ -5166,8 +5166,7 @@ void *netdev_lower_dev_get_private(struct net_device *dev,
|
||||
void netdev_lower_state_changed(struct net_device *lower_dev,
|
||||
void *lower_state_info);
|
||||
|
||||
/* RSS keys are 40 or 52 bytes long */
|
||||
#define NETDEV_RSS_KEY_LEN 52
|
||||
#define NETDEV_RSS_KEY_LEN 256
|
||||
extern u8 netdev_rss_key[NETDEV_RSS_KEY_LEN] __read_mostly;
|
||||
void netdev_rss_key_fill(void *buffer, size_t len);
|
||||
|
||||
|
||||
@@ -325,10 +325,16 @@ static int proc_do_dev_weight(const struct ctl_table *table, int write,
|
||||
static int proc_do_rss_key(const struct ctl_table *table, int write,
|
||||
void *buffer, size_t *lenp, loff_t *ppos)
|
||||
{
|
||||
struct ctl_table fake_table;
|
||||
char buf[NETDEV_RSS_KEY_LEN * 3];
|
||||
struct ctl_table fake_table;
|
||||
char *pos = buf;
|
||||
|
||||
for (int i = 0; i < NETDEV_RSS_KEY_LEN; i++) {
|
||||
pos = hex_byte_pack(pos, netdev_rss_key[i]);
|
||||
*pos++ = ':';
|
||||
}
|
||||
*(--pos) = 0;
|
||||
|
||||
snprintf(buf, sizeof(buf), "%*phC", NETDEV_RSS_KEY_LEN, netdev_rss_key);
|
||||
fake_table.data = buf;
|
||||
fake_table.maxlen = sizeof(buf);
|
||||
return proc_dostring(&fake_table, write, buffer, lenp, ppos);
|
||||
|
||||
Reference in New Issue
Block a user