6

mmap() を使用して cp(ファイル コピー) コマンドを実装しています。そのために、ソースファイルをMAP_PRIVATE(読みたいだけ)モードでマップし、宛先ファイルをMAP_SHAREDモードでマップしました(宛先ファイルの変更されたコンテンツを書き戻す必要があるため)。

これを行っている間、2 つの理由で発生する多くのマイナー ページ フォールトによるパフォーマンスの低下を観察しました。1) ソース ファイルの mmap(MAP_PRIVATE) を呼び出している間、オンデマンドでゼロ フィルが行われます。2) 宛先ファイルの mmap(MAP_SHARED) を呼び出しながら書き込み時にコピーします。

Zero-fill-on-demand と Copy-on-write を無効にする方法はありますか?

ありがとう、ハリッシュ

4

1 に答える 1

5

mmap(2) の MMAP_POPULATE フラグがあります。

http://linux.die.net/man/2/mmap

MAP_POPULATE (Linux 2.5.46 以降) マッピング用のページ テーブルを (事前に) 作成します。ファイル マッピングの場合、これによりファイルの先読みが発生します。マッピングへのその後のアクセスは、ページ フォールトによってブロックされません。Linux 2.6.23 以降、MAP_POPULATE はプライベート マッピングでのみサポートされています。

mmapped 領域内のすべてのページを事前にフォールトする必要があります。質問(1)では機能するはずですが、質問(2)(共有)では機能しない場合があります。

于 2012-06-21T14:08:55.593 に答える