2017-01-15 7 views
0

大きな(1〜2 GB)ファイルマップメモリ​​に頻繁にアクセスするとパフォーマンスが低下する可能性がありますか?ファイルマッピングメモリに頻繁にアクセスする

私がGoogleにできる限り、メモリマップされたファイルはOSによって(ページフォールトを使用して)キャッシュされ、ロードされてから頻繁にアクセスするのが安全だと思われますメモリ上にある。

しかし、私はまた、パフォーマンスの低下を引き起こす可能性がある、それはだからをロードされていない、をキャッシュされたことを考え出しました。

私は正解を得るのを助けてください、そして、親切な記述は評価されるでしょう。可能であれば、LinuxとWindowsの両方の回答を知りたいですが、と異なると思われます。

注:私が「アクセス」と言ったとき、私は読み書きの両方をします。

+0

どのくらいのメモリですか? 1 MB? 1 GB? –

+0

@John Zwinck私が逃したものを指摘してくれてありがとう。私は質問を編集しました。 – minary

答えて

1

1〜2 GBのメモリマップファイルを繰り返しアクセスすることを尋ねます。短い答えは、あなたのページが小さい場合は、パフォーマンスの欠点があります。

最初の問題は、1GBのメモリに繰り返しアクセスすると(デフォルトでは)他のどのデータであっても退去する傾向があり、CPUデータキャッシュのヒット率が低下することです。典型的なCPUデータキャッシュサイズはほんの数メガバイトであると考えてください。

第2の問題は、変換ルックアサイドバッファです。デフォルトのページサイズである4KBを使用している場合、1GBは250kページです。 Linuxでは、このような大きなメモリ領域にアクセスすることによって課されるTLBの負荷を軽減するために、「巨大なページ」を有効にする必要があります。

3番目の問題は、テストしていないようだということです。この種のテストにはテストが非常に重要です。それがなければ、本当の問題か仮説しかないかどうかは決して分かりません。

-1

これは主にシステム固有です。 1つの考慮点は、OSがメモリをディスクに直接マップできるかどうか、または何らかの中間変換が必要かどうかです。いくつかのOS /ファイルシステムの組み合わせにより、マップファイルはページファイルと同じように扱うことができます(特に、ディスク上で連続している場合は、大容量のファイルを高速に読み取ることができます)。他はしません。

私は彼らが違うとは思わないでしょう。

実際にはかなり異なっています。 Windowsは、連続ファイルをサポートするハードファイルシステムを使用します。古典的なUnixは連続ファイルの概念を持っていません

関連する問題