0

mmap ファイルを使用して、64 MB ブロックの配列として編成された巨大なバッファーを保持するプログラムを作成しています。

ブロックは、ネットワークを介してさまざまなホストから受信したデータを集約するために使用されます。結果として、各ブロックに書き込まれる合計データ サイズは事前にわかりません。ほとんどの場合は 2MB ですが、場合によっては 20MB 以上になることもあります。

データはバッファ内に長く留まりません。1 秒以内に 90% が削除され、残りは別のホストに送信されます。

データが削除されたときに RAM ページがもうダーティではないことを仮想メモリ マネージャーに伝える方法があるかどうかを知りたいです。

仮想メモリを制御するためにブロックを使用および解放する場合、mmap と munmap を使用する必要がありますか? これを行うオーバーヘッドはどうなりますか? また、一部の同僚は、このような大きな mmap スペースを割り当てることによるパフォーマンスへの影響について懸念を表明しました。ダーティ ページのみが考慮されるように、スワップ ファイルのように動作することを期待しています。

4

1 に答える 1

0

mmap / munmap でうまくいくはずです。ページ テーブルを変更すると、無視できないオーバーヘッドが発生し、TLB キャッシュ フラッシュが発生する可能性があるため、これらの変更を集約し、あまり頻繁に変更しないようにすることをお勧めします。

大きなメモリ スペースを割り当てると、ページ テーブル エントリが消費されます。ページに触れていない限り、実際には割り当てられていません。

于 2012-10-29T14:55:50.537 に答える