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
だからfree
13331から7347まで、shared
どちらもbuff/cache
6000ずつ上がった。面白いけど、まだ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
...今free
157まで降りると、キャッシュはほぼいっぱいです。
要約すると、tmpfs自体はすでにページキャッシュを表します。ページキャッシュは、ファイルを読み込むときにtmpfsのファイルをコピーしません。