7

プロセスを可能な限りリアルタイムで実行する必要があります。

すべての通信は、共有メモリ(メモリマップトファイル)を介して行われます。システムコールはまったくありません。共有メモリでのビジー待機を使用します。

プロセスはリアルタイムの優先順位で実行され、すべてのメモリがロックされmlockall(MCL_CURRENT|MCL_FUTURE)て成功し、プロセスはすべてのメモリをロックするのに十分ulimits です。

それを実行してperf stat -p PIDも、マイナーなページフォールトのカウントが表示されます。

私はこれをプロセスアフィニティありとなしの両方でテストしました。

質問:

マイナーなページフォールトでさえ、それらを完全に排除することは可能ですか?

4

2 に答える 2

6

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

于 2012-12-03T15:21:02.337 に答える
0

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

于 2012-12-03T10:07:51.013 に答える