Dev Study
← コンピュータの仕組み
レッスン 10 / 13·約 13 分·第1期 コンピュータ単体の仕組み

SSDとHDD — なぜSSDは速いのか

リクエストがアプリケーションに届くまで
  1. ブラウザURL入力
  2. DNS名前→IP
  3. ルータ経路選択
  4. ロードバランサ振り分け
  5. Nginx受け口
  6. アプリ処理
  7. 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 ms
7200 rpm 8.33 ms 4.1667 ms 4.16 ms
15000 rpm 4.00 ms 2.000 ms 2.0 ms
✓ ここまでの確認

平均回転待ち時間が「1回転ぶん」ではなく「半回転ぶん」なのはなぜですか。

抽象原理

SSDには、動く部品が無い

SSDは半導体にデータを記録します。動く部品がありません。

この違いがもたらす帰結は、単に「速い」だけではありません。どこを読んでも速度がほとんど変わらないという性質が生まれます。

HDDでは、いま読んだ場所のすぐ隣を読むのは速く(ヘッドを動かさずに済む)、遠く離れた場所を読むのは遅くなります。SSDにはその区別がほとんどありません。電気的にアドレスを指定すれば、どこでも同じように取り出せます。

データを1つ取り出すまでの経路
読み出し要求このデータが欲しい
HDD の場合
ヘッドを移動シーク 数ms
回転を待つ平均 4.16ms
読み取りようやく
SSD の場合
電気的にアクセス移動なし・約80µs
  • ・HDDの時間の大半は「移動と待機」で、読み取り自体ではない
  • ・SSDにはその工程が存在しないので、桁が変わる
具体実物

桁で覚える記憶階層

第7週でCPUのキャッシュ階層を見ました。そこにストレージを足すと、全体像が完成します。

記憶装置の速度(4KB読み出し・実測に基づく代表値)表
装置 レイテンシ メモリとの比
メモリ(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)の差は、およそ何倍ですか。

⇄ 2つを見比べる
具体例 A

連続読み出し(大きなファイル1個)

1GBの動画ファイルを読む場合、データは連続して並んでいるので、カタログの最大速度に近い値が出ます。1件あたりの固定費はほぼ発生しません。

NVMe SSD で 400MB を読む(連続)表
カタログ値 7,000 MB/s
400MB ÷ 7,000 = 約0.06秒
 
固定費がほぼ無いので、
カタログ値どおりに近い
具体例 B

ランダム読み出し(小さなファイル多数)

4KBのファイルを10万個、1件ずつ順に読む場合、合計は同じ400MBですが、1件ごとに処理が発生します。カタログの最大速度は当てはまりません。

NVMe SSD で 4KB × 10万件(ランダム)表
単純計算 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倍以上ずれる。

自分の現場で確かめる

読んだだけでは身につきません。手元の環境で実際に見てみてください。

環境:

理解度チェック

読んだ直後は「分かった」と感じやすいものです。実際に解いて確かめてください。

問題 1 / 4正解: 0

7200rpmのHDDにおける平均回転待ち時間はどれですか。

用語集(5語)
シーク時間
HDDで磁気ヘッドを目的のトラックまで移動させるのにかかる時間。数ミリ秒。
回転待ち時間
HDDで目的のデータが磁気ヘッドの下に回ってくるまでの待ち時間。平均は半回転ぶんで、7200rpmなら4.16ミリ秒。
IOPS
1秒あたりに処理できる入出力の回数。小さなデータを多数扱う場合の性能指標。連続転送速度(MB/s)とは別物。
NVMe
SSDをPCI Expressに直結するための規格。SATA経由より高速で、特に連続転送速度で大きな差が出る。
ROTA
lsblkが表示する回転体フラグ。1ならHDD、0ならSSDとされるが、接続経路によって誤った値が報告されることがある。