Linuxページキャッシュを無効にする方法

Linuxページキャッシュを無効にする方法

Linuxカーネルは、I / Oの操作を高速化するためにページキャッシュを実装します。

研究とテストのためにページキャッシュをオフまたはオンにすることができれば役立ちます。

Linuxページキャッシュを無効にする方法は?

アップデート1:ページキャッシュをグローバルにオフにできない場合は、Linuxファイルシステムを連続書き込みモードでマウントできます。私が正しく理解した場合、EXT2、EXT4、およびXFSのマウントオプションはdaxwrite-throughモードを実装します。ページキャッシュを防ぐための有効なオプションですか(少なくともファイルシステムの場合)。

https://www.kernel.org/doc/Documentation/filesystems/dax.txt

アップデート2:明らかにDAXはやや死んでおり、ページキャッシュを適切にオフにすることはできません(グローバルには、まったくオフにせず、個々のアプリケーションに対して限られた方法でのみ)。しかし、実際にLinuxファイルシステム(たとえば、mountパラメータを介して)を連続書き込みモードに設定する方法はありませんか?

アップデート3:このツールは、ddLinuxカーネルページキャッシュを簡単にバイパスできるアプリケーションの一例です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)に対して連続書き込みモードとページキャッシュバイパスが可能です。

https://linux.die.net/man/8/mount

ベストアンサー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

おすすめ記事