GPIO入力によってトリガされる単純な割り込みがあります。 IRQは単に変数を増やして返します。割り込み周波数を約10〜20kHzに調整すると、システムが応答しなくなります。周波数を上げながらCPU負荷を測定しましたが、top
そのコマンドの指標に大きな変化はありませんでしたtop
。
だからプロセッサCPUがロードされましたが、利用できませんtop
!
top
どのように測定されますか?非常に頻繁な割り込みが表示されないのはなぜですか?
システム全体のパフォーマンスに対する割り込みの影響を測定するには?
編集する
CPU周波数ガバナを「パフォーマンス」に設定し、周波数を静的1GHzに設定することで、プロセッサがクラッシュする前に割り込み周波数を150kHzに上げることができました。
答え1
「top」はカーネル割り込みを考慮していますか?
カーネルによって異なります。有効にしないと、IRQ_TIME_ACCOUNTING
割り込み処理に要した時間が計算されないことがあります。
config IRQ_TIME_ACCOUNTING
bool "Fine granularity task level IRQ time accounting"
depends on HAVE_IRQ_TIME_ACCOUNTING && !VIRT_CPU_ACCOUNTING_NATIVE
help
Select this option to enable fine granularity task irq time
accounting. This is done by reading a timestamp on each
transitions between softirq and hardirq state, so there can be a
small performance impact.
カーネル構成ファイルから検索してみることができます。多くのシステムでは、カーネル構成は/boot/config-*
。
これについてはオリジナルパッチシリーズで詳しく説明します。正しいカーネル irq タイミング統計-v4。
詳細は CPU アーキテクチャによって異なります。たとえば、TSCを持たない古代x86 CPUでは、この機能は有効になりません。一部のLinuxアーキテクチャではこれをまったく実装していませんHAVE_IRQ_TIME_ACCOUNTING
。
一部のLinuxアーキテクチャは、代替機能 VIRTUAL_CPU_ACCOUNTING_NATIVE
の一部としてこの機能を提供します。現在、これらのアーキテクチャはS390、IA64、およびPowerPCです。私の考えでは、これらは何も使用していないようです(部分的には「GPIO」:-Pの使用に基づいています)。