uchan note

プログラミングや電子工作の話題を書きます

SSD 周りの用語まとめ(M.2,PCIe,SATA,AHCI,NVMe)

SSD 関連の用語で違いがよく分からなかったりしませんか? 特に,M.2,PCIe(PCI Express),SATASerial ATA),AHCI,NVMe(NVM Express)などの用語が飛び交っていて,筆者も少しあいまいだったので,今回調査してまとめてみました.

概要

  • M.2 は「フォームファクタ」と言って,コネクタの物理的な形の規格名です.
  • PCIe と SATA はどちらもシリアル通信を用いる周辺機器のインターフェース規格です.
  • AHCI と NVMe はどちらもホストが SSD を制御するためのコントローラの規格です.

簡単にまとめると上記の通りです.以下,もう少し詳細に説明していきます.

M.2

M.2 は SSD などの周辺機器をマザーボードに取り付けるためのコネクタ形状の規格です. 単なるコネクタ形状の規格であり,ホスト側との通信インターフェースは M.2 規格のスコープ外です. 現在のところ PCIe や SATA,USB,I2C などの,シリアル通信インターフェースがいくつかサポートされています(M.2 の切り欠きの位置で,どれに対応する製品なのかを見分けることになっているらしい).

PCIe と SATA

どちらもシリアル通信の規格です. 通信路自体の規格であり,また機器のインターフェースについての規格でもあります. ですから,「この機器のインターフェースは PCIe(もしくは SATA)である」と表現できます.

PCIe は汎用的なバス規格であり,SSD に限らずさまざまな機器が PCIe 規格に準拠しています.

PCIe は 1 レーンあたりの通信帯域が決められていて,それをいくつか束ねることにより,最大 x16 まで通信帯域を稼ぐことができる仕様です. 最近の SSD は 4GB/s(約 40Gbps)程度の読み取り速度がある製品も存在します. 最新規格の PCI Express 4.0 であっても複数のレーンを必要とする程度には SSD の性能が高くなってきています.

一方で SATA はもともと,HDD を接続するための ATA という規格を引き継いで生まれた規格です. SATA の最新規格でも通信帯域は 6Gbps であり,PCIe に比べると遅めの規格です. さらに SATA は PCIe のように複数本束ねることはありません(SATA Express という規格では 2 本束ねることで増速していますが,PCIe のように自由に本数を増やすことはできません)ので,PCIe に比べて速度面では不利です.

HDD の時代は HDD が低速な機器だったため,6Gbps も速度が出る SATA で何も問題はありませんでした. これは SSD が出て間もないころも同じ状況でした.

しかし SSD の性能が飛躍的に上がったことで,すぐに 6Gbps では帯域が足りなくなりました. このことが,SSD を選ぼうとしたときに SATA や PCIe といった似たような用語が登場する要因となっています.

AHCI と NVMe

どちらもホスト側と SSD(や HDD)の橋渡しを行う,ホストコントローラの規格です.

AHCI はコントローラと機器を SATA で接続することを前提とした規格です. 混乱しやすいですが,AHCI とホストコントローラ間は PCIe で接続されます.

ホスト(パソコン) --[PCIe]--> AHCI ホストコントローラ --[SATA]--> SSD1
                                                   |--[SATA]--> SSD2

AHCISATA を利用する関係で,規格上の最大通信速度は 6Gbps です. 規格上の,というのは,AHCI にはそのホストコントローラが対応する最大の速度を表示する読み取り専用のレジスタ(Interface Speed Support)があり,そこに設定できる値として Gen 1,Gen 2,Gen 3 しか決められていないのです. 最も速い Gen 3 が 6Gbps ですので,AHCI の規格上の最大通信速度は 6Gbps だ,と言えます.

一方で NVMe は,コントローラが機器に直接乗った構造になっています.

ホスト(パソコン) --[PCIe]--> SSD(NVMe コントローラ付き)

NVMe コントローラと SSD 間は内部的な配線で接続されているため,コントローラと SSD 間の通信速度には上限がなく,SSD の性能と PCIe の性能の遅い方に律速されます.

AHCI で 6Gbps を超える謎

AHCI は実績があり多くの OS がサポートしていますから,互換性の面では有利です. 少なくとも,2016 年の段階では有利だったようです.

NVMeとAHCIの違いを理解する ~SSDのインターフェースを理解する 3~ では, 「Samsung SM951(512GBモデル)のNVMe版とAHCI版のスペックの違い」として,同じ半導体メモリを使っていながらコントローラが異なる製品を紹介しています. スペックを比較した表を見ると,NVMe 版,AHCI 版ともにシーケンシャルリードが 2150MB/s となっています.ビットレートにすると大体 20Gbps 程度ですね.

NVMe 版は理解ができます.PCIe は何レーンか束ねることで 20Gbps 以上の速度を稼ぐことができます. 一方,AHCI 版は規格上の上限値よりだいぶ速い値が出ており,謎です. SATA を使う以上 6Gbps を超えることはできないはずです.

そのような製品の構成を推測してみると,おそらく次のようになっていると考えられます.

ホスト(パソコン) --[PCIe]--> SSD(AHCI ホストコントローラ付き)

AHCI ホストコントローラを SSD 機器に乗せてしまう,というのがミソです. そうすれば SATA ケーブルを使わず AHCISSD を直接配線できますから,物理的な通信速度が 6Gbps に制限されることはありません. AHCI の最大通信速度の表示はとりあえず「6Gbps」ということにしておいて,実際にはそれより速い速度で通信してしまえばいいのです.

私が検証したわけではありませんが,記憶装置用のベンチマークソフトを長年開発している hiyohiyo 氏によると, 実際には 6Gbps を大きく超える速度で読み書きができるが,機器に問い合わせを行うと「SATA/600」(6Gbps のこと)と返答が来るのだそうです.

AHCI で制御できるにも関わらず 6Gbps より速い読み書きができる SSD は,NVMe コントローラ用のドライバが普及していない過渡期には重宝したようですね. ただ,AHCI は互換性で有利だったのですが,AHCI の設計がレイテンシの大きな HDD に最適化されており,並列処理をすることで速度を稼ぐ NVMe には合わなかったため,2018 年現在では NVMe が普及しています.

参考資料