ストレージ コミュニティ

最終の返信 05-12-2022 解決済み
質問を出す
ベリリウム

NVMe対応ストレージについてのご質問

いつもお世話になっております。
NVMe対応ストレージについて漠然としたイメージでしか
理解できていなく・・・ご質問させてください。
(的外れな質問になっていたら申し訳ありません)


・もともとの話ですいませんが、NVMeはAHCIという
論理インタフェースプロトコルのカテゴリーで使われる場合と、
SATA、SASという接続形態のカテゴリーで使われる場合が
あるように思うのですが、どちらの意味で使うのが
本来正しいのでしょうか?


・SAS接続SSDをNVMe接続SSDにするとどのぐらい速度が
変わるのでしょうか?
SASが12Gbpsで、NVMe PCI Express4は64Gbpsと
いうことで約5.3倍早くなるということなのでしょうか?
つまりUnity内蔵SAS接続SSDとPMAXやPSTOREのNVMe接続SSDへ
のアクセスを考えると、同じ条件化なら後者のほうが
単純に5.3倍速くなると考えてよいのでしょうか。


・ホスト、スイッチ、ストレージすべてをNVMe対応のモデルを
使用し、NVMe over FC Fabricsを構成できる場合なら、
NVMe over FC Fabricsを使用していないSAS構成より、5.3倍速くなるが、
仮にストレージ部分はNVMe 対応SSD接続でも、スイッチや
ホスト側でNVMeが対応していないと結局そこがボトルネックになって、
全体としてみた場合SAS接続のSSDストレージで構成した場合と
同等の速度しか出せない、という理解でよいでしょうか?

 

以上、よろしくお願いいたします。

解決策 (5)

受理された解決策
ブロンズ


・もともとの話ですいませんが、NVMeはAHCIという
論理インタフェースプロトコルのカテゴリーで使われる場合と、
SATA、SASという接続形態のカテゴリーで使われる場合が
あるように思うのですが、どちらの意味で使うのが
本来正しいのでしょうか?

NVMe は、(SAS/SATAに例えると)論理インターフェースであり、接続形態でもあります。
Wikipedia などに掲載されている Linuxカーネルにおけるデータパス画像をご参考にされるのが良いかと思います。

 


・SAS接続SSDをNVMe接続SSDにするとどのぐらい速度が
変わるのでしょうか?
SASが12Gbpsで、NVMe PCI Express4は64Gbpsと
いうことで約5.3倍早くなるということなのでしょうか?
つまりUnity内蔵SAS接続SSDとPMAXやPSTOREのNVMe接続SSDへ
のアクセスを考えると、同じ条件化なら後者のほうが
単純に5.3倍速くなると考えてよいのでしょうか。

プロトコルだけの話をすると、ご認識の通りです。
ただし、NAND Flash は NVMe / PCIe 4.0 x4 (64GT/s) の帯域をフルで使うほど性能は高くないので、現実的には変わってきます。

また、NAND Flash への帯域が大きく確保できたとしても、次はストレージのCPU性能に起因する頭打ちも起きると思われます。

やはり「環境に依って」という文言を使わざる負えないところです。

 


・ホスト、スイッチ、ストレージすべてをNVMe対応のモデルを
使用し、NVMe over FC Fabricsを構成できる場合なら、
NVMe over FC Fabricsを使用していないSAS構成より、5.3倍速くなるが、
仮にストレージ部分はNVMe 対応SSD接続でも、スイッチや
ホスト側でNVMeが対応していないと結局そこがボトルネックになって、
全体としてみた場合SAS接続のSSDストレージで構成した場合と
同等の速度しか出せない、という理解でよいでしょうか?

"NVMe over FC" と "FC"、"NVMe over TCP" と "iSCSI"、それぞれ異なるプロトコルとなります。
よって、概ねお認識の通りとなります。

ただし、ストレージ内の CPU - Disk 間が NVMe接続のため、理論上 SASより低レイテンシ通信可能となり、(かつ Queueの多さ・深さも大きく異なるため)厳密には性能差が出てきます。
(例えるのであれば、SATA SSD のPCと、NVMe SSD のPCとで、どちらの方が反応速度が良いか。に近いと思われます)

元の投稿で解決策を見る

コミュニティ 受理解決策
ベリリウム

 細かい仕様の話などは SNIA 等のサイトを探ると色々資料が出てくるのでそちらをご確認ください。

ざっくりとしたところを以下コメントします。

> ・もともとの話ですいませんが、NVMeはAHCIという論理インタフェースプロトコルのカテゴリーで使われる場合と、
> SATA、SASという接続形態のカテゴリーで使われる場合があるように思うのですが、どちらの意味で使うのが本来正しいのでしょうか?

NVMe は双方の意味合いがあります。AHCI の性能限界もあり開発が始まった NVMe なので当初 NVMHCI という用語もありました。
NVMe はインターフェース、HW、OS、ソフトウェアの通信規格を含んでいます。

■ 接続形状について
従来の SATA や SAS と NVMe SSD は物理的なインターフェースは共通形状(互換形状)の場合が多く、2.5 inch の U.2 の形状や、PC 等でも利用される M.2 の形状のものがあるので、物理的なインターフェース形状はハードウェア側が NVMe をサポートしていれば双方使えます。

"SATA、SASという接続形態のカテゴリー" の観点では、大きな違いは SATA Controller (AHCI) や SAS Controller は SSD・HDD とは別にRAID Controller 等としてサーバーハードウェア側に存在し、SATA、SAS の SSD・HDD はそれら Controller を経由して PCIe に接続されます。

一方、NVMe は各ドライブに NVMe Controller が組み込まれそれぞれに存在し、PCIe に直接接続されより CPU に近い位置で IO が処理されます。

■ IO Queue について
SATA・SAS と NVMe の大きな違いとしてインターフェースが持つ Command Queue と Queue Depth の数が全く違う点です。
規格上、それぞれ

SATA は 1 Command Queue / 32 Queue Depth
SAS は 1 Command Queue / 254 Queue Depth
NVMe は 64k Command Queue / 64k Queue Depth

の Command Queue と Queue Depth が設定されており、NVMe は桁違いに IO 処理上の性能上限が大きくなっています(※ 実際の NVMe の Queue Depth はハードウェアとドライバによって制限が入りますので上記はあくまで規格上の数値)

Queue Depth も深く、IO を処理する Command Queue も多いので大量のデータを捌くのに向いているいるのが NVMe となります。

■ IO プロトコルのシンプルさ

NVMe のブロック IO で利用されるコマンドセット数は最大でも 27 個ですが、
SAS や FC など SCSI コマンドを利用する従来のプロトコルは 144 個の SCSI コマンドが使われるので、Queue と併せて IO 処理で大幅に最適化されているのが NVMe となります。

 

SAS接続SSDをNVMe接続SSDにするとどのぐらい速度が変わるのでしょうか?

単体の SSD ドライブとしての性能は、インターフェースの違いも当然影響しますが SSD の素子、チップセットによって大きく異なるので帯域が増えたからと言って最大性能が出るわけではありません。
また、IO のタイプ(ブロックサイズ、IO 比、並列度、その他)によって求める性能も異なるので、SATA / SAS SSD と NVMe SSD でそれほど性能差が無い場合も当然あります。

 

> ホスト、スイッチ、ストレージすべてをNVMe対応のモデルを使用し、NVMe over FC Fabricsを構成できる場合なら~~

これも単体の NVMe SSD のメリットが活かせるかどうかと同じくで、Ent to End で NVMe で処理できる場合とそうでない場合で(限界値で)大きな性能差はあると思います。

どの様な IO が想定されるかでどこがボトルネックになるかも異なるので要件によって変わるとご理解ください。

元の投稿で解決策を見る

コミュニティ 受理解決策
アルゲンティウム

@tanboi_3 さん

すでに他のみなさんが書いてくださっているのでもうコメントすることはありませんが、一点だけ・・・

仮にストレージ部分はNVMe 対応SSD接続でも、スイッチや
ホスト側でNVMeが対応していないと結局そこがボトルネックになって、
全体としてみた場合SAS接続のSSDストレージで構成した場合と
同等の速度しか出せない、という理解でよいでしょうか?

この場合はボトルネックとかではなく、接続できません。

NVMe over Fabrics を使う場合、ホストからストレージまで End to End で NVMe に対応している必要があります。

NVMe の世界では、IOするにも SCSIコマンドはもう利用せず、NVMeのコマンドを使います。やり取りするプロトコルや利用するキューなど諸々もNVMeで規定されています。そういった意味でホストOSがNVMe(あるいは NVMe over Fabrics) に対応していなければ、そもそも使えません。

間のネットワークやスイッチなどは、微妙なところではあります。特に NVMeをしゃべらないので。。。iSCSIは普通のLANでいいですよ、という言い方をしたりしますが、NVMe over TCPなんかもそれと同じになります。

元の投稿で解決策を見る

コミュニティ 受理解決策

K.Satoさん、kwmtさん、miuramakさん


皆様ご回答ありがとうございます。
詳細についてはそれぞれの専門のドキュメントを
確認するとしまして、皆様のご回答でイメージが
つかめてきました。


NVMeは論理インタフェースの意味もあり、接続形態でも
あるとのことなので、話にでてきたときはどちらの
意味合いで使用されているのかを
意識する必要があるな、と思いました。


あとNVMeの速度に起因する原因や環境についても例を
教えていただきありがとうございます。勉強になりました。


すいません、1つまだ私が理解できていないところで
1点確認させていただきたいのですが、
miuramakさんの仰られている以下の部分で
「NVMe の世界では、IOするにも SCSIコマンドは
もう利用せず、NVMeのコマンドを使います。」


ホストからストレージまで End to End で NVMe に
対応していてNVMe over Fabricsの設定をすると、
IOについてNVMeコマンドでやりとりする=kwmtさんが
仰れれているIO QueseやシンプルさをSAN全体で
恩恵を受けれる、ということだと思いますが、


ホスト側はNVMeに対応しておらず、ストレージ部分だけを
NVMeストレージ(例えばPowerStore)を導入した場合だと、
PowerStoreとホストとのIOはすべて従来通りSCSIコマンドに
なるのでしょうか?
PowerStore内(CPU - Disk 間?)はNVMeコマンドで
通信して、ホスト側と通信するときは何らかの
プロトコル変換が行われてSCSIコマンドで通信する、
というような形になるのでしょうか?

 

以上、よろしくお願いいたします。

元の投稿で解決策を見る

コミュニティ 受理解決策


ホスト側はNVMeに対応しておらず、ストレージ部分だけを
NVMeストレージ(例えばPowerStore)を導入した場合だと、
PowerStoreとホストとのIOはすべて従来通りSCSIコマンドに
なるのでしょうか?
PowerStore内(CPU - Disk 間?)はNVMeコマンドで
通信して、ホスト側と通信するときは何らかの
プロトコル変換が行われてSCSIコマンドで通信する、
というような形になるのでしょうか?

はい、ご認識の通りです。

「ホスト→iSCSI/FC(非NVMe)接続→NVMeストレージ」
この場合は、ホストからは SCSI コマンドが発行され、受け取ったストレージ内部で NVMeに変換されます。

他社も含め、NVMe over Fabrics 非対応で・NVMe SSD採用ストレージ では全てこの形態になります。
PowerStore/PowerMAX のような NVMe over Fabrics対応のストレージでも、iSCSI/FCのような従来の接続形態の場合は同様になります。

なお、iSCSIは文字の通り SCSI コマンドが TCP/IP で包まれている仕様で、
FC も内部では SCSI コマンドが FCのプロトコルで包まれています。
コチラに関しては、他社のフォーラムで恐縮ですが、こちらのURLにある画像が参考になるかと思います。
https://forum.huawei.com/enterprise/en/nvme-based-dorado-v3-and-sas-based-dorado-v3/thread/596534-89...

[余談]
やはり、次世代ディスク(NAND Flashなど)を用いる上で、発行時に Flash に最適化されたコマンド(NVMe)で動作することが無駄のない動作となり、理想的です。
SAS/SATA, AHCI は HDD のために作られたプロトコルであり、SAS/SATA SSD は(ある意味) NAND Flash が擬態化して利用されているもの、と念頭に置いていただくことでも、理解が深まるかもしれません。
(HDDはランダムI/Oが苦手なので AHCI内で I/O Queueの入替え処理がある。これは NAND Flash を利用する上で不要な処理である。ということなど)

元の投稿で解決策を見る

コミュニティ 受理解決策
返答(返信) (6)
ブロンズ


・もともとの話ですいませんが、NVMeはAHCIという
論理インタフェースプロトコルのカテゴリーで使われる場合と、
SATA、SASという接続形態のカテゴリーで使われる場合が
あるように思うのですが、どちらの意味で使うのが
本来正しいのでしょうか?

NVMe は、(SAS/SATAに例えると)論理インターフェースであり、接続形態でもあります。
Wikipedia などに掲載されている Linuxカーネルにおけるデータパス画像をご参考にされるのが良いかと思います。

 


・SAS接続SSDをNVMe接続SSDにするとどのぐらい速度が
変わるのでしょうか?
SASが12Gbpsで、NVMe PCI Express4は64Gbpsと
いうことで約5.3倍早くなるということなのでしょうか?
つまりUnity内蔵SAS接続SSDとPMAXやPSTOREのNVMe接続SSDへ
のアクセスを考えると、同じ条件化なら後者のほうが
単純に5.3倍速くなると考えてよいのでしょうか。

プロトコルだけの話をすると、ご認識の通りです。
ただし、NAND Flash は NVMe / PCIe 4.0 x4 (64GT/s) の帯域をフルで使うほど性能は高くないので、現実的には変わってきます。

また、NAND Flash への帯域が大きく確保できたとしても、次はストレージのCPU性能に起因する頭打ちも起きると思われます。

やはり「環境に依って」という文言を使わざる負えないところです。

 


・ホスト、スイッチ、ストレージすべてをNVMe対応のモデルを
使用し、NVMe over FC Fabricsを構成できる場合なら、
NVMe over FC Fabricsを使用していないSAS構成より、5.3倍速くなるが、
仮にストレージ部分はNVMe 対応SSD接続でも、スイッチや
ホスト側でNVMeが対応していないと結局そこがボトルネックになって、
全体としてみた場合SAS接続のSSDストレージで構成した場合と
同等の速度しか出せない、という理解でよいでしょうか?

"NVMe over FC" と "FC"、"NVMe over TCP" と "iSCSI"、それぞれ異なるプロトコルとなります。
よって、概ねお認識の通りとなります。

ただし、ストレージ内の CPU - Disk 間が NVMe接続のため、理論上 SASより低レイテンシ通信可能となり、(かつ Queueの多さ・深さも大きく異なるため)厳密には性能差が出てきます。
(例えるのであれば、SATA SSD のPCと、NVMe SSD のPCとで、どちらの方が反応速度が良いか。に近いと思われます)

コミュニティ 受理解決策
ベリリウム

 細かい仕様の話などは SNIA 等のサイトを探ると色々資料が出てくるのでそちらをご確認ください。

ざっくりとしたところを以下コメントします。

> ・もともとの話ですいませんが、NVMeはAHCIという論理インタフェースプロトコルのカテゴリーで使われる場合と、
> SATA、SASという接続形態のカテゴリーで使われる場合があるように思うのですが、どちらの意味で使うのが本来正しいのでしょうか?

NVMe は双方の意味合いがあります。AHCI の性能限界もあり開発が始まった NVMe なので当初 NVMHCI という用語もありました。
NVMe はインターフェース、HW、OS、ソフトウェアの通信規格を含んでいます。

■ 接続形状について
従来の SATA や SAS と NVMe SSD は物理的なインターフェースは共通形状(互換形状)の場合が多く、2.5 inch の U.2 の形状や、PC 等でも利用される M.2 の形状のものがあるので、物理的なインターフェース形状はハードウェア側が NVMe をサポートしていれば双方使えます。

"SATA、SASという接続形態のカテゴリー" の観点では、大きな違いは SATA Controller (AHCI) や SAS Controller は SSD・HDD とは別にRAID Controller 等としてサーバーハードウェア側に存在し、SATA、SAS の SSD・HDD はそれら Controller を経由して PCIe に接続されます。

一方、NVMe は各ドライブに NVMe Controller が組み込まれそれぞれに存在し、PCIe に直接接続されより CPU に近い位置で IO が処理されます。

■ IO Queue について
SATA・SAS と NVMe の大きな違いとしてインターフェースが持つ Command Queue と Queue Depth の数が全く違う点です。
規格上、それぞれ

SATA は 1 Command Queue / 32 Queue Depth
SAS は 1 Command Queue / 254 Queue Depth
NVMe は 64k Command Queue / 64k Queue Depth

の Command Queue と Queue Depth が設定されており、NVMe は桁違いに IO 処理上の性能上限が大きくなっています(※ 実際の NVMe の Queue Depth はハードウェアとドライバによって制限が入りますので上記はあくまで規格上の数値)

Queue Depth も深く、IO を処理する Command Queue も多いので大量のデータを捌くのに向いているいるのが NVMe となります。

■ IO プロトコルのシンプルさ

NVMe のブロック IO で利用されるコマンドセット数は最大でも 27 個ですが、
SAS や FC など SCSI コマンドを利用する従来のプロトコルは 144 個の SCSI コマンドが使われるので、Queue と併せて IO 処理で大幅に最適化されているのが NVMe となります。

 

SAS接続SSDをNVMe接続SSDにするとどのぐらい速度が変わるのでしょうか?

単体の SSD ドライブとしての性能は、インターフェースの違いも当然影響しますが SSD の素子、チップセットによって大きく異なるので帯域が増えたからと言って最大性能が出るわけではありません。
また、IO のタイプ(ブロックサイズ、IO 比、並列度、その他)によって求める性能も異なるので、SATA / SAS SSD と NVMe SSD でそれほど性能差が無い場合も当然あります。

 

> ホスト、スイッチ、ストレージすべてをNVMe対応のモデルを使用し、NVMe over FC Fabricsを構成できる場合なら~~

これも単体の NVMe SSD のメリットが活かせるかどうかと同じくで、Ent to End で NVMe で処理できる場合とそうでない場合で(限界値で)大きな性能差はあると思います。

どの様な IO が想定されるかでどこがボトルネックになるかも異なるので要件によって変わるとご理解ください。

コミュニティ 受理解決策
アルゲンティウム

@tanboi_3 さん

すでに他のみなさんが書いてくださっているのでもうコメントすることはありませんが、一点だけ・・・

仮にストレージ部分はNVMe 対応SSD接続でも、スイッチや
ホスト側でNVMeが対応していないと結局そこがボトルネックになって、
全体としてみた場合SAS接続のSSDストレージで構成した場合と
同等の速度しか出せない、という理解でよいでしょうか?

この場合はボトルネックとかではなく、接続できません。

NVMe over Fabrics を使う場合、ホストからストレージまで End to End で NVMe に対応している必要があります。

NVMe の世界では、IOするにも SCSIコマンドはもう利用せず、NVMeのコマンドを使います。やり取りするプロトコルや利用するキューなど諸々もNVMeで規定されています。そういった意味でホストOSがNVMe(あるいは NVMe over Fabrics) に対応していなければ、そもそも使えません。

間のネットワークやスイッチなどは、微妙なところではあります。特に NVMeをしゃべらないので。。。iSCSIは普通のLANでいいですよ、という言い方をしたりしますが、NVMe over TCPなんかもそれと同じになります。

コミュニティ 受理解決策

K.Satoさん、kwmtさん、miuramakさん


皆様ご回答ありがとうございます。
詳細についてはそれぞれの専門のドキュメントを
確認するとしまして、皆様のご回答でイメージが
つかめてきました。


NVMeは論理インタフェースの意味もあり、接続形態でも
あるとのことなので、話にでてきたときはどちらの
意味合いで使用されているのかを
意識する必要があるな、と思いました。


あとNVMeの速度に起因する原因や環境についても例を
教えていただきありがとうございます。勉強になりました。


すいません、1つまだ私が理解できていないところで
1点確認させていただきたいのですが、
miuramakさんの仰られている以下の部分で
「NVMe の世界では、IOするにも SCSIコマンドは
もう利用せず、NVMeのコマンドを使います。」


ホストからストレージまで End to End で NVMe に
対応していてNVMe over Fabricsの設定をすると、
IOについてNVMeコマンドでやりとりする=kwmtさんが
仰れれているIO QueseやシンプルさをSAN全体で
恩恵を受けれる、ということだと思いますが、


ホスト側はNVMeに対応しておらず、ストレージ部分だけを
NVMeストレージ(例えばPowerStore)を導入した場合だと、
PowerStoreとホストとのIOはすべて従来通りSCSIコマンドに
なるのでしょうか?
PowerStore内(CPU - Disk 間?)はNVMeコマンドで
通信して、ホスト側と通信するときは何らかの
プロトコル変換が行われてSCSIコマンドで通信する、
というような形になるのでしょうか?

 

以上、よろしくお願いいたします。

コミュニティ 受理解決策


ホスト側はNVMeに対応しておらず、ストレージ部分だけを
NVMeストレージ(例えばPowerStore)を導入した場合だと、
PowerStoreとホストとのIOはすべて従来通りSCSIコマンドに
なるのでしょうか?
PowerStore内(CPU - Disk 間?)はNVMeコマンドで
通信して、ホスト側と通信するときは何らかの
プロトコル変換が行われてSCSIコマンドで通信する、
というような形になるのでしょうか?

はい、ご認識の通りです。

「ホスト→iSCSI/FC(非NVMe)接続→NVMeストレージ」
この場合は、ホストからは SCSI コマンドが発行され、受け取ったストレージ内部で NVMeに変換されます。

他社も含め、NVMe over Fabrics 非対応で・NVMe SSD採用ストレージ では全てこの形態になります。
PowerStore/PowerMAX のような NVMe over Fabrics対応のストレージでも、iSCSI/FCのような従来の接続形態の場合は同様になります。

なお、iSCSIは文字の通り SCSI コマンドが TCP/IP で包まれている仕様で、
FC も内部では SCSI コマンドが FCのプロトコルで包まれています。
コチラに関しては、他社のフォーラムで恐縮ですが、こちらのURLにある画像が参考になるかと思います。
https://forum.huawei.com/enterprise/en/nvme-based-dorado-v3-and-sas-based-dorado-v3/thread/596534-89...

[余談]
やはり、次世代ディスク(NAND Flashなど)を用いる上で、発行時に Flash に最適化されたコマンド(NVMe)で動作することが無駄のない動作となり、理想的です。
SAS/SATA, AHCI は HDD のために作られたプロトコルであり、SAS/SATA SSD は(ある意味) NAND Flash が擬態化して利用されているもの、と念頭に置いていただくことでも、理解が深まるかもしれません。
(HDDはランダムI/Oが苦手なので AHCI内で I/O Queueの入替え処理がある。これは NAND Flash を利用する上で不要な処理である。ということなど)

コミュニティ 受理解決策

K.Satoさん


ご返信ありがとうございます。
そうであれば確かにNVMe over Fabricsにすることで
初めてSSDの真価が発揮されるというのも理解できます。
たいぶ理解が深まりました。ありがとうございます。

トップコントリビューター
最新のソリューション