Linuxサーバでディスクキャッシュを説明する
なぜメモリ使用量などを意識する必要があるのかについて説明するとした場合の簡単な案です。ディスクへのアクセスという観点でメモリがどのように利用されているかを考えて見る内容で説明してみます。Software Design 2018年1月号|技術評論社を参考にさせていただきました。
最近は自分で手を動かしながら、実際の挙動を見ることができるような書籍・記事が増えてきたので、実際にやってみることができて嬉しいです。
はじめに
一般的なOSでは、物理的なディスクにアクセスする際、以下のようなフローでアクセスする:
- メモリ上にファイルが読み込まれている場合、メモリからファイルを読み込む
- メモリ上に存在しない場合、直接ディスクにアクセスする
当然ながら、ディスクへのアクセス速度 <<<<< メモリへのアクセス速度
のため、基本的な戦略としては「メモリにファイルを読み込ませる」こととなる。
ここではディスクキャッシュの有り無しでどのようにディスクへのアクセス速度が変化するかを見てみます。
メモリについて
まずはLinux上でのメモリ管理について簡単におさらいします。
ディスクキャッシュに関する情報を参照する
free
コマンドを実行することで、メモリ上にキャッシュされているファイルサイズを確認できます。free
コマンドを実行した際の、buff/cache
列を参照します:
|
|
メモリに格納されているディスクキャッシュを削除する
/proc/sys/vim/drop_caches
に3
を書き込むことで、メモリ上に格納されているキャッシュをドロップできます:
|
|
ファイルへのアクセス速度を計測する
すでに説明してきたように、OSがファイルにアクセスする際は、メモリ上のキャッシュ経由のアクセスと、直接ディスクにアクセスする場合の2つのパターンがあります。
いずれの場合もhdparam
コマンドを利用することで計測できます。
メモリ上のキャッシュ経由のアクセス速度を計測する
hdparam
コマンドに-T
オプションを指定することで、メモリ上のキャッシュを経由した場合のアクセス速度を計測できます。実行例は以下になります:
|
|
直接ディスクにアクセスする場合のアクセス速度を計測する
hdparam
コマンドに-t
オプションを指定することで、直接ディスクにアクセスする場合のアクセス速度を計測できます。実行例は以下になります:
|
|
実際に計測してみる
まずはキャッシュをドロップします:
|
|
直接ディスクにアクセスした場合
直接ディスクにアクセスした場合はこのような結果でした:
|
|
ディスクキャッシュ経由でアクセスした場合
ディスクキャッシュ経由でアクセスした場合は、このような結果でした:
|
|
まとめ
ディスクキャッシュを経由したほうが、すごく早いです!少なくとも読み込みは!