- ブラウザURL入力
- DNS名前→IP
- ルータ経路選択
- ロードバランサ振り分け
- Nginx受け口
- アプリ処理
- DB保存今ここ
ここまでCPUとメモリを見てきました。今回は電源を切っても消えない記憶装置、ストレージを扱います。データベースがデータを保管している場所でもあります。
まず結論
HDDが遅いのは、目的の場所まで物理的に移動する必要があるからです。腕を動かし、円盤が回ってくるのを待ちます。この待ち時間はミリ秒単位で、電気の速度とは比べものになりません。
SSDには動く部品がありません。だから「どこを読むか」で速度がほとんど変わりません。この一点が、HDDとSSDの最も本質的な違いです。
7200回転/分のHDDで、読みたいデータが円盤のちょうど反対側にあったとします。回ってくるまで平均どれくらい待つでしょうか。
当てることが目的ではありません。外した予測ほど記憶に残るので、直感で選んでください。
HDDは、物理的に「取りに行く」装置
これまで見てきたCPUやメモリは、電気的に動作します。電気の移動は極めて速いので、遅延はナノ秒の世界でした。
HDDは違います。物が動きます。
HDDの中には磁気を塗った円盤が入っていて、高速で回転しています。データを読むには、磁気ヘッドという読み取り装置を目的の位置まで動かし、さらに目的のデータが回ってくるのを待ちます。
この2つが、HDDの遅さの正体です。
- シーク時間 — ヘッドを目的のトラックまで動かす時間
- 回転待ち時間 — 目的のデータが回ってくるまでの待ち時間
どちらも物理的な移動なので、ミリ秒の単位になります。電気の速度とは比べものになりません。
回転待ち時間は、計算で求まる
回転待ち時間は仕様から計算できます。実際にやってみます。
7200rpm は1分間に7200回転という意味なので、1回転にかかる時間は次のとおりです。
1回転の時間 = 60秒 ÷ 7200回転 = 0.00833秒 = 8.33ミリ秒目的のデータの位置は毎回バラバラなので、平均すれば半回転ぶん待つことになる平均回転待ち時間 = 8.33 ÷ 2 = 4.16ミリ秒
メーカーの仕様書にも同じ値が載っています。回転数別に並べると次のようになります。
回転数 1回転 平均待ち時間 仕様書の表記5400 rpm 11.11 ms 5.556 ms 5.6 ms7200 rpm 8.33 ms 4.1667 ms 4.16 ms15000 rpm 4.00 ms 2.000 ms 2.0 ms
平均回転待ち時間が「1回転ぶん」ではなく「半回転ぶん」なのはなぜですか。
SSDには、動く部品が無い
SSDは半導体にデータを記録します。動く部品がありません。
この違いがもたらす帰結は、単に「速い」だけではありません。どこを読んでも速度がほとんど変わらないという性質が生まれます。
HDDでは、いま読んだ場所のすぐ隣を読むのは速く(ヘッドを動かさずに済む)、遠く離れた場所を読むのは遅くなります。SSDにはその区別がほとんどありません。電気的にアドレスを指定すれば、どこでも同じように取り出せます。
- ・HDDの時間の大半は「移動と待機」で、読み取り自体ではない
- ・SSDにはその工程が存在しないので、桁が変わる
桁で覚える記憶階層
第7週でCPUのキャッシュ階層を見ました。そこにストレージを足すと、全体像が完成します。
装置 レイテンシ メモリとの比メモリ(DRAM) 約 100 ナノ秒 1倍NVMe SSD 約 80 マイクロ秒 約800倍HDD 約 10 ミリ秒 約100,000倍
メモリからHDDまで、およそ10万倍の開きがあります。第7週で「L1とメモリで100倍」と見ましたが、その先にさらに桁違いの差があるわけです。
この桁感覚は実務で直接使えます。「この処理は100万件をディスクから読みます」と言われたとき、HDDなら1件10ミリ秒で約3時間、NVMe SSDなら約80秒。設計の可否がここで決まります。
メモリアクセス(約100ns)とHDDアクセス(約10ms)の差は、およそ何倍ですか。
連続読み出し(大きなファイル1個)
1GBの動画ファイルを読む場合、データは連続して並んでいるので、カタログの最大速度に近い値が出ます。1件あたりの固定費はほぼ発生しません。
カタログ値 7,000 MB/s400MB ÷ 7,000 = 約0.06秒固定費がほぼ無いので、カタログ値どおりに近い
ランダム読み出し(小さなファイル多数)
4KBのファイルを10万個、1件ずつ順に読む場合、合計は同じ400MBですが、1件ごとに処理が発生します。カタログの最大速度は当てはまりません。
単純計算 400MB ÷ 7,000 = 約0.06秒1件ずつ(QD1) 1件 約80µs → 1秒に約12,500件100,000件 × 80µs = 約8秒約140倍の差
合計データ量は同じ400MBなのに、所要時間が約140倍違います。何がこの差を生んでいるのでしょうか。
「1件あたり」に注目してください。
この章のまとめ
- HDDが遅いのは物理的な移動があるから。シーク(ヘッド移動)と回転待ちで、ミリ秒単位の時間がかかる。
- 7200rpmの平均回転待ち時間は 4.16ミリ秒(1回転8.33msの半分)。仕様書にもこの値が載っている。
- SSDには動く部品が無いので移動時間がゼロ。さらにどこを読んでも速度がほぼ変わらない。
- メモリ(100ns)からHDD(10ms)まで約10万倍の開きがある。
- MB/s(連続)とIOPS(ランダム)は別の指標。小さなファイルを多数扱う処理にカタログの最大転送速度を当てはめると、1件ずつ読む場合は100倍以上ずれる。
自分の現場で確かめる
読んだだけでは身につきません。手元の環境で実際に見てみてください。
理解度チェック
読んだ直後は「分かった」と感じやすいものです。実際に解いて確かめてください。
7200rpmのHDDにおける平均回転待ち時間はどれですか。
用語集(5語)
- シーク時間
- HDDで磁気ヘッドを目的のトラックまで移動させるのにかかる時間。数ミリ秒。
- 回転待ち時間
- HDDで目的のデータが磁気ヘッドの下に回ってくるまでの待ち時間。平均は半回転ぶんで、7200rpmなら4.16ミリ秒。
- IOPS
- 1秒あたりに処理できる入出力の回数。小さなデータを多数扱う場合の性能指標。連続転送速度(MB/s)とは別物。
- NVMe
- SSDをPCI Expressに直結するための規格。SATA経由より高速で、特に連続転送速度で大きな差が出る。
- ROTA
- lsblkが表示する回転体フラグ。1ならHDD、0ならSSDとされるが、接続経路によって誤った値が報告されることがある。