web-dev-qa-db-ja.com

posix_fadvice / POSIX_FADV_DONTNEEDはLinuxで機能しますか?

大きなファイルを1回だけスキャンする場合、ページキャッシュへの影響を心配する必要がありますか、それともOSがスキャンによってページキャッシュに無意味なチャーンが発生しないように注意しますか。ページキャッシュの恩恵を受ける可能性のある他のプロセスに影響を与えないようにしたい。

POSIX_FADV_DONTNEEDの使用を検討しましたが、Linuxでposix_fadvicePOSIX_FADV_DONTNEEDが何かを実行するかどうかについて矛盾するアドバイスがあります。

誰かが明確にすることができます、ありがとう。

5
John Lonergan

Linuxでは_POSIX_FADV_DONTNEED_が考慮されます。カーネルソースの _mm/fadvise.c_ を参照してください。 _POSIX_FADV_DONTNEED_を指定してposix_fadvise()を呼び出すたびに、対応するページキャッシュがすべて排出されます。

jthill で述べたように、ページキャッシュへのI/Oの影響を最小限に抑えるためのより良いアプローチは、_O_DIRECT_でファイルを開くことです。

1
Stephen Kitt