linux – ethernet smp_affinity vsprocinterrupts vssysclassnetethXdevice

linux – ethernet smp_affinity vsprocinterrupts vssysclassnetethXdevice,第1张

概述我的目标是配置我们的CentOS(“免费”RHEL)5.x服务器,用于自定义低延迟网络程序.我想尝试将以太网NIC中断处理绑定到程​​序运行的同一CPU(希望提高缓存利用率).此过程的第一步是确定NIC的IRQ. 以下是一台服务器上/ proc / interrupts的内容(请注意,为简洁起见,我删除了CPU 2到14): CPU0 CPU1 CPU15 0: 60 我的目标是配置我们的CentOS(“免费”RHEL)5.x服务器,用于自定义低延迟网络程序.我想尝试将以太网NIC中断处理绑定到程​​序运行的同一cpu(希望提高缓存利用率).此过程的第一步是确定NIC的IRQ.

以下是一台服务器上/ proc / interrupts的内容(请注意,为简洁起见,我删除了cpu 2到14):

cpu0       cpu1       cpu15  0:  600299726          0          0    IO-APIC-edge  timer  1:          3          0          0    IO-APIC-edge  i8042  8:          1          0          0    IO-APIC-edge  rtc  9:          0          0          0   IO-APIC-level  acpi 12:          4          0          0    IO-APIC-edge  i8042 50:          0          0          0   IO-APIC-level  uhci_hcd:usb6,uhci_hcd:usb8 58:       6644      25103          0   IO-APIC-level  ioc0 66:          0          0          0   IO-APIC-level  ata_piix 74:        221     533830          0   IO-APIC-level  ata_piix 98:         35          0    2902361       PCI-MSI-X  eth1-0106:         61         11       3841       PCI-MSI-X  eth1-1114:         28          0      61452       PCI-MSI-X  eth1-2122:         24       1586         22       PCI-MSI-X  eth1-3130:       2912          0        337       PCI-MSI-X  eth1-4138:         21          0         28       PCI-MSI-X  eth1-5146:         21          0         56       PCI-MSI-X  eth1-6154:         34          1          1       PCI-MSI-X  eth1-7209:         23          0          0   IO-APIC-level  ehci_hcd:usb1217:          0          0          0   IO-APIC-level  ehci_hcd:usb2,uhci_hcd:usb5,uhci_hcd:usb7225:          0          0          0   IO-APIC-level  uhci_hcd:usb3233:          0          0          0   IO-APIC-level  uhci_hcd:usb4NMI:       7615       2989       2931LOC:  600328144  600328099  600327086ERR:          0MIS:          0

为什么“eth1”的形式为“eth1-X”有多个条目?

此外,“/ sys / class / net / eth1 / device / irq”的内容为“90”​​.但是上面的中断列表中没有90.

所以让我说我只看“eth1-0”,它是IRQ 98./ proc / irq / 98 / smp_affinity的内容是:

00000000,00000000,000    

This format displays each 32-bit word in hexadecimal (using ASCII characters "0" - "9" and "a" - "f"); words are filled with leading zeros,if required. For masks longer than one word,a comma separator is used between words. Words are displayed in big-endian order,which has the most significant bit first. The hex digits within a word are also in big-endian order.

The number of 32-bit words displayed is the minimum number needed to display all bits of the bitmask,based on the size of the bitmask.

Examples of the Mask Format:

06002

A mask with bits 0,1,2,4,8,16,32,and 64 set displays as:

06003

The first "1" is for bit 64,the second for bit 32,the third for bit 16,the fourth for bit 8,the fifth for bit 4,and the "7" is for bits 2,and 0.

这是一个数字列表,而不仅仅是一个数字.

那么如何设置eth1的smp_affinity呢?

我找到的在线示例和文档都没有提到这样的情况;他们总是在/ proc / interrupts中只有一个“ethX”条目;指示的中断与/ sys / class / net / ethX / device / irq匹配;并且/ proc / irq / N / smp_affinity中只有一个数字.

FWIW,我要补充一点,这个应用程序对延迟非常敏感.到了我们禁用C状态和处理器频率缩放的程度(因为这些功能会导致过多的延迟).微秒在这里有所作为.

编辑:我偶然发现了以下网页
http://www.kernel.org/doc/man-pages/online/pages/man7/cpuset.7.html
虽然它是关于cpuset的,但它有一个标题为“Mask Format”的部分,我假设它与我在/ proc / irq // smp_affinity文件中看到的相同.引用:

This format displays each 32-bit word in hexadecimal (using ASCII
characters “0” – “9” and “a” – “f”); words are filled with leading zeros,
if required. For masks longer than one word,a comma separator is used
between words. Words are displayed in big-endian order,which has the
most significant bit first. The hex digits within a word are also in
big-endian order.

The number of 32-bit words displayed is the minimum number needed to
display all bits of the bitmask,based on the size of the bitmask.

Examples of the Mask Format:

06002

A mask with bits 0,and 64 set displays as:

06003

The first “1” is for bit 64,
the fourth for bit 8,and the “7” is for bits 2,
and 0.

解决方法

Why are there multiple entrIEs for “eth1” in the form of “eth1-X”?

因为有多个tx / rx队列.这些队列通常是(本地地址,端口,远程地址,端口)和其他一些东西的哈希.抑制多个队列可能会更容易假设您的流量来源很少,那么使您的应用程序更具确定性.或者你可以查找算法并避免短暂的端口,如果这更容易.

总结

以上是内存溢出为你收集整理的linux – ethernet smp_affinity vs / proc / interrupts vs / sys / class / net / ethX / device全部内容,希望文章能够帮你解决linux – ethernet smp_affinity vs / proc / interrupts vs / sys / class / net / ethX / device所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1037127.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存