私は最新のカーネル(例:3.19.0-22-generic)を備えたX86_64 Ubuntu Desktop 15.04を実行しています。割り込みとIRQの確認中に、smp_affinityのビットマスクが元の値の2倍であることがわかりました。なぜこれが起こるのだろうか。
しかし、より明確に言えば:
$ cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3
0: 21 0 0 0 IR-IO-APIC-edge timer
1: 113 1780 107 90 IR-IO-APIC-edge i8042
8: 0 1 0 0 IR-IO-APIC-edge rtc0
9: 455 1106 71 57 IR-IO-APIC-fasteoi acpi
12: 10768 131886 9077 7920 IR-IO-APIC-edge i8042
...
たとえば、次のようになります。
$ cat /proc/irq/0/smp_affinity
ff
$ cat /proc/irq/8/smp_affinity
0f
$ cat /proc/irq/47/smp_affinity
04
たとえば、 ""の代わりに ""1
が表示されると予想しました。その理由は、最初のコードリストにのみCPUがあり、ビットマスクがそれをカバーするのに十分であるためです。つまり、 ""はすべてのCPUをカバーしているので、 ""になります。これがバグなのか、""が意味があるのかを知っている人はいますか?誰かが私に説明できますか?2
IRQ 0
f
ff
4
4
1111
4
IRQ 0
f
ff
また、私のCPUコンテキストでIRQ 8
「」が意味するのは、すべてのCPUがこの割り込みの対象になるという意味です。この場合、これはすべてのCPU(全体)をカバーするのとまったく同じです。つまり、 ""は" "と同じですが、私には理解できません。0f
4
4
IRQ 0
4
0f
ff
より詳細に理解できるように、いかなる種類の説明やご案内もいただければ幸いです。
よろしくお願いします。
答え1
アフィニティビットマスクのサイズは、アフィニティビットマスクの数によって異なります。サポート済みシステムに存在する実際のCPU数ではなく、実行時に現在のCPUに対応するビットのみが考慮されるカーネルのCPU数。バラよりIRQ-affinity.txt
そしてcpumask.h
カーネルのソースコードで詳細を学びましょう。