저는 최신 커널(예: 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를 포괄하므로 " "이 됩니다 . 이것이 버그인지 또는 ""가 의미가 있는지 아는 사람이 있습니까? 누군가 나에게 설명해 줄 수 있습니까?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
커널 소스 코드에서 자세한 내용을 알아보세요.