0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ページキャッシュ

Last updated at Posted at 2024-05-28

キャッシュメモリがメモリのデータをキャッシュするのに対して、ページキャッシュは、ファイルのデータをメモリにキャッシュします。
...
ページキャッシュにおいてはページ単位でデータを扱います。それ以外にもダーティなページを表す「ダーティページ」、ダーティページのディスクへの書き込みを表す「ライトバック」という概念があります。
...
カーネルのメモリ上にあるページキャッシュという領域にコピーしてから、そのデータをプロセスのメモリにコピーします。

ライトバック

ダーティページ上のデータは、後述する所定のタイミングでストレージデバイスに反映します。これをライトバック処理と言います。この時ダーティページであるという印も消します。
...
マシンの電源が急に落ちてしまった場合は、どうなるのでしょうか?
この場合、ページキャッシュ上のデータはなくなります。このようなことを許容できない場合は、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

気づき

ニ回目より一回目の方が早くなっている。(順番間違えました)
キャッシュから読み込んだのか。

出典

感想

ページキャッシュとキャッシュメモリの違いがわからなくなってきた。
ページキャッシュはファイルを扱って、キャッシュメモリは値を扱うのかな。
とりあえず進む

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?