1

を使用してファイルをメモリにマップしましたmmap。ここで、このメモリにアクセスするときにページ フォールトが発生しないようにしたいと考えています。つまり、システムが実際にハードディスクからデータを読み取って RAM に保存するように強制したいと考えています。データがあれば、とのスワップを防ぐことができると思いますmlockall。しかし、システムにデータをロードさせる適切な方法は何でしょうか?

もちろん、すべてのページのダミー読み取りを行うこともできますが、これは醜いハックのようです。また、コンパイラが賢すぎてダミーの読み取りを最適化することを心配したくありません。

助言がありますか?

4

2 に答える 2

5

なぜうまくいかないと思いますmlock()か?mlockall()影響を受けるページが RAM にあることを保証することが、まさにその目的です。マンページからの引用:

指定されたアドレス範囲の一部を含むすべてのページは、呼び出しが正常に返されたときに RAM に存在することが保証されます。ページは後でロックが解除されるまで RAM に保持されることが保証されます。

madvise()ページをRAMにロードするように要求するなどの他の方法を使用できます、カーネルがそれに準拠することは保証されておらず、カーネルがそれらを持ち込んだとしてもそれらがRAMに留まることが保証されていmmap(MAP_POPULATE)ません。ページが RAM にとどまる保証はありません。

于 2012-05-03T15:56:01.050 に答える
4

を探していMAP_POPULATEます。

于 2012-05-03T15:52:40.127 に答える