割り込み smp_affinity 変更

割り込み smp_affinity 変更

以下に示すように、nvidiaは割り込みを共有し、割り込みはCPU0のみを使用します。 nvidiaの割り込みを変更して両方のCPUを使用できるようにするにはどうすればよいですか?
ここ2番目の問題を説明する記事です。 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ドライバは1つのCPUしか使用しないので、nvidiaに2つの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が割り込みを受け取ると、パフォーマンスが良くなるのではなく悪化します。一方で、これはソフトウェアデコーダが継続的に中断されていることを意味する。一方、これは割り込みコードがキャッシュからホットになる可能性が低いことを意味します。状況がさらに悪化するには、他にも多くの理由があります。

答え2

見たことがありますか?割り込みバランス?やりたいことが解決しそうです。 Irqbalance は、キャッシュと同時に実行されるコアも考慮します。文書、これは/ procエントリを変更して達成することはできません。

(私はあなたの問題が完全に割り込み共有の欠如によるものだとは思わない。

関連情報