UbuntuでIRQBALANCE_BANNED_CPUSを使用してハードウェア割り込みを禁止する方法


9

特定のCPUからの割り込みを禁止したいのですが。IRQBALANCE_BANNED_CPUSオプションについて聞きました。マシンのバックグラウンドでirqbalanceが実行されているのがわかります。どこで編集し、そのオプションをどのように設定しますか?たとえば、割り込みからcpus 2、3、4、5を除外します。引数記述子は次のとおりです。

irqbalanceが無視し、割り込みを割り当てないCPUのマスクを提供します

マスクとはどういう意味ですか?そして、そのオプションでどこでirqbalanceを構成しますか?

編集1:私の構成が有効であること、つまり私のCPUが割り込みを受け取っていないことを知る方法は?/ proc / interruptsを確認していますが、いくつかの数値が増加しています。

EDIT2:今度はIRQBALANCE_BANNED_CPUS = 3eでマシンを起動したため、CPU 0のみが割り込み禁止になりません。だから私はcpo0が多くの割り込みを受け取り、他のcpusが割り込みを受け取っていないことを期待するべきですよね?これが私の/ proc / interruptsです。太字の行はすべてのCPUで変更されています。行22、24、35およびLOCは変更されています。

            CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       
   0:         26          0          0          0          0          0   IO-APIC-edge      timer
   1:          2          0          0          0          0          0   IO-APIC-edge      i8042
   6:          3          0          0          0          0          0   IO-APIC-edge      floppy
   8:          1          0          0          0          0          0   IO-APIC-edge      rtc0
   9:          0          0          0          0          0          0   IO-APIC-fasteoi   acpi
  12:          4          0          0          0          0          0   IO-APIC-edge      i8042
  14:      13556          0          0          0          0          0   IO-APIC-edge      ata_piix
  15:          0          0          0          0          0          0   IO-APIC-edge      ata_piix
  18:          0          0          0          0          0          0   IO-APIC-fasteoi   ata_piix
  19:          2          0          0          0          0          0   IO-APIC-fasteoi   ohci1394
  20:          3          0          0          0          0          0   IO-APIC-fasteoi   ehci_hcd:usb2, uhci_hcd:usb3, uhci_hcd:usb6
  21:        197        635         39          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb4, uhci_hcd:usb7, HDA Intel
  22:        344       3506          0        702          0          0   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb5, uhci_hcd:usb8
  24:        162         48          0          0          0          0   IO-APIC-fasteoi   nvidia
  35:        174          0         47          0          0          0   IO-APIC-fasteoi   nvidia
  53:       3517          0          0          0          0          0   PCI-MSI-edge      eth0
 NMI:          0          0          0          0          0          0   Non-maskable interrupts
 LOC:      11007       8840       6480       5652       4272       3046   Local timer interrupts
 SPU:          0          0          0          0          0          0   Spurious interrupts
 PMI:          0          0          0          0          0          0   Performance monitoring interrupts
 PND:          0          0          0          0          0          0   Performance pending work
 RES:        292        169        217        125        122        126   Rescheduling interrupts
 CAL:         86        280        254        292        293        291   Function call interrupts
 TLB:       1147       1031       1348        616        177        322   TLB shootdowns
 TRM:          0          0          0          0          0          0   Thermal event interrupts
 THR:          0          0          0          0          0          0   Threshold APIC interrupts
 MCE:          0          0          0          0          0          0   Machine check exceptions
 MCP:          2          2          2          2          2          2   Machine check polls
 ERR:          5
 MIS:          0

EDIT3:UbuntuではIRQBALANCE_BANNED_CPUSオプションが完全に無視されているようです。1、3eでマシンを再起動してみたところ、割り込みが発生しました。ENABLED = 0を設定してirqbalanceを無効にすると、cpu0だけでクリーンな/ proc / interruptsが取得され、他のCPUは取得されません。

回答:


7

IRQBALANCE_BANNED_CPUSを/ etc / default / irqbalanceに設定します/etc/init.d/irqbalanceを調べてこれを見つけました。しかし、その設定の有効な値は何ですか?Red Hatのmanページから:

これは、先頭に「0x」が付いていない16進マスクです。多数のプロセッサを搭載したシステムでは、8桁の16進数の各グループはカンマ「、」で区切られます。つまり export IRQBALANCE_BANNED_CPUS=fc0、irqbalanceが7番目から12番目のcpus(cpu6-cpu11)に export IRQBALANCE_BANNED_CPUS=ff000000,00000001irqsを割り当てないようにするか、irqbalanceが1番目(cpu0)および57番目から64番目のcpus(cpu56-cpu63)にirqsを割り当てないようにします。

マスク概念はウィキペディアで説明されています。それを読んで、戻ってきてください。Red Hatの最初の例を分解してみましょう。16進数でfc0として書き込まれる数値は、2進数で111111000000として書き込まれます。右から左にスキャンする(つまり、最下位ビットから最上位ビットへ)と、6つのゼロがあります。つまり、1〜5番目のCPU(cpu0〜cpu5)に割り込みを割り当てることができます。次に、6つあります。これは、7〜12番目のCPU(cpu6-cpu11)に割り込みが割り当てられないことを意味します。

cpu0とcpu1が割り込みを受信できるようにしたいが、cpu2、cpu3、cpu4、およびcpu5に割り込みが割り当てられないようにしたいようです。つまり、2つのゼロと4つの1、つまり111100が必要です。これは16進数で3Cです。だから、あなたは内容で/ etc / default / irqbalanceを作成するでしょう

ENABLED="1"
ONESHOT="0"
IRQBALANCE_BANNED_CPUS="3f"

何が起こっているかを確認するには、

$ sudo service irqbalance stop
Stopping SMP IRQ Balancer: irqbalance.
$ source /etc/default/irqbalance 
$ sudo irqbalance --debug

説明ありがとう。ここでの混乱は、6 CPUマシンでCPU 0を禁止することです。000001(1)または111110(3e)を使用しますか?最初ですよね?
TraderJoeChicago 2012

元の質問の編集内容を確認してください。/ proc / interruptsを読み取って構成が機能し、CPUが割り込みを禁止されていることを確認する方法を知る必要があります。ありがとう!
TraderJoeChicago 2012

編集番号3を参照してください。マスクをめちゃくちゃにしない限り、UbuntuではIRQBALANCE_BANNED_CPUSが無視されています。しかし、1と3eを試したが成功しなかった。:(
TraderJoeChicago 2012

デバッグ編集を参照してください。
sciurus 2012

2
いいえ。Ubuntu 10.04.1では動作しないことを確認できます。この構成オプションIRQBALANCE_BANNED_CPUS = "1"は無視されます。
TraderJoeChicago 2012

2

irqbalanceバグにより、IRQBALANCE_BANNED_CPUSがNUMAマシンで機能しない:http ://code.google.com/p/irqbalance/issues/detail?id=43

現在のところ、1.0.5は最新のirqbalanceリリースであり、修正はありません。


0

それを機能させるには、上記の3cを使用する必要があります。それ以降のバージョンはこれを自動的に行います(少なくともdebian / sidのv 1.9まで)


0

irqbalance問題のトラブルシューティングに関する上記の提案に追加-irqbalanceの実行から生じる割り込みアフィニティを表示するための便利なコマンド:

find /proc/irq/ -name smp_affinity | xargs cat | less
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.