レビューNVM Express(NVMe)は、フラッシュメモリなどの不揮発性メモリにアクセスするための次世代規格です。SASやSATAといった従来の技術は、速度が遅すぎます。NVMeがどれほどの効果をもたらすかを示すため、MicronはHHHL(標準PCIeカード)形式の9100 NVMeフラッシュドライブ(各800GB)を12台提供しました。
過去2ヶ月間、これらのカードをテストしてきました。特に最後の1ヶ月は、本当に苦労しました。多くのことを学びました。ドライブの理論について読めば「NVMeの方が速い」という基本的なことは分かりますが、実際に問題に直面して初めて分かる、ちょっとした実用的なヒントもたくさんありました。
部品のパフォーマンス
何かのストレージのレビューを読むときは、たいていたくさんの分かりやすいグラフが載っているのを期待します。例えば、このSSDはあのSSDと比べてこのくらい速い、などです。簡単なグラフを作ることもできますが、ほとんど意味がありません。
実のところ、関連性のあるグラフを作成できるほどパフォーマンスプロファイルが似ているカードをテストしたことがないのです。様々なセダンとスクラムジェットの速度を比較したグラフに何の意味があるのでしょうか?
Micron 9100に匹敵するカードは、Fusion-IOのような超ハイエンド(そしてとんでもなく高価な)カードしか見たことがありません。それでも、比較は正確ではありません。パフォーマンスプロファイルが一致しないからです。もちろん、私が最後にFusion-IOカードを触ったのは2013年、NVMeが登場する前のことでした。
Micron 9100 NVMe フラッシュドライブ、HHHL(標準 PCIe カード)形式で各 800 GB
このNVMe対応と非NVMe対応という二分法は重要です。同じベンダー内でも違いがはっきりと分かります。私たちのラボではしばらくの間、Micron P420mを使用していましたが、こちらもかなり高速でした。状況によっては9100に迫る直線速度を実現できたこともありましたが、ほとんどのワークロードプロファイルではP420mは9100には遠く及びませんでした。
パフォーマンスの違いの理由は、Micronのブラックマジックなフラッシュコントローラアルゴリズムや高性能なフラッシュチップではなく、NVMeがそもそもなぜ存在するのかという点にあります。NVMeの「なぜ」について改めて記事を書くまでもなく、NVMeはSASやSATAよりもはるかに多くのキューを、はるかに深いキュー深度で実現できるとだけ言っておけば十分でしょう。
ドライブに対して1セットのI/O操作を実行する単一のプロセスでは、他のフラッシュドライブとほぼ同じパフォーマンスが得られます。10,000プロセス相当のI/Oを同時にドライブに投入すると、9100は他のSSDをバグのように圧倒します。
大きい vs. 小さい:速度と送り
9100のモデルによっては、Micron 9100をワークステーションに搭載するのは、まるでサターンVに乗って通勤するようなものです。一般的に、9100の潜在能力を最大限に引き出すには、サーバーに搭載し、ネットワークを破綻させるほどのトラフィックを流す必要があります。
見出しの数字
800GB 9100の公式書き込み速度は、現代のSSDとしては平凡です。4KランダムI/Oで55,000 IOPS、シーケンシャルI/Oで約650MBという、控えめな数値です。一方、読み出しは540,000 IOPS、シーケンシャルI/Oで約2.1GB/秒と、より印象的です。
9100シリーズの2.4TB版は、書き込み速度30万IOPS(2GB/秒)と読み取り速度75万IOPS(3GB/秒)という驚異的な性能を誇ります。サンタさんへ: 2.5インチフォームファクターのこのモデルを12台欲しいです。どう使うか全く想像がつきませんが、とにかく欲しいです。
私が取得した数値は、Micronが公表している数値と若干異なります。これは、私が所有する12台のドライブが「エンジニアリングサンプル」であるためと考えられます。また、Micronの公式数値は異なるI/Oプロファイルを使用しているためかもしれません。
800GBの9100ドライブで私が達成できた最高の数値は、ランダムIOPSで書き込み65,000k、読み込み600,000k、書き込み700MB、読み込み2.3GB/秒でした。もちろん、これは64Kブロックを使用し、複数のワーカーをそれぞれ256のキュー深度に設定した場合です。これはNVMe SSDにとって理想的な条件です。
MicronがこれらのSSDの見出しの数値について嘘をついているわけではないと言っても過言ではありません。実際、少し控えめな数値になっているかもしれません。長期にわたるテストでは、キューの深さが大きな違いを生むことも示されました。これらのドライブはNVMeのメリットを実際に最大限に活用しています。
現実世界でのテスト
テストのほとんどは私のArgonサーバーで行いました。ArgonはSupermicro SYS-1028U-TNRTP+サーバーで、ラボで何ヶ月もの間、非常に多くの作業をこなしてきました。テスト時のArgonのロードアウトは、Intel Xeon E5 2685 v3 CPU x 2、384GB RAM、Micron 800GB 9100 x 2、Intel 520 480GB SSD x 4(RAID 0)、そしてオンボードのクアッドポートIntel 10GBE NICでした。
余談ですが、2685 v3にはハードウェア仮想化機能がないことをご存知でしたか?個々のコアをオフにすることはできますが、仮想化拡張機能はありません。この「メタルオンリー」のCPU設計こそが、私がストレージのテストにArgonを頼りにしている理由です。
テスト前に、ドライブを3週間バーンインしました。バーンイン中はどの時点においてもパフォーマンスに目立った変化はありませんでした。LinuxのパフォーマンスはWindowsよりも優れていました。ドライブのブロックサイズが大きいほど、パフォーマンスは向上しました。すべて正常です。
基本的なプロファイリングが完了したら、Windowsでの4Kワークロードに焦点を当てました。これは、SSDが現在遭遇する可能性のある最悪のシナリオであり、依然としてかなり一般的なシナリオだからです。ArgonはIometerを使用して1台の9100をピン留めできます(ただし、ギリギリですが)。2台の9100をRAID 0で構成してテストしたところ、状況はさらに悪化しました。特にWindowsでは状況が悪化したため、このシナリオをかなり頻繁にテストしました。
256 キュー 4K アラインメント 50% 読み取り 100% ランダム RAID 0 2 SSD 4 ワーカー
以下は、Windows 2012 R2 で 2 SSD RAID 0 に対して Iometer が出力した結果の一部であり、議論する価値があると思います。
256 キュー、4K アラインメント、50% 読み取り、100% ランダム、4 ワーカー: 365k IOPS で 1500MB/秒
256 キュー、4K アラインメント、70% 読み取り、100% ランダム、4 ワーカー: 385k IOPS で 1575MB/秒
256 キュー、4K アラインメント、100% 読み取り、100% ランダム、4 ワーカー: 385k IOPS で 1580MB/秒
256 キュー、4K アラインメント、100% 読み取り、100% ランダム、1 ワーカー: 175k IOPS で 715MB/秒
256 キュー、4K アラインメント、100% 読み取り、0% ランダム、1 ワーカー: 175k IOPS で 4575MB/秒
ここでは、ワーカーが1人の場合と4人の場合の違いがはっきりと分かります。1人のユーザーではこれらのカードに挑戦することはないという考えは、テストで実証されています。
100%ランダムモードでは、4人の作業者が50%、70%、100%の読み取り設定を行い、結果は非常に近いため、ほぼ同じでした。表面的には、かなり印象的な結果ですが、少し調べてみると問題点が見つかります。簡単に言うと、ドライブがテスト構成に対して速すぎたということです。
テストを実行するたびに、5つのCPUコアがピン留めされました。Iometerはマルチスレッドなので、各ワーカーがコアの大部分を消費すると予想していました。これは問題ありません。Argonには確かに余裕のあるコア数があります!問題は、5つ目のコアを消費する側、つまりWindows自体にありました。
WindowsのRAID実装は、385K IOPSを超えるとパフォーマンスが上がらないことが判明しました。コアがフラット化し、それ以上高速化しようとしなくなります。Linuxも状況はそれほど良くありませんでした。Devuan、CentOS 6、7(いずれもパッチ適用済み)を試しましたが、400K IOPSあたりで同様の問題が発生しました。
HHHL形式のカードなので、速度向上のために接続できるRAIDコントローラがありません。ハードウェアRAIDカードがI/O処理能力においてXeonコアに勝てると期待しているわけではありませんが、比較対象として何かあればと思っています。
割れ窓は誤りではない
理論的な話は楽しいものですが、ソフトウェアRAID実装の限界は現実世界に影響を与えます。これはWindowsで最も劇的に実証されました。
実際にサーバーで行っていることをシミュレートしようと、9100 RAID 0から数百万個のファイルを9100 RAID 0自体にコピーしました。ファイルは様々なサイズで、あらゆる種類のストレージテストに使用する標準的なテストベッドファイルセットです。
Windowsエクスプローラーを使えば、4GB/秒を超える速度を簡単に達成できました。タスクマネージャーは、様々な負荷がかかっているコアを多数報告していましたが、興味深いことに、Iometerテストで見られたような、コア全体が固定されているような状況は見られませんでした。とはいえ、Windowsの動作は非常に悪かったです。
自分自身から自分自身へのコピー - Windows が維持できる限界
リソースモニターを開くと、システム全体が混乱状態になり、リソースモニターはフリーズし、その後クラッシュしました。何度かテストを繰り返しました。ある時点では、リソースマネージャーがひどくクラッシュし、オペレーティングシステム自体が崩壊し、再インストールを余儀なくされました。なぜそうなったのか、いまだにわかりません。
OSは9100ではなく、Intel 520 480GB SSD 4台で構成されたハードウェアRAID 0にインストールされたことを指摘しておく価値があります。再インストール後もこの動作は変わりませんでした。別の9100カードを試してみました。他のサーバーでも同様の現象が再現しました。Windowsエクスプローラーは、ドライブがそのような速度に対応している場合、数百万ものファイルをドライブからエクスプローラー自身にコピーすることを好まないようです。
Server 2016 Technical Preview 5は、Server 2012 R2のようなクラッシュは発生しませんでした。また、Server 2012 R2と比較して、中程度ではあるものの安定したパフォーマンス向上を示しました。しかし、ハードウェアの限界に達する前に、ソフトウェアRAIDの壁にぶつかってしまったようです。
ネットワークを破壊する
これらのカードを最大限に活用するために、「データプレーンとコントロールプレーンを分離する」ことにしました。システムごとにカードを1枚ずつ配置し、そのストレージをiSCSI経由で中央ユニットに提供し、中央ユニットは「単なるRAIDボックス」として動作させます。ワークロードは他のユニットで完全に実行します。
私が所有するサーバーの中で、シングルスレッドパフォーマンスが最も速いのはNeonです。NeonはSupermicro 6028TP-DNCRで、E5-2697 v3 CPUを2基搭載しています。ベースクロックはArgonと同じ2.6GHzですが、ターボ周波数はNeonが3.6GHzなのに対し、Argonは3.3GHzです。また、RAM容量はNeonが256GBなのに対し、Argonは384GBです。
NeonをRAIDコントローラとして使っていたので、10GbE NICはありとあらゆるところから借りたり、盗んだりして手に入れました。なんとか40GbEカードを見つけてNeonに挿しました。カードをホストするシステムを10台ほど集め、ケーブルも揃えて試すことができました。
面白半分で、Neon に表示された 10 台の iSCSI デバイスを使って Windows RAID を構築してみました。RAID は作成できましたが、負荷をかけようとした途端 Server 2012 R2 が勝手に終了してしまったので、どれくらいの速度になるのか全く分かりません。残念ながら、Datacore のライセンスを持っていないのですが、そうでなければそちらを使っていたでしょう。
Linuxはそれほどがっかりしませんでした。1週間の試行錯誤の後、ランダムリードIOPSが400万、ランダムライトIOPSが50万を定期的に達成できるようになりました。私の貧弱なNVMe SANは期待に応えている!少なくともそう思っていました。もちろん、さらに詳しく調べてみると、問題が見つかりました。
ネットワークがボトルネックでした。その後、CPUもボトルネックになりました。10枚のカードの性能を最大限に引き出すアレイを構築することは、結局できませんでした。
9100 SSD 1台を処理するには、10GbE NIC 2枚で十分です。しかし残念ながら、私のスイッチには40GbEポートが4つしかなく、10台の9100 SSDを処理するには不十分で、ネットワークオーバーヘッドも発生します。ランダムリードIOPSは4Mではなく5Mにすべきでした。
残念ながら、速度を上げる方法は何もありませんでした。NeonのPCI-Eスロットが足りなかったのです。シャーシ内のGPU用スロットを使い、カードをテープで固定していました。シーケンシャルリードは21GB/秒に達するはずでしたが、結局16.5GB/秒しか出ませんでした。1週間かけて様々な構成を試してみましたが、これが精一杯でした。
ストレージはもはやボトルネックではない
ワークロードをローカルで実行していない場合、最新のx86ノードはMicronの9100 NVMe SSDの2倍の性能をフル稼働で実現できると期待できます。さらに、より小規模なストレージを追加すれば、ソフトウェアが優れており、ネットワークに多額の投資をしていると仮定すれば、スケールアウト型ストレージソリューションにおける優れたノードとなるでしょう。
NVMeドライブは複数ユーザーからの高負荷なワークロードに最もよく応答するため、これは良いことです。I/Oキューが大きいほどNVMeドライブのパフォーマンスは向上するため、サーバーに最適です。
もちろん、ほとんどの企業はストレージを常に100%の容量で稼働させるわけではありません。つまり、Micronの9100シリーズを、高I/Oワークロードを実行するベアメタルサーバーやハイパーコンバージドソリューションのローカルストレージとして使用することは完全に合理的です。ただし、重要な注意点が1つあります。
NVMe SSDは非常に高速であるため、ストレージサブシステムの設計上の欠陥が露呈したり、ストレージの保守だけでシステムリソースのかなりの割合を占有したりする可能性があります。NVMe SSDを導入するとワークロードは高速化しますが、その効果には限界があります。ワークロードのボトルネックとなる箇所によっては、超高速ローカルストレージの保守コストが高すぎる可能性があります。
構成とワークロードをテストしましょう。NVMeのおかげで、ボトルネックに関する従来の思い込みは消え去り、すべてが再び公平になります。®