linux – ethernet smp_affinity vs / proc / interrupts vs / s
我的目标是配置我们的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-0 106: 61 11 3841 PCI-MSI-X eth1-1 114: 28 0 61452 PCI-MSI-X eth1-2 122: 24 1586 22 PCI-MSI-X eth1-3 130: 2912 0 337 PCI-MSI-X eth1-4 138: 21 0 28 PCI-MSI-X eth1-5 146: 21 0 56 PCI-MSI-X eth1-6 154: 34 1 1 PCI-MSI-X eth1-7 209: 23 0 0 IO-APIC-level ehci_hcd:usb1 217: 0 0 0 IO-APIC-level ehci_hcd:usb2,uhci_hcd:usb5,uhci_hcd:usb7 225: 0 0 0 IO-APIC-level uhci_hcd:usb3 233: 0 0 0 IO-APIC-level uhci_hcd:usb4 NMI: 7615 2989 2931 LOC: 600328144 600328099 600327086 ERR: 0 MIS: 0 为什么“eth1”的形式为“eth1-X”有多个条目? 此外,“/ sys / class / net / eth1 / device / irq”的内容为“90”??.但是上面的中断列表中没有90. 所以让我说我只看“eth1-0”,它是IRQ 98./ proc / irq / 98 / smp_affinity的内容是: 00000000,00000000,000 这是一个数字列表,而不仅仅是一个数字. 那么如何设置eth1的smp_affinity呢? 我找到的在线示例和文档都没有提到这样的情况;他们总是在/ proc / interrupts中只有一个“ethX”条目;指示的中断与/ sys / class / net / ethX / device / irq匹配;并且/ proc / irq / N / smp_affinity中只有一个数字. FWIW,我要补充一点,这个应用程序对延迟非常敏感.到了我们禁用C状态和处理器频率缩放的程度(因为这些功能会导致过多的延迟).微秒在这里有所作为. 编辑:我偶然发现了以下网页
解决方法
因为有多个tx / rx队列.这些队列通常是(本地地址,端口,远程地址,端口)和其他一些东西的哈希.抑制多个队列可能会更容易假设您的流量来源很少,那么使您的应用程序更具确定性.或者你可以查找算法并避免短暂的端口,如果这更容易. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |