linux mellanox 网卡队列 irq rps 相关

bash 复制代码
ethtool -l nic0
Channel parameters for nic0:
Pre-set maximums:
RX:		n/a
TX:		n/a
Other:		n/a
Combined:	63
Current hardware settings:
RX:		n/a
TX:		n/a
Other:		n/a
Combined:	63
[hyperai] root@gtx5090-7:~# ethtool -l nic1
Channel parameters for nic1:
Pre-set maximums:
RX:		n/a
TX:		n/a
Other:		n/a
Combined:	63
Current hardware settings:
RX:		n/a
TX:		n/a
Other:		n/a
Combined:	63
[hyperai] root@gtx5090-7:~# ethtool -x nic0
RX flow hash indirection table for nic0 with 63 RX ring(s):
    0:      0     1     2     3     4     5     6     7
    8:      8     9    10    11    12    13    14    15
   16:     16    17    18    19    20    21    22    23
   24:     24    25    26    27    28    29    30    31
   32:     32    33    34    35    36    37    38    39
   40:     40    41    42    43    44    45    46    47
   48:     48    49    50    51    52    53    54    55
   56:     56    57    58    59    60    61    62     0
   64:      1     2     3     4     5     6     7     8
   72:      9    10    11    12    13    14    15    16
   80:     17    18    19    20    21    22    23    24
   88:     25    26    27    28    29    30    31    32
   96:     33    34    35    36    37    38    39    40
  104:     41    42    43    44    45    46    47    48
  112:     49    50    51    52    53    54    55    56
  120:     57    58    59    60    61    62     0     1
  128:      2     3     4     5     6     7     8     9
  136:     10    11    12    13    14    15    16    17
  144:     18    19    20    21    22    23    24    25
  152:     26    27    28    29    30    31    32    33
  160:     34    35    36    37    38    39    40    41
  168:     42    43    44    45    46    47    48    49
  176:     50    51    52    53    54    55    56    57
  184:     58    59    60    61    62     0     1     2
  192:      3     4     5     6     7     8     9    10
  200:     11    12    13    14    15    16    17    18
  208:     19    20    21    22    23    24    25    26
  216:     27    28    29    30    31    32    33    34
  224:     35    36    37    38    39    40    41    42
  232:     43    44    45    46    47    48    49    50
  240:     51    52    53    54    55    56    57    58
  248:     59    60    61    62     0     1     2     3
RSS hash key:
d8:f8:eb:51:72:3c:36:da:9c:5f:2b:de:d2:d5:f2:ec:ee:a1:1f:37:6e:03:74:a1:be:0b:e0:bc:93:2d:e2:76:62:e9:7b:97:b6:3b:66:50
RSS hash function:
    toeplitz: on
    xor: off
    crc32: off
[hyperai] root@gtx5090-7:~# ethtool -x nic1
RX flow hash indirection table for nic1 with 63 RX ring(s):
    0:      0     1     2     3     4     5     6     7
    8:      8     9    10    11    12    13    14    15
   16:     16    17    18    19    20    21    22    23
   24:     24    25    26    27    28    29    30    31
   32:     32    33    34    35    36    37    38    39
   40:     40    41    42    43    44    45    46    47
   48:     48    49    50    51    52    53    54    55
   56:     56    57    58    59    60    61    62     0
   64:      1     2     3     4     5     6     7     8
   72:      9    10    11    12    13    14    15    16
   80:     17    18    19    20    21    22    23    24
   88:     25    26    27    28    29    30    31    32
   96:     33    34    35    36    37    38    39    40
  104:     41    42    43    44    45    46    47    48
  112:     49    50    51    52    53    54    55    56
  120:     57    58    59    60    61    62     0     1
  128:      2     3     4     5     6     7     8     9
  136:     10    11    12    13    14    15    16    17
  144:     18    19    20    21    22    23    24    25
  152:     26    27    28    29    30    31    32    33
  160:     34    35    36    37    38    39    40    41
  168:     42    43    44    45    46    47    48    49
  176:     50    51    52    53    54    55    56    57
  184:     58    59    60    61    62     0     1     2
  192:      3     4     5     6     7     8     9    10
  200:     11    12    13    14    15    16    17    18
  208:     19    20    21    22    23    24    25    26
  216:     27    28    29    30    31    32    33    34
  224:     35    36    37    38    39    40    41    42
  232:     43    44    45    46    47    48    49    50
  240:     51    52    53    54    55    56    57    58
  248:     59    60    61    62     0     1     2     3
RSS hash key:
d8:f8:eb:51:72:3c:36:da:9c:5f:2b:de:d2:d5:f2:ec:ee:a1:1f:37:6e:03:74:a1:be:0b:e0:bc:93:2d:e2:76:62:e9:7b:97:b6:3b:66:50
RSS hash function:
    toeplitz: on
    xor: off
    crc32: off
[hyperai] root@gtx5090-7:~# ls /sys/class/net/nic0/queues/|grep rx|uniq |sort -n
rx-0
rx-1
rx-10
rx-100
rx-101
rx-102
rx-103
rx-104
rx-105
rx-106
rx-107
rx-108
rx-109
rx-11
rx-110
rx-111
rx-112
rx-113
rx-114
rx-115
rx-116
rx-117
rx-118
rx-119
rx-12
rx-120
rx-121
rx-122
rx-123
rx-124
rx-125
rx-13
rx-14
rx-15
rx-16
rx-17
rx-18
rx-19
rx-2
rx-20
rx-21
rx-22
rx-23
rx-24
rx-25
rx-26
rx-27
rx-28
rx-29
rx-3
rx-30
rx-31
rx-32
rx-33
rx-34
rx-35
rx-36
rx-37
rx-38
rx-39
rx-4
rx-40
rx-41
rx-42
rx-43
rx-44
rx-45
rx-46
rx-47
rx-48
rx-49
rx-5
rx-50
rx-51
rx-52
rx-53
rx-54
rx-55
rx-56
rx-57
rx-58
rx-59
rx-6
rx-60
rx-61
rx-62
rx-63
rx-64
rx-65
rx-66
rx-67
rx-68
rx-69
rx-7
rx-70
rx-71
rx-72
rx-73
rx-74
rx-75
rx-76
rx-77
rx-78
rx-79
rx-8
rx-80
rx-81
rx-82
rx-83
rx-84
rx-85
rx-86
rx-87
rx-88
rx-89
rx-9
rx-90
rx-91
rx-92
rx-93
rx-94
rx-95
rx-96
rx-97
rx-98
rx-99
[hyperai] root@gtx5090-7:~# ls /sys/class/net/nic1/queues/|grep rx|uniq |sort -n
rx-0
rx-1
rx-10
rx-100
rx-101
rx-102
rx-103
rx-104
rx-105
rx-106
rx-107
rx-108
rx-109
rx-11
rx-110
rx-111
rx-112
rx-113
rx-114
rx-115
rx-116
rx-117
rx-118
rx-119
rx-12
rx-120
rx-121
rx-122
rx-123
rx-124
rx-125
rx-13
rx-14
rx-15
rx-16
rx-17
rx-18
rx-19
rx-2
rx-20
rx-21
rx-22
rx-23
rx-24
rx-25
rx-26
rx-27
rx-28
rx-29
rx-3
rx-30
rx-31
rx-32
rx-33
rx-34
rx-35
rx-36
rx-37
rx-38
rx-39
rx-4
rx-40
rx-41
rx-42
rx-43
rx-44
rx-45
rx-46
rx-47
rx-48
rx-49
rx-5
rx-50
rx-51
rx-52
rx-53
rx-54
rx-55
rx-56
rx-57
rx-58
rx-59
rx-6
rx-60
rx-61
rx-62
rx-63
rx-64
rx-65
rx-66
rx-67
rx-68
rx-69
rx-7
rx-70
rx-71
rx-72
rx-73
rx-74
rx-75
rx-76
rx-77
rx-78
rx-79
rx-8
rx-80
rx-81
rx-82
rx-83
rx-84
rx-85
rx-86
rx-87
rx-88
rx-89
rx-9
rx-90
rx-91
rx-92
rx-93
rx-94
rx-95
rx-96
rx-97
rx-98
rx-99
[hyperai] root@gtx5090-7:~# grep mlx5 /proc/interrupts | wc -l
128 我这个到底有多少网卡队列 为啥 每张网卡的rx 都是126 

你这个现象的关键在于:你看到的是不同层面的"队列",它们不是一个概念。

你现在机器上的数据:

查看方式 结果 含义
ethtool -l nic0 Combined: 63 网卡当前配置的 硬件 channel 数 / RSS ring 数
ethtool -x nic0 63 RX ring(s) RSS 实际使用的 RX ring 数
/proc/interrupts 128 个 mlx5 IRQ 两个 PF 各 64 个 completion IRQ(包含 async)
/sys/class/net/nic0/queues/rx-* rx-0 ~ rx-125 Linux netdev queue 映射,不等于 RSS queue

你的真实网络队列应该这样理解

你的硬件:

复制代码
PCI:
0000:c2:00.0
0000:c2:00.1

两个 function:

复制代码
c2:00.0  -> nic0
c2:00.1  -> nic1

每个:

复制代码
Combined channel = 63

所以:

复制代码
nic0:
  RX ring: 63
  TX ring: 63

nic1:
  RX ring: 63
  TX ring: 63

总 RSS RX:

复制代码
63 × 2 = 126

为什么 /sys 里面是 rx-0 到 rx-125?

这里最容易误解。

Linux 的:

复制代码
/sys/class/net/nic0/queues/

不是直接显示硬件 RSS ring。

它显示的是 netdev queue namespace

mlx5 驱动会创建更多 queue 对象,例如:

  • channel queue

  • completion queue 映射

  • XDP queue

  • 内核内部 queue

所以:

复制代码
rx-0 ~ rx-125

不代表:

复制代码
126 个 RSS RX ring

因为你的 RSS 已经证明:

复制代码
ethtool -x:
63 RX ring(s)

这个才是 RSS 层面的真实数量。


为什么 grep mlx5 是 128?

你执行:

复制代码
grep mlx5 /proc/interrupts | wc -l

得到:

复制代码
128

原因:

每个 PF:

复制代码
mlx5_async0
+
mlx5_comp0 ~ mlx5_comp62

数量:

复制代码
1 async
+
63 completion
=
64 IRQ

两个 PF:

复制代码
64 × 2 = 128

完全对应。

所以:

复制代码
nic0:
  mlx5_async0
  mlx5_comp0-62

nic1:
  mlx5_async0
  mlx5_comp0-62

你的最终拓扑应该画成:

复制代码
                 Mellanox PF0 nic0
                       |
              RSS 63 RX rings
                       |
          comp0 ---------------- comp62
             |                      |
           IRQ251?              IRQ314?
             |                      |
          CPU NUMA1            CPU NUMA1


                 Mellanox PF1 nic1
                       |
              RSS 63 RX rings
                       |
          comp0 ---------------- comp62
             |
          CPU NUMA1

所以你的答案:

每张网卡到底多少 RX 队列?

严格说:

  • RSS RX ring:63 个

  • /sys/class/net/.../queues/rx-* 显示:126 个(驱动 queue 对象)

  • IRQ completion queue:63 个

对于调 RPS、IRQ affinity、softirq:

63 个 RSS ring / mlx5_comp IRQ

不要按照:

复制代码
rx-0 ~ rx-125

去绑 CPU。


下一步你应该确认 IRQ CPU 分布

执行:

复制代码
for irq in $(grep mlx5_comp /proc/interrupts | awk -F: '{print $1}'); do
    echo -n "$irq "
    cat /proc/irq/$irq/smp_affinity_list
done | head -20

你现在最关心的是:

是不是:

复制代码
128-255
384-511

如果是:

你的 RSS + IRQ + NUMA 已经正确。

如果出现:

复制代码
0-127

那才需要调 irqbalance 或手工绑 IRQ。

目前从你贴出的信息看,网卡队列配置本身没有问题,RPS 是否开启才是下一步重点。

相关推荐
AlbertS1 小时前
Let‘s Encrypt 证书自动续期并自动应用到Nginx
运维·nginx·ssl·cerbot·renew·续期
kdxiaojie1 小时前
Linux 驱动研究 —— V4L2 (14)
linux·运维·笔记·学习
IMPYLH1 小时前
HTML 的 <dl> 元素
linux·windows·html
如若1231 小时前
Ubuntu 无 sudo 安装花生壳并实现 SSH 内网穿透:Conda 环境部署、冲突排查与自动启动
linux·运维·ubuntu·ssh·内网穿透
承渊政道2 小时前
Linux系统学习【掌握Ext系列⽂件系统的相关内容】
linux·运维·学习·文件系统·存储结构·inode
池以遇2 小时前
云原生——LVS
运维·云原生·lvs
Ivan CloudBay2 小时前
服务器关机后,网站会发生什么?
运维·服务器
数智化管理手记4 小时前
手工统计指标误差大、效率低?指标管理系统如何告别人工算数痛点?
大数据·运维·数据库·人工智能·云计算
Better Bench10 小时前
WSL2 Ubuntu 中 Claude CLI “command not found” 故障排查与修复
linux·ubuntu·claude·wsl·claudecode