如何在 Xen XCP 内的 Ubuntu PV domU 上更改 IRQ 的 SMP 关联?

Ale*_*ysh 3 linux ubuntu troubleshooting smp irq

由于这个问题中概述的原因,我想更改 IRQ SMP 关联性:CPU0 is swamped with eth1 interrupts

但我不能——Input/output error当我尝试写信给/proc/irq/*/smp_affinity.

请向我指出有关此事的 HOWTO。(正式参考/proc/irq/*/也很酷。)

血腥细节:

请注意,这是基于 Ubuntu 的 Xen XCP 主机内的 VM (PV domU)。

$ uname -a
Linux MYHOST 2.6.38-15-virtual #59-Ubuntu SMP Fri Apr 27 16:40:18 UTC 2012 i686 i686 i386 GNU/Linux

$ lsb_release -a
没有可用的 LSB 模块。
分销商 ID: Ubuntu
描述:Ubuntu 11.04
发布:11.04
代号:natty

$ sudo cat /proc/irq/*/smp_affinity
01
01
01
01
01
80
80
80
80
80
80
40
40
40
40
40
40
20
20
20
20
20
20
10
10
10
10
10
10
08
08
08
08
08
08
04
04
04
04
04
04
02
02
02
02
02
02
01
01
01
01
01
01

更新。错误详情:

$ N=$(grep -c 处理器 /proc/cpuinfo)
$回声$N
8

$ printf %x $((2**N-1))
ff

$ printf %x $((2**N-1)) | 须藤三通/proc/irq/*/smp_affinity
fftee:/proc/irq/288/smp_affinity:输入/输出错误
三通:/proc/irq/289/smp_affinity:输入/输出错误
三通:/proc/irq/290/smp_affinity:输入/输出错误
三通:/proc/irq/291/smp_affinity:输入/输出错误
三通:/proc/irq/292/smp_affinity:输入/输出错误
三通:/proc/irq/293/smp_affinity:输入/输出错误
三通:/proc/irq/294/smp_affinity:输入/输出错误
三通:/proc/irq/295/smp_affinity:输入/输出错误
三通:/proc/irq/296/smp_affinity:输入/输出错误
三通:/proc/irq/297/smp_affinity:输入/输出错误
三通:/proc/irq/298/smp_affinity:输入/输出错误
三通:/proc/irq/299/smp_affinity:输入/输出错误
三通:/proc/irq/300/smp_affinity:输入/输出错误
三通:/proc/irq/301/smp_affinity:输入/输出错误
三通:/proc/irq/302/smp_affinity:输入/输出错误
三通:/proc/irq/303/smp_affinity:输入/输出错误
三通:/proc/irq/304/smp_affinity:输入/输出错误
三通:/proc/irq/305/smp_affinity:输入/输出错误
三通:/proc/irq/306/smp_affinity:输入/输出错误
三通:/proc/irq/307/smp_affinity:输入/输出错误
三通:/proc/irq/308/smp_affinity:输入/输出错误
三通:/proc/irq/309/smp_affinity:输入/输出错误
三通:/proc/irq/310/smp_affinity:输入/输出错误
三通:/proc/irq/311/smp_affinity:输入/输出错误
三通:/proc/irq/312/smp_affinity:输入/输出错误
三通:/proc/irq/313/smp_affinity:输入/输出错误
三通:/proc/irq/314/smp_affinity:输入/输出错误
三通:/proc/irq/315/smp_affinity:输入/输出错误
三通:/proc/irq/316/smp_affinity:输入/输出错误
三通:/proc/irq/317/smp_affinity:输入/输出错误
三通:/proc/irq/318/smp_affinity:输入/输出错误
三通:/proc/irq/319/smp_affinity:输入/输出错误
三通:/proc/irq/320/smp_affinity:输入/输出错误
三通:/proc/irq/321/smp_affinity:输入/输出错误
三通:/proc/irq/322/smp_affinity:输入/输出错误
三通:/proc/irq/323/smp_affinity:输入/输出错误
三通:/proc/irq/324/smp_affinity:输入/输出错误
三通:/proc/irq/325/smp_affinity:输入/输出错误
三通:/proc/irq/326/smp_affinity:输入/输出错误
三通:/proc/irq/327/smp_affinity:输入/输出错误
三通:/proc/irq/328/smp_affinity:输入/输出错误
三通:/proc/irq/329/smp_affinity:输入/输出错误
三通:/proc/irq/330/smp_affinity:输入/输出错误
三通:/proc/irq/331/smp_affinity:输入/输出错误
三通:/proc/irq/332/smp_affinity:输入/输出错误
三通:/proc/irq/333/smp_affinity:输入/输出错误
三通:/proc/irq/334/smp_affinity:输入/输出错误
三通:/proc/irq/335/smp_affinity:输入/输出错误

更新。 irqbalance在跑:

$ sudo 服务 irqbalance 状态
irqbalance 启动/运行,进程 560

chu*_*utz 7

Documentation/IRQ-affinity.txtLinux 源代码中有一个文件调用。

/proc/irq/IRQ#/smp_affinity specifies which target CPUs are permitted
for a given IRQ source. It's a bitmask of allowed CPUs. It's not allowed
to turn off all CPUs, and if an IRQ controller does not support IRQ
affinity then the value will not change from the default 0xffffffff.
Run Code Online (Sandbox Code Playgroud)

这里的问题是位掩码是十六进制的。所以,如果你有 N 个 CPU,

N=$(grep -c processor /proc/cpuinfo)
Run Code Online (Sandbox Code Playgroud)

为所有 CPU 启用所有 IRQ,您可以在其中有 N 个 CPU

printf %x $((2**N-1)) | sudo tee /proc/irq/*/smp_affinity
Run Code Online (Sandbox Code Playgroud)

内核 3.0 及更高版本有一个名为smp_affinity_list. 此文件采用逗号分隔的 CPU 或 CPU 范围列表。有效示例:02,3,5-70-7。前面的命令等效于:

echo 0-$((N-1)) | sudo tee /proc/irq/*/smp_affinity_list
Run Code Online (Sandbox Code Playgroud)

  • 不起作用,请参阅问题的更新。 (2认同)