SSD Nodes Learn メモリ 8GB — 年額 $66
ガイド Matt Connor著者 Matt Connor

SSD VPSとは?フラッシュストレージの速度を解説

SSD VPSは、回転式ディスクではなくNANDフラッシュを使う仮想サーバーです。HDDとの違いをIOPSとレイテンシで比較し、購入前に確認すべき3つの質問も紹介します。

SSD VPSとは何ですか?

SSD VPSは、回転式ハードディスクではなくフラッシュメモリを使用するディスクを備えた仮想専用サーバーです。SSDはsolid state driveの略で、可動部品を持たず、NANDフラッシュチップで構成されたストレージを指します。VPSはvirtual private serverの略で、物理ホストマシンを分離して割り当てた領域の1つです。独自のオペレーティングシステムを実行し、1台のサーバー全体であるかのように提供されます。この2つを組み合わせた名称が示すのは、1つの点だけです。サーバーがデータブロックを読み取るとき、最初に機械部品が移動する必要はありません。

これが定義のすべてです。以下では、この名称だけでは分からない点を説明します。料金ページにある「SSD hosting」という言葉だけでは、その背後にあるストレージアレイについてほとんど分からないためです。

VPSと通常の仮想マシンの違いをまだ整理できていない場合は、まずVPS、VM、VPCの違いを説明したページを読むことをお勧めします。

ホストがストレージ容量ではなく速度を宣伝する理由

プランページには、CPUコア数、メモリ、ディスク容量、帯域幅が記載されています。その後に、容量ではないディスク関連の項目が1つ追加されます。ホストがそうするのは、ストレージについて容量が重要な数値ではなくなってから、何年も経っているためです。サーバーの使用感を決める数値は、IOPS(1秒あたりの入出力操作数)とレイテンシ(1回の操作が返るまでの時間)です。

その理由は、構造の違いにあります。ハードディスクは回転するプラッタにデータを保持し、移動するアーム上のヘッドで読み取ります。プラッタ上の別の場所にあるブロックへ移動するには、アームがシークし、その後、目的のセクタがヘッドの下に来るまでディスクが回転する必要があります。7200回転/分では、半回転にかかる平均時間は約4 msで、これに数 msのシーク時間が加わります。フラッシュにはアームもプラッタもないため、読み取りは電気的な検索で行われ、数十マイクロ秒で返ります。

ChartRandom 4k read, published device class specifications rather than VPS measurements
The data behind this chart
[
  {
    "device": "7200 rpm hard disk",
    "random_read_iops": "125",
    "read_latency_ms": 8
  },
  {
    "device": "SATA SSD",
    "random_read_iops": "90,000",
    "read_latency_ms": 0.15
  },
  {
    "device": "NVMe SSD",
    "random_read_iops": "600,000",
    "read_latency_ms": 0.08
  }
]

7200 rpmのハードディスクは、ランダムな4k読み取りを1秒あたりおよそ125回処理できると評価されています。また、各読み取りの結果が返るまでの時間は約8 msです。NVMeドライブは、同じ読み取りを約600,000回、各約0.08 msで処理できると評価されています。その中間にあるSATA SSDは、約90,000回と評価されています。これらはパーセント単位の改善率ではなく、桁の違いとして読んでください。

このデータには2つの注意点があります。これらは各クラスのドライブ全体について公開された仕様であり、メーカーの仕様書に記載された数値です。VPS上で測定した数値ではありません。また、ドライブ全体を使えることはありません。ボリュームは1台のデバイス、またはアレイの一部を共有し、同じハードウェア上の他の顧客と隣り合って動作します。

2つの列は異なる質問に答えるため、組み合わせて読んでください。レイテンシは、1回の操作を待つ時間です。IOPSは、ドライブが同時に処理できる操作数です。フラッシュが高いIOPSを実現できるのは、並列処理を使うためです。多数のフラッシュチップが多数のリクエストに同時に応答し、深いキューがそれらを稼働させ続けます。1つのスレッドで動作するプログラムが、1回読み取って結果を待ち、その後に次の読み取りを発行する場合、グラフの最大値には達しません。そのプログラムに適用されるのは、レイテンシの列です。

SSD、NVMe、SATA、PCIe:異なる4つの層を表す4つの用語

各用語がシステムの異なる部分を表すため、購入者はこれらを混同します。

  • SSD は記憶媒体です。データが磁気ディスクではなく、NAND flash チップに保存されることを意味します。
  • SATA は、機械式ディスクの時代に設計されたインターフェースです。速度は最大6 Gbit/sで、実効スループットは約550 MB/sです。また、コマンドキューには処理待ちのコマンドを32個保持できます。
  • NVMe(non-volatile memory express)は、flash 専用に設計されたプロトコルです。数千個のコマンドを保持できるキューを多数サポートします。そのため、複数のCPUコアが1つの狭いキューを共有せず、同時にドライブと通信できます。
  • PCIe(peripheral component interconnect express)は、NVMeが使用するバスです。グラフィックカードを接続するレーンと同じ種類のものです。

つまり、SATA SSDとNVMe SSDは、どちらもflashにデータを保存します。違いは使用するインターフェースです。SATA SSDは、どのハードディスクよりもはるかに高速です。ただし、32個のコマンドキューでは並列処理の量に制限があります。flashは、まさに並列処理を得意とする記憶媒体です。どちらを購入する価値があるかはワークロードによって異なります。NVMeとSATA SSDの選択では、この違いを詳しく説明します。

ローカルフラッシュかネットワーク接続ストレージか?

同じ言葉で、まったく異なる2つの構成が販売されています。

ローカルストレージとは、フラッシュドライブがVPSと同じ物理ホスト内にある構成です。リクエストは1台のマシン内をPCIe経由で移動してすぐに戻るため、レイテンシは数十マイクロ秒に収まります。

ネットワーク接続ストレージとは、仮想ディスクが別のストレージクラスター(CephやSAN(storage area network)など)にあり、読み取りと書き込みのたびにネットワークを経由してアクセスする構成です。プロバイダーは通常、これを「cloud block storage」または「elastic volumes」と呼びます。フラッシュ自体は実在します。ただし、ネットワーク経由の往復も発生し、すべての操作に追加されます。そのため、レイテンシは数十マイクロ秒ではなく、数百マイクロ秒台後半から数ミリ秒程度になります。

どちらが間違いというわけではありません。ネットワークストレージは、データがそのホスト上に存在しないため、ホストの停止にも耐えられます。プロバイダーは別のハードウェア上でサーバーを起動でき、ディスクもそのサーバーに追従します。ローカルNVMeは高速ですが、1台の物理マシンに依存します。そのため、そこでハードウェア障害が発生すると、バックアップから復元する必要があります。プランがどちらを使用しているか確認してください。ほとんど誰も確認しません。

実際のサーバーで感じる違い

サーバー処理の大半は、長いシーケンシャル転送ではなく、小さなランダム読み取りと書き込みです。そのため、宣伝文句にある MB/s の数値は、ページ上で最も参考にならない数値です。

  • データベースのコミット。 永続性を保証するデータベースは、トランザクションをコミットするときに fsync を呼び出し、データが実際に保存されたことをドライブが確認するまで待機します。ハードディスクではこの待機時間がミリ秒単位になるため、小規模なデータベースでは1秒あたり数百件程度のコミットに制限されます。フラッシュストレージでは、同じ待機時間が1ミリ秒未満になります。PostgreSQL、MySQL、または 本番データベースとしての SQLite のいずれを実行する場合でも、差が最も大きくなるのはこの部分です。
  • パッケージのインストール。 apt install は数千個の小さなファイルを展開しながら、ディスクに同期します。この処理のほとんどはシーケンシャルではないため、IOPS に制限されます。
  • コンテナイメージの取得。 docker pull は圧縮されたレイヤーをネットワーク経由で取得し、その後、数千個の小さなファイルに展開します。ダウンロードはネットワーク帯域幅に制限されます。展開はディスク性能に制限されるため、低速なボリュームでは展開処理を待つことになります。
  • 起動と再起動。 起動時には、カーネルと initramfs が読み込まれ、その後、ボリューム上に分散した数百個の小さな unit ファイルと共有ライブラリが読み込まれます。

これらは大規模なシーケンシャル読み取りではありません。1秒あたり 500 MB をストリーミングできても、3,000 IOPS しか処理できないボリュームは、docker compose pull の実行中には遅く感じられます。待機時間はメガバイト単位ではなく、ファイルごとに発生するためです。

料金ページの「SSD cloud hosting」では、ほとんど何も分かりません

この表現は、記憶媒体の種類を示しているだけです。ドライブがどのインターフェースを使用するかは分かりません。また、そのドライブがサーバーと同じマシンにあるかどうかも分かりません。プランで許可される性能上限についても説明していません。

この上限が最も重要ですが、料金ページではほとんど表示されません。1台のホストで多数の顧客にサービスを提供し、上限のない隣接テナントが他のテナントの性能を奪う可能性があるため、プロバイダーはボリュームごとに IOPS とスループットを制限します。数十万 IOPS に対応できるハードウェアでも、数千 IOPS の上限を設定するのは一般的で、適切な設計です。しかし、プランの説明には表示されません。どちらも「SSD」と記載された2つのプランでも、一方はボリュームごとの上限がないローカル NVMe で、もう一方は 3,000 IOPS に制限された共有クラスターボリュームという場合があります。

上限には2種類あります。継続上限は、常に変わらない固定の上限です。バースト上限では、低い基準値に加えてクレジットが付与され、一定時間だけ基準値を超えられます。クレジットはボリュームがアイドル状態の間に補充されます。バースト上限は5分間のテストでは優れた結果になりますが、データベースのインポートや大規模なリストアの途中で基準値まで低下することがあります。プロバイダーが大きな数値を提示している場合は、その性能をどのくらいの時間維持できるかを確認してください。

VPSで実際に提供されている構成を確認する方法

ゲスト内から確認できるのは、ハイパーバイザーがゲストに通知した情報だけです。

lsblk -d -o NAME,ROTA,MODEL,SIZE
cat /sys/block/vda/queue/rotational

vdaを、ディスクに表示されたデバイス名lsblkに置き換えます。デバイスが非回転式であるとカーネルに通知されている場合、ROTArotationalファイルは0を読み取ります。反対に通知されている場合は1を読み取ります。仮想ディスクは、ハイパーバイザーが通知する情報からこのフラグを設定します。そのため、物理ハードウェアではなく仮想デバイスを示します。MODELは、vdaのようなvirtioディスクでは通常空です。エミュレートされたSATAコントローラーでは、QEMU HARDDISKのような汎用的な文字列になることがあります。ゲストからホストのアレイを確認することは想定されておらず、実際に確認できません。

したがって、このフラグは参考情報として扱い、残りの性能は測定してください。fioを使用して、ボリューム上のファイルに対してランダム4kテストを実行します。キュー深度は、アプリケーションが実際に使用する値に設定してください。バーストクレジットを使い切るのに十分な時間、テストを実行します。VPSを適切にベンチマークする方法に、fioのコマンドと、実際より良い数値を出してしまう一般的なミスを記載しています。

購入前にプロバイダーへ確認する3つの質問

  1. ストレージはハイパーバイザーにローカル接続されていますか、それともネットワーク接続ですか? 回答によってレイテンシーの下限が決まり、物理ホストに障害が発生したときにデータがどうなるかも決まります。この点を明確に回答できるプロバイダーは、十分に検討しています。
  2. ボリュームの IOPS 上限はいくつですか? 数値で回答してもらってください。「無制限」や「エンタープライズグレード」は数値ではありません。本当に上限がない場合は、同じホスト上の別の利用者がバックアップ中にアレイ全体を占有するのを何が防ぐのか確認してください。
  3. その上限は継続値ですか、それともバースト値ですか? バーストする場合は、ベースラインとバーストの継続時間を確認してください。夜間ジョブが実際に利用できるのはベースラインなので、計画の基準にする必要があります。

フラッシュは消耗しますか。あなたの問題ですか?

フラッシュセルには書き込み回数の上限があります。そのため、ドライブはTBW(書き込み可能なテラバイト数)またはDWPD(1日あたりのドライブ書き込み回数)で耐久性を示します。ドライブはセル全体に書き込みを均等に分散します。これはウェアレベリングと呼ばれます。また、故障したセルを置き換えるため、予備ブロックを確保しています。VPSでは、消耗への対応はプロバイダーの責任です。プロバイダーは自社ドライブのSMARTカウンターを監視し、耐久性の上限に達する前にハードウェアを交換します。あなたが注意すべき問題は、フラッシュよりも古くからあります。ドライブはバックアップではありません。ボリュームの下層にある冗長化もバックアップではありません。データと同じように削除も複製するためです。

実際に選んでいるのは、ギガバイトあたりの価格です。フラッシュは回転ディスクよりギガバイトあたりの価格が高いため、同じ価格のハードディスクプランよりSSDプランの容量は通常少なくなります。メディアやアーカイブ用に大容量が必要な場合は、高速ボリュームを小さく保ち、大容量データをより安価な場所に置いてください。これはバックアップをサーバーの外部に保管する場合にも適した構成です。ストレージが料金全体の中でどのように位置付けられるかについては、VPSの実際の料金で各項目を確認できます。

FAQ

SSD VPSはNVMe VPSと同じものですか?

すべてのNVMe VPSはSSD VPSです。NVMeドライブはフラッシュストレージだからです。逆は成り立ちません。「SSD」と表示されたプランはSATA SSDの場合があります。SATA SSDは、機械式ディスク向けに設計されたインターフェースの背後にあるフラッシュストレージで、コマンドキューは32、速度上限は約550 MB/sです。どちらもハードディスクより大幅に高速です。この差がワークロードに影響する場合は、プラン名から判断せず、プロバイダーに使用されているストレージの種類を確認してください。

SSD VPSを使うとWebサイトは高速になりますか?

ディスク処理だけが高速になります。リクエストごとに複数のデータベースクエリを実行するページは高速化します。これらのクエリとコミットは、小さなランダムI/Oだからです。メモリまたはキャッシュから配信されるページは、配信時にディスクへアクセスしません。そのため、速度はほとんど変わりません。ストレージで改善しようとする前に、リクエストのどの処理が遅いのかを測定してください。

VPSが実際にSSDストレージを使用しているか確認するにはどうすればよいですか?

ゲスト内から物理ハードウェアを検証することはできません。lsblk -d -o NAME,ROTAは仮想デバイスが示す情報を表示しますが、その値はハイパーバイザーが決定します。そのため、そこに表示される0は手掛かりであって、証明ではありません。実用的な確認方法は測定です。ランダムな4k読み取りワークロードでfioを数分間実行し、報告されたレイテンシを確認してください。1桁台のミリ秒のランダム読み取りは、回転ディスクまたは混雑したネットワークボリュームを示します。数十マイクロ秒であれば、ローカルのフラッシュストレージを示します。

ネットワーク接続型SSDストレージはローカルNVMeより劣りますか?

操作ごとの速度が遅く、障害の発生形態も異なります。読み取りと書き込みのたびにネットワークの往復時間が加わるため、どちらもフラッシュストレージであってもレイテンシは高くなります。一方で、データは単一の物理ホスト上に存在しません。そのため、ホスト障害が発生してもボリュームは失われず、プロバイダーにとってスナップショットやライブマイグレーションも容易です。レイテンシが重要なデータベースにはローカルフラッシュを選択してください。マイクロ秒単位の速度よりもボリュームの存続を重視する場合は、ネットワークストレージを選択してください。

#vps#ssd#nvme#storage#hosting-basics