syncコマンドはメモリ内のダーティキャッシュを削除しますか?

syncコマンドはメモリ内のダーティキャッシュを削除しますか?

私はsyncコマンドがダーティキャッシュをディスクにフラッシュすることを知っています。freeコマンドを実行してから、コマンドを実行してやり直してsyncくださいfree。後者のコマンドの結果は、free前のコマンドよりも使用可能なメモリが多いことを示しています。

これは、実行時にダーティキャッシュがメモリから削除されることを意味しますかsync?誰が私にもっと決定的な証拠を与えることができますか?

答え1

いいえ、ありません。何度も自分で確認しましたが、気にしないでください。 Linuxカーネルは、貴重なメモリを管理するのに非常にスマートです。読むディスクに書き込むときにRAMにキャッシュされたコンテンツ - Linux そしてhttp://linuxatemyram.com

答え2

これにより、カーネルはメモリからクリーンなキャッシュ、ディレクトリエントリ、および inode を削除して、そのメモリを空にすることができます。

ページキャッシュを空にします。

echo 1 > /proc/sys/vm/drop_caches

dentry と inode を解放します。

echo 2 > /proc/sys/vm/drop_caches

ページキャッシュ、ディレクトリエントリ、およびinodeを解放します。

echo 3 > /proc/sys/vm/drop_caches

これは非破壊的な操作であり、ダーティオブジェクトは解放できないため、ユーザーはまず「同期」を実行して、キャッシュされたすべてのオブジェクトが解放されたことを確認する必要があります。

答え3

そうではありません:-)。以下は喫煙銃です。

$ dd if=/dev/zero of=test bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.409106 s, 256 MB/s
$ sync
$ time cat test > /dev/null

real    0m0.027s
user    0m0.000s
sys 0m0.026s

データは引き続きキャッシュされ続けますsync。ファイルを読み取るのにかかる時間を見ると、ファイルがキャッシュされていることがわかります。 (最大読み取り速度が約100 MB / sの回転ハードドライブがあります。)これをとの組み合わせとsync比較してくださいdrop_caches

$ sync
$ echo 1 | sudo tee /proc/sys/vm/drop_caches
1
$ time cat test > /dev/null

real    0m1.030s
user    0m0.001s
sys 0m0.073s

関連情報