『Web開発者のための大規模サービス技術入門』五日目
OSのキャッシュと分散
VFS
ディスクを操作するデバイスドライバと
OSの間にはファイルシステムが挟まっている
(Linuxだとext3,ext2,ext4,xfsなど)
そのファイルシステムの上にはVFS(仮想ファイルシステム)がいる
概要
インターフェイスの統一をすること
このVFSがページキャッシュの仕組みをもっている
どんなファイルシステム、ディスクシステムを使っても
同じ仕組みでキャッシュされる
VFSの役割は・・・
・ファイルシステム実装の抽象化
・ページキャッシュ
Linuxはページ単位でディスクをキャッシュ
例えば・・・
2GBのメモリで500MBをOSがプロセスに割り当て
4GBのファイルをキャッシュできる?
答え・・・
出来る。OSはブロック単位でファイルの一部分をキャッシュする
ここではページ単位の4KBだけキャッシュする
ページ=仮想メモリの最小単位
LRU
メモリの余裕が1.5GBあって4GB全部読んだらどうなる?
仕組みとしてLRU、一番古いものを廃棄
一番新しいものを残すという形になっている
よって、DBをずっと動かしていればキャッシュが最適化され
起動直後より後の方が負荷、ファイルI/Oが下がっていく
(補足)どのようにキャッシュされるのか
Linuxはファイルをiノード番号という番号で識別
そのファイルのiノード番号とそのファイルがどこから始まるか
のオフセットの2つの値をキャッシュ
この仕組みでファイルの一部分がキャッシュできる
ファイルが大きくても小さくても同じ速度でキャッシュできる
(RadixTreeという工夫されたデータ構造のおかげ)