我的目标是为自定义低延迟网络程序配置我们的 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 …Run Code Online (Sandbox Code Playgroud) 在 Atom 450 上的 OpenBSD 上,在 BIOS 中配置了 HPET 而不是,还有超线程/ACPI 开关,似乎没有什么区别。
这是我的 vmstat -iz
# vmstat 2
procs memory page disk traps cpu
r b w avm fre flt re pi po fr sr wd0 int sys cs us sy id
0 0 0 3488 981792 429 0 0 0 0 0 35 295771 906 89 1 51 48
0 0 0 3492 981788 12 0 0 0 0 0 0 278490 37 10 0 50 50
^C
# vmstat …Run Code Online (Sandbox Code Playgroud) 在旧版本的 linux 架构中,系统调用在执行过程中总是会产生中断。它们将通过将系统调用号设置为 %eax 并将参数设置为 %ebx、%ecx 等,然后发出特定中断 int 0x80 来执行。因此,系统调用可以说是系统上软件中断的常见原因。
然而,在 x86_64 的现代体系结构上,有一个特定的系统调用指令“syscall”,它绕过了使用中断 0x80 的需要,因此根本不需要中断描述符表。虽然我相信之前为 syscall 生成中断的方法仍然受支持,但 syscall 指令似乎是在实践中完成的方式。
因此,我的问题是:说系统调用产生中断是否不再正确?例如,系统调用是否仍会增加在 vmstat 的“中断”列输出中看到的数字?
所以我有一台Dell PowerEdge R610服务器正在运行Debian Jessie,根据一些文档,它的芯片组有问题:https : //www.novell.com/support/kb/doc.php?id=7014344 ( Intel 5500 rev 13)。
提供的外壳测试确认了该芯片组的存在: lspci -nn | grep -qE '8086:(340[36].*rev 13|3405.*rev (12|13|22))' && echo "Interrupt remapping is broken"
它已VT-d在 BIOS中禁用并已GRUB_CMDLINE_LINUX_DEFAULT="quiet intremap=off"添加到/etc/grub/default.
我的问题是,这是否会影响MSI-XNIC 卡的功能(哪个应该在内核之间传播中断)?
在这个特定的服务器上,确实只有一个内核在服务中断,但我不确定这是否是禁用 BIOS 和内核设置的结果。或者还有其他什么东西在起作用?
(不幸的是,我无法访问 BIOS 来更改设置并在功能打开的情况下进行测试)。
谢谢你。
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
0: 43 0 0 0 0 0 0 0 IO-APIC-edge timer
1: 3 0 0 0 0 0 0 0 …Run Code Online (Sandbox Code Playgroud) 我想获取有关分配给我的网卡的中断的信息。除了 /proc/interrupts 之外,还有其他方法吗?
interrupts ×5
linux ×3
broadcom ×1
bsd ×1
debian ×1
ethernet ×1
intel ×1
irq ×1
kernel ×1
networking ×1
openbsd ×1
performance ×1