Tra*_*ago 9 linux ubuntu interrupts irq
我想禁止某些 CPU 的中断。我听说过 IRQBALANCE_BANNED_CPUS 选项。我看到 irqbalance 在我机器的后台运行。我在哪里编辑以及如何配置该选项?例如,我想从中断中排除 cpus 2,3,4,5。参数描述符是:
提供 irqbalance 应该忽略的 CPU 掩码,并且永远不会将中断分配给
面具是什么意思?我在哪里使用该选项配置 irqbalance?
EDIT1:如何知道我的配置是否有效,换句话说,我的 CPU 没有收到中断?我正在检查 /proc/interrupts 但那里的一些数字正在增加。
EDIT2:现在我用 IRQBALANCE_BANNED_CPUS=3e 启动了我的机器,所以只有 CPU 0 不被禁止中断。所以我应该会看到 cpo0 收到很多中断,而其他 cpu 没有收到中断,对吗?这是我的 /proc/interrupts。所有 cpu 的粗体行都在变化。第 22、24、35 行和 LOC 正在更改。
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5
0: 26 0 0 0 0 0 IO-APIC-edge timer
1: 2 0 0 0 0 0 IO-APIC-edge i8042
6: 3 0 0 0 0 0 IO-APIC-edge floppy
8: 1 0 0 0 0 0 IO-APIC-edge rtc0
9: 0 0 0 0 0 0 IO-APIC-fasteoi acpi
12: 4 0 0 0 0 0 IO-APIC-edge i8042
14: 13556 0 0 0 0 0 IO-APIC-edge ata_piix
15: 0 0 0 0 0 0 IO-APIC-edge ata_piix
18: 0 0 0 0 0 0 IO-APIC-fasteoi ata_piix
19: 2 0 0 0 0 0 IO-APIC-fasteoi ohci1394
20: 3 0 0 0 0 0 IO-APIC-fasteoi ehci_hcd:usb2, uhci_hcd:usb3, uhci_hcd:usb6
21: 197 635 39 0 0 0 IO-APIC-fasteoi uhci_hcd:usb4, uhci_hcd:usb7, HDA Intel
22: 344 3506 0 702 0 0 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb5, uhci_hcd:usb8
24: 162 48 0 0 0 0 IO-APIC-fasteoi nvidia
35: 174 0 47 0 0 0 IO-APIC-fasteoi nvidia
53: 3517 0 0 0 0 0 PCI-MSI-edge eth0
NMI: 0 0 0 0 0 0 Non-maskable interrupts
LOC: 11007 8840 6480 5652 4272 3046 Local timer interrupts
SPU: 0 0 0 0 0 0 Spurious interrupts
PMI: 0 0 0 0 0 0 Performance monitoring interrupts
PND: 0 0 0 0 0 0 Performance pending work
RES: 292 169 217 125 122 126 Rescheduling interrupts
CAL: 86 280 254 292 293 291 Function call interrupts
TLB: 1147 1031 1348 616 177 322 TLB shootdowns
TRM: 0 0 0 0 0 0 Thermal event interrupts
THR: 0 0 0 0 0 0 Threshold APIC interrupts
MCE: 0 0 0 0 0 0 Machine check exceptions
MCP: 2 2 2 2 2 2 Machine check polls
ERR: 5
MIS: 0
Run Code Online (Sandbox Code Playgroud)
EDIT3:看起来IRQBALANCE_BANNED_CPUS 选项在 Ubuntu 上完全被忽略。我尝试用 1, 3e 重新启动我的机器,但到处都是中断。就在我通过设置 ENABLED=0 禁用 irqbalance 时,我只在 cpu0 上获得了干净的 /proc/interrupts 而没有其他 cpu。
您在/etc/default/irqbalance 中设置 IRQBALANCE_BANNED_CPUS。我通过查看/etc/init.d/irqbalance发现了这一点。但是该设置的有效值是什么?从红帽的手册页:
这是一个没有前导“0x”的十六进制掩码,在具有大量处理器的系统上,每组八个十六进制数字用逗号“,”分隔。即
export IRQBALANCE_BANNED_CPUS=fc0
会阻止 irqbalance 将 irqs 分配给第 7-12 个 cpu (cpu6-cpu11) 或export IRQBALANCE_BANNED_CPUS=ff000000,00000001
会阻止 irqbalance 将 irqs 分配给第一个 (cpu0) 和第 57-64 个 cpu (cpu56-cpu63)。
面具的概念在维基百科上有解释。读完,然后回来。让我们分解 Red Hat 的第一个示例。十六进制写为 fc0 的数字在二进制中写为 111111000000。从右到左扫描(即从最低有效位到最高有效位),有六个零。这意味着可以为第 1-5 个 CPU(cpu0-cpu5)分配中断。然后,有六个。这意味着第 7-12 个 cpu(cpu6-cpu11)不会被分配中断。
听起来您希望允许 cpu0 和 cpu1 接收中断,但阻止 cpu2、cpu3、cpu4 和 cpu5 被分配中断。这意味着您需要两个零和四个 1,即 111100。这是十六进制的 3C。所以,你创建的/ etc /默认/ irqbalance与内容
ENABLED="1"
ONESHOT="0"
IRQBALANCE_BANNED_CPUS="3f"
Run Code Online (Sandbox Code Playgroud)
要查看发生了什么,请尝试
$ sudo service irqbalance stop
Stopping SMP IRQ Balancer: irqbalance.
$ source /etc/default/irqbalance
$ sudo irqbalance --debug
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14594 次 |
最近记录: |