キャッシュメモリがメモリのデータをキャッシュするのに対して、ページキャッシュは、ファイルのデータをメモリにキャッシュ
します。
...
ページキャッシュにおいてはページ単位でデータを扱います
。それ以外にもダーティなページを表す「ダーティページ
」、ダーティページのディスクへの書き込みを表す「ライトバック」という概念があります。
...
カーネルのメモリ上にあるページキャッシュという領域にコピーしてから、そのデータをプロセスのメモリにコピーします。
ライトバック
ダーティページ上のデータは、後述する所定のタイミングでストレージデバイスに反映します。これをライトバック処理と言います。この時ダーティページであるという印も消します。
...
マシンの電源が急に落ちてしまった場合は、どうなるのでしょうか?
この場合、ページキャッシュ上のデータはなくなります
。このようなことを許容できない場合は、open()システムコールでファイルを開く際にO_SYNCフラグを設定します。こうするとファイルに対してwrite()システムコールを発行するときに、````ページキャッシュだけではなくストレージデバイスにも同期的にデータを書き込みます```。
気づき
ページキャッシュはキャッシュメモリと同様に扱うのがページというだけで処理されたらダーティページの印がつき
ライトバックなどで書き込まれる。
ライトバックには特定のタイミングのなので注意する
ページキャッシュを見てみる
ディスクと同時に書き込むかどうか
root@***********:***************# dd if=/dev/zero of=testfile oflag=sync bs=1G count=1
1+0 レコード入力
1+0 レコード出力
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 3.21185 s, 334 MB/s
root@***********:***************# dd if=/dev/zero of=testfile bs=1G count=1
1+0 レコード入力
1+0 レコード出力
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.41615 s, 758 MB/s
気づき
実験用ファイルを作成、oflag=sync
というオプションをつける、つけないの2パターンを行い、処理時間を見てみたら()早い
さっき作成したファイルがページキャッシュにある。
root@***********:***************# free
total used free shared buff/cache available
Mem: 3907956 931228 1139296 6268 1837432 2713740
Swap: 1190340 1036 1189304
気づき
メモリ使用状況を見てみるとページキャッシュなどを表すbuff/cache
が大きい
root@***********:***************# echo 3 >/proc/sys/vm/drop_caches
root@***********:***************# free
total used free shared buff/cache available
Mem: 3907956 985308 2454036 6268 468612 2684532
Swap: 1190340 1036 1189304
気づき
別のファイルに別の書き込みをするとbuff/cache
の領域が解放されて少なくなっている。
もう一回メモリから削除したファイルを読み出す
root@***********:***************# dd if=testfile of=/dev/null bs=1G count=1
1+0 レコード入力
1+0 レコード出力
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.363174 s, 3.0 GB/s
root@***********:***************# echo 3 >/proc/sys/vm/drop_caches
root@***********:***************# dd if=testfile of=/dev/null bs=1G count=1
1+0 レコード入力
1+0 レコード出力
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.713631 s, 1.5 GB/s
気づき
ニ回目より一回目の方が早くなっている。(順番間違えました)
キャッシュから読み込んだのか。
出典
感想
ページキャッシュとキャッシュメモリの違いがわからなくなってきた。
ページキャッシュはファイルを扱って、キャッシュメモリは値を扱うのかな。
とりあえず進む