正如你在下面看到的那样,nvidia正在共享内部中断,而中断只使用CPU0,如何更改nvidia的中断,以及如何让它同时使用两个CPU呢?
Here是一篇描述第二个问题的文章,我可以通过修改smp_affinity在CPU0和CPU1之间进行更改,但是我不明白如何将其设置为使用两个CPU.
根据this博客设置smp_affinity为3应该同时使用CPU0和CPU1.在我的情况下Actualy,它使用CPU0(表现得像设置为1).将其设置为2使用CPU1.
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机器播放高清电影(至少720).我有一个nvidia 66xx系列,Linux版本的Ubuntu 11.04,我有nvidia专有的驱动程序,但它们不支持旧硬件(仅8xxx系列及以上)的硬件加速(和视频解码),因此解码是在软件中完成的.当我试图看到高清电影时,图像冻结了几秒钟,工作几秒钟然后再次冻结. CPU使用率引起了我的注意,nvidia驱动程序只使用了一个CPU,所以我觉得如果我能让nvidia使用两个CPU,也许我会有更好的性能,并且能够最终在我的Linux机器上观看高清电影.顺便说一句,我已经尝试了每一个可用的Linux播放器:mplayer(甚至每晚构建),totem,vlc等等……
编辑:
irqbalance –debug
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)
解决方法:
你正在咆哮错误的树.让中断进入两个CPU会使性能变差,而不是更好.首先,这意味着软件解码器会不断被中断.另一方面,这意味着中断代码不太可能在缓存中变热.还有许多其他原因会使事情变得更糟.