2016-03-30 19 views
2

Linuxではネットカードがパケットを受信するとハード割り込みが発生し、割り込みコールバック機能でNET_RX_SOFTIRQが発生します。このsoftirqはハードIRQで同じCPUで動作しますか?ハード割り込みとsoftirq

+1

通常、それはハードウェア割り込みの出口で同じコアで実行しません。 – 0andriy

答えて

1

割り込み要求(IRQ)はハードウェアレベルで送信されるサービス要求です。割り込みは、専用のハードウェア回線、またはハードウェアバスを介して情報パケット(Message Signaled Interrupt、またはMSI)として送信できます。 割り込みを有効にすると、IRQを受信すると、割り込みコンテキストに切り替えるように求められます。カーネル割り込みディスパッチコードは、IRQ番号と登録された割り込みサービスルーチン(ISR)の関連リストを取得し、各ISRを順番に呼び出します。 ISRは割り込みを肯定応答し、同じIRQからの冗長割り込みを無視し、遅延ハンドラをキューに入れて割り込み処理を終了し、ISRが将来の割り込みを無視するのを止めます。

IRQには、関連する「親和性」プロパティsmp_affinityがあります。この属性は、そのIRQに対してISRを実行することが許可されているCPUコアを定義します。このプロパティを使用して、アプリケーションのパフォーマンスを向上させるには、割り込みアフィニティとアプリケーションのスレッドアフィニティを1つまたは複数の特定のCPUコアに割り当てます。これにより、指定された割り込みとアプリケーションスレッド間のキャッシュライン共有が可能になります。

# cat /proc/irq/32/smp_affinity 
    f 

smp_affinityのデフォルト値は、IRQは、システム内のCPUのいずれにもサービスを受けることができることを意味し、Fです。以下のように、この値を1に設定すると、CPUのみ0がこの割り込みにサービスを提供できることを意味します。IRQのsmp_affinityを変更する割り込みステアリングをサポートするシステム、オン

# echo 1 >/proc/irq/32/smp_affinity 
# cat /proc/irq/32/smp_affinity 
    1 

は、ハードウェアを設定し、決定することにより、特定のCPUとの割り込みはハードウェアレベルで行われ、カーネルからの介入はありません。

RedHatのDOCに存在するより詳細な情報 - 4.3 Interrupts and IRQ tuning