一般に、ハードウェア割り込みは、少なくともそれを認識して処理の第1レベルを行うために、直ちに処理する必要があります。私が理解するように、これはスケジュールされた活動ではありません。私を修正してください。muticoreシステムでどのプロセッサがハードウェア割り込みを実行するか
実際にこのハードウェア割り込みハンドラを実行するプロセッサを選択する方法は問題ですか?
一つは、Linuxおよび/またはそれが真のオペレーティングシステムの実装に依存BSDシステム
一般に、ハードウェア割り込みは、少なくともそれを認識して処理の第1レベルを行うために、直ちに処理する必要があります。私が理解するように、これはスケジュールされた活動ではありません。私を修正してください。muticoreシステムでどのプロセッサがハードウェア割り込みを実行するか
実際にこのハードウェア割り込みハンドラを実行するプロセッサを選択する方法は問題ですか?
一つは、Linuxおよび/またはそれが真のオペレーティングシステムの実装に依存BSDシステム
のためにこれを答えることができます。
一部のプロセッサではすべての割り込みが割り当てられますが、一部のプロセッサでは割り込み処理が分散されるプロセッサもあります。
NUMAシステムでは、オペレーティングシステムは、は、近くのプロセッサに割り込み処理を割り当てようとする必要があります。
使用するオペレーティングシステム(およびバージョン)のソースを読んで、その内容を把握する必要があります。
あなたの答え+1ありがとう。あなたの答えが実際にスケジュールされた活動である下半分の処理ではなく、ハードウェア割り込みに関するものであることを確認したい。 –
私は割り込みハンドラの "下半分"とハードウェア割り込みを区別していませんでした。 しかし、一部のハードウェアシステムでは、ハードウェア割り込みをプロセッサのサブセット、または単一のプロセッサに配線することがあり、オペレーティングシステムがさらに面白くなります。 (IBM-PC/ATシステムアーキテクチャーのX86よりも世界があることを覚えておいてください) –
部分的にはOSの実装に依存しますが、PIC、PIRなどのハードウェア実装によりますます異なります。 – 0andriy
一般に、これはマルチコアプロセッサとOSが提供する機能に依存します。マルチコアプロセッサを使用している間は、必要に応じて割り込みの親和性を設定する必要があります。
linux
の場合、/proc
ファイルシステムには、割り込みのアフィニティを表示/設定する手段があります。
/PROC/IRQ/
:'irq_number'
/smp_affinity1)各IRQのファイル
smp_affinity
は、マルチコアシステムの各コアによってサービスされるIRQを構成するために使用することができるビットマスクを保持します
echo 2 > /proc/irq/12/smp_affinity -> Configures the affinity of IRQ 12 to CPU 1
echo 4 > /proc/irq/14/smp_affinity -> Configures the affinity of IRQ 14 to CPU 2
2)smp_affinity_list
がコアを構成するビットマスクの方法を回避することによって、特定のIRQのためのCPUの範囲を設定するのに役立つファイル:
は/ proc/IRQ/
'irq_number'
/smp_affinity_list
cat /proc/irq/12/smp_affinity_list -> Configures the affinity of IRQ 12 to CPU cores 0 to 3
3)また、Linuxは、パフォーマンスを最適化するために、プロセッサコア間で割り込みの分布に助けることができるirqbalance
と呼ばれる割り込み負荷分散デーモンを提供しています。このデーモンは、特定のシステムではデフォルトで有効になっている可能性があります。したがって、手動でリセットする必要がある場合は無効にしてください。
AFAIK mainline LinuxはSMP、シンメトリックマルチプロセッサハードウェアのみをサポートします。これは、どのプロセッサも割り込みを処理できることを意味します。私はUNIXが非対称ハードウェアに移植されているのを見てきました。つまり、I/Oと割り込み専用のプロセッサがあります。 BTWはプロセッサが割り込みを実行しない*。割り込みをサービス*することができます。つまり、割り込みサービスルーチンISRを実行することができます。 – sawdust
待ち、UPもサポートされています。 – 0andriy