大規模サービス技術入門のつづきです。
主にOSのキャッシュメモリについてです。
- メモリとディスクの速度差は10万倍~100万倍
- いかにディスクへのアクセスを減らすかがポイント
- OSは各プロセスにメモリの番地(物理アドレス)を直接は渡さず、代わりに論理アドレスを渡す(プロセスがメモリの管理をする必要をなくすため)
- ディスクから読みだされたデータはメモリ上に置かれ、一旦おかれるとしばらくは解放されない(ページキャッシュ)
- Linuxではデータを常にキャッシュをしようとするので、sar -r でみるとあまり使っていないサーバーでも%memusedに50%ぐらいは割り当たっている
- メモリを増やす→キャッシュに大量のデータを取り込める→その分IO負荷が減る(数値的にはiowaitの割合がへる)
- データ規模 < 物理メモリならすべてのデータをメモリ上にキャッシュできる
- メモリにデータが乗り切らないときにはじめて、複数のサーバーによる負荷分散を考える(DBの場合、単純にこうはいかない)
- 単純に台数を増やしてもキャッシュは増えない(キャッシュできない部分までコピーしてしまうことになるため)
- キャッシュの容量を増やすには局所化(アクセスのパターンごとに担当するサーバーを分ける)などの工夫が必要