/proc/sys/vm/drop_cachesに同期して書き込むと、実際にすべてのディスクキャッシュ/バッファが消去されますか?

/proc/sys/vm/drop_cachesに同期して書き込むと、実際にすべてのディスクキャッシュ/バッファが消去されますか?

ディスクキャッシュ/バッファをクリアするには、通常、次のコマンドを実行します。

# sync && echo 3 > /proc/sys/vm/drop_caches

ただし、コマンドを入力した後は、free実際に列に何も報告されませ0buff/cache。例は次のとおりです。

# free -m
              total        used        free      shared  buff/cache   available
Mem:          7.6Gi       2.9Gi       3.6Gi       238Mi       1.1Gi       4.1Gi
Swap:         9.8Gi       1.0Mi       9.8Gi
Total:         17Gi       2.9Gi        13Gi
                                                                                                                 
# sync && echo 3 > /proc/sys/vm/drop_caches

# free -m
              total        used        free      shared  buff/cache   available
Mem:          7.6Gi       2.8Gi       4.2Gi       224Mi       588Mi       4.2Gi
Swap:         9.8Gi       1.0Mi       9.8Gi
Total:         17Gi       2.8Gi        13Gi

したがって、キャッシュにあっ1.1G588M

これを588M減らすことができますか0? (おそらく)そうでない場合、その理由は何ですか?そして、syncファイルをエクスポートして書き込んだ後にキャッシュ/バッファがどれだけ残っているかを事前に知る方法はありますか/proc/sys/vm/drop_caches

答え1

いいえ、キャッシュには(通常は開いている)ファイルのバッファだけでなく返品実行中のアプリケーションとライブラリのディスクイメージ。

そして、同期を実行して/proc/sys/vm/drop_cachesファイルに書き込んだ後、事前にキャッシュ/バッファの量を知る方法はありますか?

私にとって、これは非常にマイナーな作業のようですが、解決策があるかもしれません。開いているアプリケーション/ライブラリファイルのサイズを計算すると、正しい方向が得られますが、そうではありません。たとえば、Google Chromeを実行している場合、バイナリサイズは160 MBですが、完全にキャッシュされません。すべての機能が同時に実行されるわけではありません。

必要な答えに近づく必要があるメモリ範囲を計算し/proc/$PID/maps、実行中のアプリケーション間で共有される範囲も確認できます。

関連情報