/proc/irq/*/smp_affinityが私のコンピュータのCPU数と比較して広すぎるマスクを表示するのはなぜですか?

/proc/irq/*/smp_affinityが私のコンピュータのCPU数と比較して広すぎるマスクを表示するのはなぜですか?

私は最新のカーネル(例: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をカバーしているので、 ""になります。これがバグなのか、""が意味があるのか​​を知っている人はいますか?誰かが私に説明できますか?2IRQ 0fff4411114IRQ 0fff

また、私のCPUコンテキストでIRQ 8「」が意味するのは、すべてのCPUがこの割り込みの対象になるという意味です。この場合、これはすべてのCPU(全体)をカバーするのとまったく同じです。つまり、 ""は" "と同じですが、私には理解できません。0f44IRQ 040fff

より詳細に理解できるように、いかなる種類の説明やご案内もいただければ幸いです。

よろしくお願いします。

答え1

アフィニティビットマスクのサイズは、アフィニティビットマスクの数によって異なります。サポート済みシステムに存在する実際のCPU数ではなく、実行時に現在のCPUに対応するビットのみが考慮されるカーネルのCPU数。バラよりIRQ-affinity.txtそしてcpumask.hカーネルのソースコードで詳細を学びましょう。

関連情報