tmpfs(/dev/shm)はLinuxページキャッシュを使用しますか?もしそうなら、それで何ですか?

tmpfs(/dev/shm)はLinuxページキャッシュを使用しますか?もしそうなら、それで何ですか?

AFAIK、Linuxにはパフォーマンスを向上させるためのページキャッシュがあります(たとえば、ファイルを開くと、LinuxはファイルをRAMにキャッシュします)。したがって、ファイルが再要求され、ファイルがキャッシュされると、OSはディスクファイルからそのファイルを読み取ることはありません。そしてキャッシュから...

私の質問は:ファイルがある場合一時ファイルシステムファイルとやり取り(読み取り)するとRAMで冗長になりますか(1つはtmpfsに1つはページキャッシュにありますか?)

ベストアンサー1

tmpfsはLinuxページキャッシュを使用しますか?

tmpfsとページキャッシュはコインの両面です。

で述べたようにhttps://www.kernel.org/doc/Documentation/filesystems/tmpfs.txt(強調は私のもの)

tmpfs はすべてをカーネル内部キャッシュに入れます。不要なページを交換スペースに置き換えることで、埋め込みファイルを収容できるように拡張および縮小されます。

[...]

~からtmpfs はページキャッシュに完全に存在します。スワップ時に、すべてのtmpfsページは/ proc / meminfoに「Shmem」と表示され、free(1)に「Shared」と表示されます。

したがって、このキャッシュのコピーは非常に予期しないことです。すでにキャッシュにあり、tmpfsはキャッシュシステムのフロントエンドにすぎません。

私の質問は:tmpfsにファイルがあり、そのファイルと対話(読み取り)すると、ファイルがRAMに複製されますか(1つはtmpfsにあり、もう1つはページキャッシュにありますか?)

これは実験的に決定することができる。

# sync
# echo 3 > /proc/sys/vm/drop_caches
# free -m
              total        used        free      shared  buff/cache   available
Mem:          15940        2005       13331         264         603       13390
Swap:             0           0           0

だから私は約13000個の空きメモリを持っていて、メモリをたくさん変更する実行中のプロセスもなく、スワップもありません。 tmpfsで〜6000を燃やしましょう:

# mount -t tmpfs -o size=6000M none /mnt/tmp
# dd if=/dev/urandom of=/mnt/tmp/big.file
dd: writing to '/mnt/tmp/big.file': No space left on device
6291456000 bytes (6.3 GB, 5.9 GiB) copied

したがって、tmpfsは任意のデータで埋められます。今は何が無料ですか?

# free -m
              total        used        free      shared  buff/cache   available
Mem:          15940        1958        7347        6269        6633        7429
Swap:             0           0           0

だからfree13331から7347まで、sharedどちらもbuff/cache6000ずつ上がった。面白いけど、まだ1とだけ計算されるんですね。だから共有と呼ぶと思います -.-'

意図的にファイルを読んでください。

# cat /mnt/tmp/big.file > /dev/null
# free -m
              total        used        free      shared  buff/cache   available
Mem:          15940        2055        7237        6269        6647        7332
Swap:             0           0           0

個数は増加しませんでした(とにかく6000個ほどではありません)。

意図的に他の内容をお読みください。

# cat /some/other/file > /dev/null
# free -m
              total        used        free      shared  buff/cache   available
Mem:          15940        2011         157        6303       13771        7334
Swap:             0           0           0

...今free157まで降りると、キャッシュはほぼいっぱいです。

要約すると、tmpfs自体はすでにページキャッシュを表します。ページキャッシュは、ファイルを読み込むときにtmpfsのファイルをコピーしません。

おすすめ記事