Linuxカーネルを数百ミリ秒間強制的に「停止」(またはほぼ停止)する方法

Linuxカーネルを数百ミリ秒間強制的に「停止」(またはほぼ停止)する方法

私たちは非リアルタイムカーネル(CentOS 6)でリアルタイムプロセスを実行していますが、これは変更されない可能性があります。

一度に1.5時間、カスタムFPGAで約500 MB / sのPCIeトラフィックを必要とするストリーミングビデオアプリケーションがあります。このアプリはほとんどがうまく動作します。ただし、カーネルが一度に最大500ミリ秒間PCIeサービスまたはメモリ要求に応答しないように見える状況も発生しました。これは、他のスレッドでファイルIOが急増している間に発生するようです。メインアプリケーションの実行中に、ユーザースペースで多くの仮想ファイルIOを実行してこの問題を再現することは不可能であることがわかりました。

この問題を再現できるように、Linuxカーネルのグローバル「ストップ」(特にPCIeまたはすべてのDDR3メモリアクセスなどを停止)を強制(シミュレート)する方法はありますか?

これで内部FPGAメモリに最大10ミリ秒のバッファがありますが、これだけでは不十分です。 FPGA DDR3でバッファリングしてホストにダンプできますが、強制的にこの新機能をテストする方法が必要です。

私たちはカーネルが永久に停止したりロックしたりしたくありません。時間間隔を設定できるようにしたいです。

/proc/sys/vm私はシステムをほぼクロール状態にし、数百ミリ秒後に再び動作する魔法の値を一時的に書き込むようなものを探していますが、それを破ることができる可能な方法の数を見ることは実際に初心者のような初心者には適していません。私(https://www.kernel.org/doc/Documentation/sysctl/vm.txt)。たぶんnumactl魔法でしょうか?

ベストアンサー1

クイックテストの1つのオプションは、KGDBサポートカーネルを使用し、手動でカーネルを停止してテストすることです。このリンクを見た

一方、私はあなたをしばらく止めることができるものを覚えています。

  • cpufreq、cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_transition_latency値はns(私のAMD FX(tm)-8120オクタコアプロセッサでは4000)で、問題はありませんが、確認してください。
  • CPU自体または電圧レギュレータモジュールの熱調整。
  • 高NAPIおよび/またはネットワークトラフィック
  • PCIe ASPM( cat /sys/module/pcie_aspm/parameters/policy)
  • ターゲットデバイス(ハードディスク、ネットワークカード...)のバッファに競合があります。
  • PCIeバスの一部のデバイスファームウェアにバグがあります(使用しなくても)。次のコマンドを使用して電源を切ることができます。/sys/bus/pci/devices/$DEVICE/power/control

おすすめ記事