ディスク I/O の概念
理解のために小咄形式でまとめました。
システムパフォーマンス関連記事の目次
登場人物
- 太郎(後輩):入社1年目の若手エンジニア。
- 花子(先輩):システムエンジニア歴3年の先輩。
場面:オフィスの休憩室
太郎がコーヒーを片手に花子のデスクへ向かう
太郎:「花子先輩、ディスク I/O のパフォーマンスについて勉強してるんですが、いまいち理解できなくて…。ディスク I/O について教えてもらえませんか?」
花子:「いい質問ね。ディスク I/O のパフォーマンスを評価するときは、いくつかの重要な概念を押さえておく必要があるのよ。」
ディスク I/Oの時間について
花子:「まずは、I/O にかかる時間について考えましょう。I/O の時間は、主に次の3つに分けられるの。」
-
I/O待ち時間(I/O Wait Time)
- 「ディスクが他のリクエストを処理している間、キューで待機している時間。」
-
I/Oサービス時間(I/O Service Time)
- 「実際にディスクがデータを読み書きしている時間。」
-
I/O要求時間(I/O Request Time)
- 「I/O のリクエストを出してから完了するまでの時間。つまり
待ち時間 + サービス時間
の合計。」
- 「I/O のリクエストを出してから完了するまでの時間。つまり
太郎:「なるほど。I/O って単純にデータの読み書きだけじゃなくて、待ち時間も影響するんですね。」
タイムスケールの違い
花子:「次に タイムスケール
の話ね。ディスク I/O のパフォーマンスは ミリ秒
や マイクロ秒
の単位で考えるの。例えば…」
- HDD(ハードディスク) はミリ秒(ms)単位
- SSD(ソリッドステートドライブ) はマイクロ秒(µs)単位
「だから、SSD は HDD に比べて I/O の速度が格段に速いのよ。」
太郎:「そういえば、データベースのサーバーでは SSD を使うことが多いですよね。」
キャッシング(Caching)
花子:「次は キャッシング
の話ね。キャッシュを活用することで、ディスク I/O のレイテンシ(遅延)を減らせるの。」
- キャッシュヒット:「すでにキャッシュにデータがある場合、ディスクを読みに行かずに高速に処理できる。」
- キャッシュミス:「キャッシュにデータがない場合、ディスクアクセスが発生するので遅くなる。」
「例えば、OS には ページキャッシュ
という仕組みがあって、最近使ったデータを RAM に保存しておくの。これで頻繁にアクセスされるデータの I/O を減らせるのよ。」
太郎:「じゃあ、RAM のサイズが大きいほうが、キャッシュヒットしやすくなってパフォーマンスが上がるってことですね!」
ランダム I/O と シーケンシャル I/O
花子:「ディスクのアクセスには ランダム I/O
と シーケンシャル I/O
という2種類があるの。」
-
シーケンシャル I/O(Sequential I/O)
- 「データが連続して配置されていて、一度に大量のデータを読み書きするパターン。HDD でも SSD でも高速。」
-
ランダム I/O(Random I/O)
- 「データがディスク上のバラバラな場所にあって、ランダムにアクセスするパターン。特に HDD では遅くなる。」
「HDD の場合、ディスクの 回転
と 磁気ヘッドの移動
に時間がかかるから、ランダムアクセスが遅くなるのよ。逆に SSD はヘッドの移動がないから、ランダムアクセスも高速。」
太郎:「データベースのインデックス検索みたいな処理は、ランダム I/O が多そうですね。」
花子:「その通り!だから、データベースを高速化するには インデックスをメモリに載せる
とか SSD を使う
といった対策が有効なの。」
I/O サイズと IOPS(Input/Output Operations Per Second)
花子:「I/O のパフォーマンスを測る指標に IOPS
というのがあるの。」
- IOPS(アイオーピーエス):「1秒間に処理できる I/O の回数」
- I/O サイズ:「1回の I/O で扱うデータ量」
「HDD は IOPS が低いけど、1回の I/O で 大きなデータサイズ
を扱えば効率的に使えるの。一方、SSD は 小さいデータ
を大量に扱うランダム I/O に強い。」
太郎:「ってことは、大きいファイルを連続で書き込む処理なら HDD でも問題ないってことですね。」
花子:「ここまでの話を現実世界で考えてみると、こういうイメージね。」
-
I/O待ち時間 → レジの行列待ち
「スーパーで買い物するとき、レジが混んでたら並ぶよね?これが I/O待ち時間。」 -
I/Oサービス時間 → レジでの会計時間
「自分の番がきたら会計する。この時間が I/Oサービス時間。」 -
キャッシュヒット → ポケットの小銭
「会計時にちょうどの金額
をポケットから出せればすぐ終わる(キャッシュヒット)。でも、財布から探すと時間がかかる(キャッシュミス)。」 -
シーケンシャル I/O → ベルトコンベア方式のレジ
「流れ作業で商品を順番に処理すれば速い。これがシーケンシャル I/O。」 -
ランダム I/O → 商品を探し回る買い物
「店内で欲しいものをあちこち探してると時間がかかる。これがランダム I/O。」
まとめ
花子:「ディスク I/O のパフォーマンスを理解するには、待ち時間やキャッシュ、I/O の種類を意識するのが大事よ。」
太郎:「ありがとうございます!待ち時間やキャッシュを意識して勉強してみます!」
参考リンク
システムパフォーマンス関連記事の目次
システムパフォーマンス関連記事は、以下の書籍を参考に記述しています。