ハードウェア基礎 #4 ストレージ ① デバイス — HDD / SSD / NVMe と IOPS / スループット / レイテンシ

読了 6分

#3 で、メモリが足りないときにシステムが落ちる遅いところがディスクだと述べました。そのディスクが今回の主題です。データベースファイル、ログ、アップロードされた画像がすべてストレージ上にあり、種類と性能指標によってサービスの速度が大きく分かれます。ディスク 1 枚をまず整理し、複数枚を束ねて接続する話は #5 でつなげます。

ハードウェア基礎 シリーズでの今回の位置です。

ストレージの基本 #

ストレージは #3 のメモリと 2 つが違います。電源が切れても中身が残る 不揮発性 で、RAM よりずっと遅いです。その代わり容量が大きく値が安いです。だから永続保管はストレージが担い、いま使うデータだけをメモリへ上げます。

ディスクはデータを ブロック (block) という一定の大きさの単位で読み書きします。ファイル 1 つを変えても、そのファイルがまたがるブロック単位で読み書きするという点が、後で性能指標を理解する土台になります。

HDD — 回転する磁気ディスク #

HDD (Hard Disk Drive) は磁気を塗った円盤を速く回し、その上をヘッドが動きながらデータを読み書きします。物理的に動く部品があるという点が性能のすべてを説明します。

目的のデータを読むにはヘッドがその位置へ移動し (シーク)、円盤がその地点まで回ってくる (回転) 必要があります。この待ちのため、散らばったデータを読む ランダムアクセスが特に遅い です。逆に一か所に連なったデータを読むシーケンシャルアクセスは比較的速いです。値が安く容量が大きいので、バックアップや大容量保管には今も使われます。

SSD — 動く部品がない #

SSD (Solid State Drive) はフラッシュメモリにデータを電子的に保存します。動く部品がなく、ヘッド移動も回転待ちもありません。だからランダムアクセスが HDD より数百倍速く、位置による速度差もほぼありません。

今日のサーバーとデータベースの標準的な選択肢です。値は HDD より高いものの、速度差があまりに大きいので、応答速度が重要なワークロードは事実上 SSD を前提にします。

NVMe — SSD をより速い通路に #

SSD が速くなると、今度は SSD を接続する通路がボトルネックになりました。初期の SSD は HDD 時代の SATA 通路をそのまま使い、この通路の限界が SSD の速度を抑えました。

NVMe (Non-Volatile Memory express) は SSD を CPU に近い高速通路 (PCIe) に直接接続する方式です。同じフラッシュでも NVMe で接続すれば SATA SSD より数倍速いです。最近の高性能インスタンスのローカルディスクはほとんど NVMe です。

3 種類を 1 行で
HDD        : 回転円盤 + ヘッド      遅い、安い、大きい
SATA SSD   : フラッシュ + 旧通路    速い
NVMe SSD   : フラッシュ + 高速通路  もっとも速い

3 つを分ける性能指標 #

容量が同じでもディスク性能は千差万別です。3 つの指標で分かれます。

IOPS — 1 秒あたりの入出力回数 #

IOPS (Input/Output Operations Per Second) は 1 秒に読み書きのリクエストを何回処理するかです。小さなデータをあちこちで頻繁に読み書きするワークロード、たとえばデータベースがこれに敏感です。細かく散らばったリクエストが多いほど IOPS が重要です。

スループット — 1 秒あたりのデータ量 #

スループット (Throughput) は 1 秒に運ぶデータの量 (MB/s) です。大きなファイル 1 つをまるごと読み書きするワークロード、たとえば動画ファイルやバックアップがこれに敏感です。

レイテンシ — 1 回にかかる時間 #

レイテンシ (Latency) はリクエスト 1 つを処理するのにかかる時間です。レイテンシが低いほど応答が即座です。HDD は ms 単位、SSD と NVMe は μs 単位です。

ワークロード重要な指標
データベースIOPS、レイテンシ小さく頻繁なランダムアクセス
ログ・バックアップスループット大きなデータをシーケンシャルに
メディアストリーミングスループット大きなファイルを連続で
キャッシュ・セッション保存レイテンシ即座の応答

要点は 容量と速度は別の軸 だということです。1TB のディスクが 100GB のディスクより必ず速いわけではありません。速さは種類と IOPS・スループット・レイテンシが決めます。

クラウドでは — 容量と性能を別々に買う #

クラウドディスクの核心は容量と性能を 別々に 選ぶという点です。AWS の EBS を例にすると次のように分かれます。

ボリュームタイプ性格使う場面
gp3 (汎用 SSD)容量と IOPS・スループットを別々に指定ほとんどの一般ワークロード
io2 (プロビジョンド IOPS SSD)高い IOPS を保証IOPS に敏感なデータベース
st1 (スループット最適化 HDD)シーケンシャルスループット重視、安いログ・ビッグデータ

gp3io2 が分かれる理由がここで見えます。同じ SSD でも保証する IOPS の水準と価格が違います。データベースが IOPS の限界にぶつかったら、容量ではなく IOPS を上げるか io2 に替えるのが答えです。インスタンスに直接付いた NVMe である インスタンスストア は非常に速いものの、インスタンスを止めるとデータが消えます。この違いは #5 で整理します。

よく出会う落とし穴 #

「ディスクがいっぱいで遅いから容量を増やそう」 #

容量不足と速度不足は別の問題です。IOPS が限界なら容量を増やしても遅いままです。ディスクアラームは容量か IOPS かをまず切り分けます。

「SSD だから無条件で速い」 #

同じ SSD も SATA か NVMe か、保証 IOPS がいくつかによって数倍ずつ差が出ます。「SSD」の一言では速度はわかりません。

「ベンチマークのシーケンシャル速度を見て選んだ」 #

製品表記のシーケンシャル読み書き速度は大きなファイル基準です。データベースのようにランダムアクセスが多いワークロードは、その数字と無関係に IOPS とレイテンシが左右します。

「インスタンスストアに重要なデータを置いた」 #

インスタンスに直接付いたローカルディスクは速いものの、インスタンスを止めたり替えたりすると消える一時保存先です。永続保管が必要なら EBS や別のストレージを使います。

まとめ #

今回つかんだ絵です。

  • ストレージは 不揮発性 でメモリより遅いです。データを ブロック単位 で読み書きします。
  • HDD は動く部品のためランダムアクセスが遅く、SSD は電子式なので速く、NVMe は SSD を高速通路に直接接続してさらに速いです。
  • 性能は IOPS (1 秒あたりの回数)、スループット (1 秒あたりの量)、レイテンシ (1 回にかかる時間) で分かれます。
  • 容量と速度は別の軸 です。大きなディスクが必ず速いわけではありません。
  • クラウドは容量と性能を別々に買います。gp3io2 の違いがその例です。

次回 — ストレージの構成と接続 #

ディスク 1 枚は容量と速度、そして故障という限界があります。だから運用では複数枚を束ねてネットワークで接続します。#5 ストレージ ② 構成と接続 — RAID と DAS / NAS / SAN では、ディスクを束ねて速度と安全性を得る RAID、そしてディスクをサーバーに付ける 3 つの方式である DAS・NAS・SAN を整理し、それがクラウドストレージへどう再包装されたかまで見ます。

X