아래에 표시된 것처럼 nvidia는 인터럽트를 공유하고 인터럽트는 CPU0만 사용합니다. nvidia의 인터럽트를 변경하고 두 CPU를 모두 사용하도록 하려면 어떻게 해야 합니까?
여기두 번째 문제를 설명하는 기사입니다. smp_affinity를 수정하여 CPU0과 CPU1 사이를 변경할 수 있지만 두 CPU를 모두 사용하도록 설정하는 방법을 이해하지 못합니다.
~에 따르면이것블로그 smp_affinity를 3으로 설정하면 CPU0과 CPU1을 모두 사용해야 합니다. 실제로 제 경우에는 CPU0을 사용합니다(1로 설정된 것처럼 작동합니다). CPU1을 사용하려면 2로 설정하세요.
radu@radu-work:~$ cat /proc/interrupts
CPU0 CPU1
0: 79 0 IO-APIC-edge timer
1: 9 17152 IO-APIC-edge i8042
4: 2 0 IO-APIC-edge
6: 5 0 IO-APIC-edge floppy
7: 0 0 IO-APIC-edge parport0
8: 1 0 IO-APIC-edge rtc0
9: 0 0 IO-APIC-fasteoi acpi
12: 694613 0 IO-APIC-edge i8042
16: 1233922 0 IO-APIC-fasteoi uhci_hcd:usb3, ahci, nvidia
17: 3961 168757 IO-APIC-fasteoi uhci_hcd:usb4, pata_jmicron
18: 0 0 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb7
19: 59 0 IO-APIC-fasteoi ata_piix, ata_piix, uhci_hcd:usb6
22: 819 6915 IO-APIC-fasteoi HDA Intel
23: 2 0 IO-APIC-fasteoi ehci_hcd:usb2, uhci_hcd:usb5, eth
radu@radu-work:~$ sudo cat /proc/irq/16/smp_affinity
1
root@radu-work:~# uname -a
Linux radu-work 2.6.32-32-generic #62-Ubuntu SMP Wed Apr 20 21:54:21 UTC 2011 i686 GNU/Linux
감사해요.
편집하다: 나는 내 Linux 박스에서 HD 영화(최소 720편)를 재생하려고 합니다. 나는 nvidia 66xx 시리즈, Linux 버전 Ubuntu 11.04를 가지고 있고 nvidia 독점 드라이버를 설치했지만 이전 하드웨어(8xxx 시리즈 이상만)에 대한 하드웨어 가속(및 비디오 디코딩)을 지원하지 않으므로 디코딩은 소프트웨어에서 수행됩니다. HD 영화를 시청하려고 하면 이미지가 몇 초 동안 정지되었다가 몇 초 동안 작동했다가 다시 정지됩니다. CPU 사용량이 내 관심을 끌었고 nvidia 드라이버는 하나의 CPU만 사용하므로 nvidia가 두 개의 CPU를 사용하도록 할 수 있다면 아마도 더 나은 성능을 얻을 수 있고 결국 내 Linux 박스 영화에서 HD를 볼 수 있을 것이라고 생각했습니다. 그런데 저는 가능한 모든 Linux 플레이어를 사용해 보았습니다: mplayer(야간 빌드도 포함), 토템, vlc 등...
편집하다: 인터럽트 밸런싱 - 디버깅
root@radu-work:/# irqbalance --debug
Package 0: cpu mask is 00000001 (workload 0)
Cache domain 0: cpu mask is 00000001 (workload 0)
CPU number 0 (workload 0)
CPU number 0 (workload 0)
Package 0: cpu mask is 00000003 (workload 0)
Cache domain 0: cpu mask is 00000003 (workload 0)
CPU number 0 (workload 0)
CPU number 1 (workload 0)
Interrupt 44 (class ethernet) has workload 7
Interrupt 0 (class timer) has workload 0
Interrupt 16 (class storage) has workload 122
Interrupt 17 (class storage) has workload 29
Interrupt 19 (class storage) has workload 0
Interrupt 45 (class legacy) has workload 2
Interrupt 1 (class legacy) has workload 2
Interrupt 12 (class legacy) has workload 0
-----------------------------------------------------------------------------
IRQ delta is 152640
Rescanning cpu topology
Package 0: cpu mask is 00000001 (workload 0)
Cache domain 0: cpu mask is 00000001 (workload 0)
CPU number 0 (workload 0)
CPU number 0 (workload 0)
Package 0: cpu mask is 00000003 (workload 0)
Cache domain 0: cpu mask is 00000003 (workload 0)
CPU number 0 (workload 0)
CPU number 1 (workload 0)
Package 0: cpu mask is 00000001 (workload 16)
Cache domain 0: cpu mask is 00000001 (workload 16)
CPU number 0 (workload 3)
Interrupt 44 (ethernet/2)
CPU number 0 (workload 0)
Interrupt 17 (storage/9)
Interrupt 19 (storage/0)
Interrupt 45 (legacy/0)
Interrupt 12 (legacy/0)
Package 0: cpu mask is 00000003 (workload 42)
Cache domain 0: cpu mask is 00000003 (workload 42)
CPU number 0 (workload 0)
CPU number 1 (workload 0)
Interrupt 16 (storage/40)
Interrupt 1 (legacy/0)
-----------------------------------------------------------------------------
...
-----------------------------------------------------------------------------
IRQ delta is 10
IRQ delta is 10, switching to power mode
Rescanning cpu topology
Package 0: cpu mask is 00000001 (workload 0)
Cache domain 0: cpu mask is 00000001 (workload 0)
CPU number 0 (workload 0)
CPU number 0 (workload 0)
Package 0: cpu mask is 00000003 (workload 0)
Cache domain 0: cpu mask is 00000003 (workload 0)
CPU number 0 (workload 0)
CPU number 1 (workload 0)
Package 0: cpu mask is 00000001 (workload 38)
Cache domain 0: cpu mask is 00000001 (workload 38)
CPU number 0 (workload 36)
Interrupt 44 (ethernet/35)
CPU number 0 (workload 0)
Interrupt 16 (storage/0)
Interrupt 1 (legacy/0)
Package 0: cpu mask is 00000003 (workload 4)
Cache domain 0: cpu mask is 00000003 (workload 4)
CPU number 0 (workload 0)
CPU number 1 (workload 0)
Interrupt 19 (storage/0)
Interrupt 17 (storage/0)
Interrupt 45 (legacy/0)
Interrupt 12 (legacy/0)
답변1
당신은 잘못된 나무를 가지고 있습니다. 두 CPU가 모두 인터럽트를 수신하면 성능이 좋아지는 것이 아니라 나빠집니다. 한편으로 이는 소프트웨어 디코더가 지속적으로 중단되고 있음을 의미합니다. 반면에 이는 인터럽트 코드가 캐시에서 핫할 가능성이 적다는 것을 의미합니다. 상황이 더 악화되는 데에는 다른 많은 이유가 있습니다.