makurosu8 blog

ゲーム開発全般/勉強会レポート/雑記

『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という工夫されたデータ構造のおかげ)