Linuxカーネルは、I / Oの操作を高速化するためにページキャッシュを実装します。
研究とテストのためにページキャッシュをオフまたはオンにすることができれば役立ちます。
Linuxページキャッシュを無効にする方法は?
アップデート1:ページキャッシュをグローバルにオフにできない場合は、Linuxファイルシステムを連続書き込みモードでマウントできます。私が正しく理解した場合、EXT2、EXT4、およびXFSのマウントオプションはdax
write-throughモードを実装します。ページキャッシュを防ぐための有効なオプションですか(少なくともファイルシステムの場合)。
https://www.kernel.org/doc/Documentation/filesystems/dax.txt
アップデート2:明らかにDAXはやや死んでおり、ページキャッシュを適切にオフにすることはできません(グローバルには、まったくオフにせず、個々のアプリケーションに対して限られた方法でのみ)。しかし、実際にLinuxファイルシステム(たとえば、mountパラメータを介して)を連続書き込みモードに設定する方法はありませんか?
アップデート3:このツールは、dd
Linuxカーネルページキャッシュを簡単にバイパスできるアプリケーションの一例ですoflag=direct
。
https://man7.org/linux/man-pages/man1/dd.1.html
アップデート4:明らかに、FUSE(ユーザー空間のファイルシステム)モジュールを使用するファイルシステムは、ページキャッシュへの読み取りと書き込みが完全にバイパスされる直接IOモードで使用できます。
https://www.kernel.org/doc/Documentation/filesystems/fuse-io.txt
アップデート5:マウントオプションを-o sync
使用すると、一部のファイルシステム(ext2、ext3、FAT、VFAT、UFS)に対して連続書き込みモードとページキャッシュバイパスが可能です。
ベストアンサー1
一時的にページキャッシュを無効にすることもできません。
しかし、特定のアプリケーションは、実際には、次の方法でキャッシュをバイパスするために最善を尽くす可能性があります。開いている_ingファイルにはO_DIRECTフラグが設定されています。
O_DIRECT (since Linux 2.4.10) Try to minimize cache effects of the I/O to and from this file… File I/O is done directly to/from user-space buffers. The O_DIRECT flag on its own makes an effort to transfer data synchronously, but does not give the guarantees of the O_SYNC flag that data and necessary metadata are transferred. To guarantee synchronous I/O, O_SYNC must be used in addition to O_DIRECT.
これは、onが対応する変更されたソースコードを再構成できることを意味しますが、キャッシュなし、これはオープンとクローズのシステムコールを傍受し、変更されていないバイナリを実行するために使用できます。
もちろん、プロセスを遅くするいくつかの制限があります...テストしたことはありません。
一つのコースは永遠にできるキャッシュを空にする次のコマンドを使用します。
# echo 1 > /proc/sys/vm/drop_caches