2012-12-02 45 views
6

できるだけリアルタイムで処理を実行する必要があります。Linuxでマイナーページフォールトをリアルタイムで処理するのを防ぐ

すべての通信は、共有メモリ - メモリマップファイル - システムコールなしで実行されます - 共有メモリでビジー状態の待機を使用します。

このプロセスはリアルタイム優先度で実行され、すべてのメモリはmlockall(MCL_CURRENT|MCL_FUTURE)でロックされ、処理は成功し、すべてのメモリがロックされます。ulimits

私はそれを実行するときperf stat -p PID私はまだマイナーページフォールトのカウントを取得します。

私はこれを、プロセス親和性と非依存性の両方で試験しました。

質問:

それがすべてでそれらを排除することが可能です - でもマイナーなページフォールトを?

答えて

0

私が問題を正しく理解している場合、マイナーページフォルトを完全に回避することはできません。 Linuxを含むほとんどの最新のOSでは、OSがプログラムの起動時にすべてのテキストとデータセグメントをメモリにロードしません。それは内部データ構造を割り当て、テキストとデータが必要なときにページが本質的にフォールトを起こします。これにより、ページフォールト物理メモリがプロセスに使用可能になり、バッキングストアからページをスワップします。したがって、可能性のないバッキングストアにアクセスすることなく、マイナーページフォールトを回避することができます。

+0

私は、TLBミスによって引き起こされるマイナーページフォールトについて語っています。 – Artyom

+0

TLBミスは、ほとんどの最新のCPUでハードウェア処理されています。 OSには見えないはずです。いくつかのメモリアクセスを遅くし、ハードウェアパフォーマンス監視カウンタ(IntelのDTLB_LOAD_MISSES.ANY)をインクリメントするだけです。 – osgx

+0

マイナーページフォールトを減らすにはどうすればよいですか?私はたくさんの記憶を持っていますが、CPU使用量をあまりにも多くの他のジョブを運ぶようにするマイナーページフォールトの問題がまだ残っています –

5

メモリマップファイルからPOSIX共有メモリshm_open +メモリロックに切り替えることでこの問題を解決しました。

関連する問題