/proc/irq/*/smp_affinity가 내 컴퓨터의 CPU 수에 비해 너무 넓은 마스크를 표시하는 이유는 무엇입니까?

/proc/irq/*/smp_affinity가 내 컴퓨터의 CPU 수에 비해 너무 넓은 마스크를 표시하는 이유는 무엇입니까?

저는 최신 커널(예: 3.19.0-22-generic)을 갖춘 X86_64 Ubuntu Desktop 15.04를 실행하고 있습니다. 인터럽트와 IRQ를 확인하던 중 smp_affinity의 비트마스크가 원래 값의 두 배인 것을 발견했습니다. 왜 이런 일이 발생하는지 궁금합니다.

그러나 더 명확하게 말하자면:

$ 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커널 소스 코드에서 자세한 내용을 알아보세요.

관련 정보