6.5 KiB
+++
categories = ["Linux", "Labs", "Infra"] tags = ["ubuntu", "cache"] author = "kazu634" date = "2018-08-26T23:06:30+08:00" title = "Linuxサーバでディスクキャッシュを説明する" description = "" +++
なぜメモリ使用量などを意識する必要があるのかについて説明するとした場合の簡単な案です。ディスクへのアクセスという観点でメモリがどのように利用されているかを考えて見る内容で説明してみます。Software Design 2018年1月号|技術評論社を参考にさせていただきました。
最近は自分で手を動かしながら、実際の挙動を見ることができるような書籍・記事が増えてきたので、実際にやってみることができて嬉しいです。
はじめに
一般的なOSでは、物理的なディスクにアクセスする際、以下のようなフローでアクセスする:
- メモリ上にファイルが読み込まれている場合、メモリからファイルを読み込む
- メモリ上に存在しない場合、直接ディスクにアクセスする
当然ながら、ディスクへのアクセス速度 <<<<< メモリへのアクセス速度
のため、基本的な戦略としては「メモリにファイルを読み込ませる」こととなる。
ここではディスクキャッシュの有り無しでどのようにディスクへのアクセス速度が変化するかを見てみます。
メモリについて
まずはLinux上でのメモリ管理について簡単におさらいします。
ディスクキャッシュに関する情報を参照する
free
コマンドを実行することで、メモリ上にキャッシュされているファイルサイズを確認できます。free
コマンドを実行した際の、buff/cache
列を参照します:
kazu634@bastion% free -m
total used free shared buff/cache availableMem:
488 130 27 5 330 324
Swap: 1023 58 965
メモリに格納されているディスクキャッシュを削除する
/proc/sys/vim/drop_caches
に3
を書き込むことで、メモリ上に格納されているキャッシュをドロップできます:
kazu634@bastion% echo 3 | sudo tee /proc/sys/vm/drop_caches
[sudo] kazu634 のパスワード:
3
kazu634@bastion% free -m
total used free shared buff/cache available
Mem: 488 131 275 5 81 322
Swap: 1023 58 965
kazu634@bastion%
ファイルへのアクセス速度を計測する
すでに説明してきたように、OSがファイルにアクセスする際は、メモリ上のキャッシュ経由のアクセスと、直接ディスクにアクセスする場合の2つのパターンがあります。
いずれの場合もhdparam
コマンドを利用することで計測できます。
メモリ上のキャッシュ経由のアクセス速度を計測する
hdparam
コマンドに-T
オプションを指定することで、メモリ上のキャッシュを経由した場合のアクセス速度を計測できます。実行例は以下になります:
kazu634@bastion% sudo hdparm -T /dev/sda1
/dev/sda1:
Timing cached reads: 11364 MB in 2.00 seconds = 5684.50 MB/sec
直接ディスクにアクセスする場合のアクセス速度を計測する
hdparam
コマンドに-t
オプションを指定することで、直接ディスクにアクセスする場合のアクセス速度を計測できます。実行例は以下になります:
kazu634@bastion% sudo hdparm -t /dev/sda1
/dev/sda1:
Timing buffered disk reads: 124 MB in 3.07 seconds = 40.43 MB/sec
実際に計測してみる
まずはキャッシュをドロップします:
kazu634@bastion% free -m
total used free shared buff/cache availableMem:
488 130 27 5 330 324
Swap: 1023 58 965
kazu634@bastion%
kazu634@bastion% echo 3 | sudo tee /proc/sys/vm/drop_caches
[sudo] kazu634 のパスワード:
3
kazu634@bastion% free -m
total used free shared buff/cache available
Mem: 488 131 275 5 81 322
Swap: 1023 58 965
kazu634@bastion%
直接ディスクにアクセスした場合
直接ディスクにアクセスした場合はこのような結果でした:
kazu634@bastion% sudo hdparm -t /dev/sda1
/dev/sda1:
Timing buffered disk reads: 124 MB in 3.07 seconds = 40.43 MB/sec
ディスクキャッシュ経由でアクセスした場合
ディスクキャッシュ経由でアクセスした場合は、このような結果でした:
kazu634@bastion% sudo hdparm -T /dev/sda1
/dev/sda1:
Timing cached reads: 11364 MB in 2.00 seconds = 5684.50 MB/sec
まとめ
ディスクキャッシュを経由したほうが、すごく早いです!少なくとも読み込みは!