天天看點

【協定】NVMe over RoCE 初探 SATA、PCIe 接口和AHCI、NVMe 協定

 ​

常見的 SSD 主要分為 SATA和 PCIe 接口,其接口協定對應着 AHCI、NVMe 協定。相比于最原始的 ATA 協定,AHCI 有 2 個特點,第 1 個支援熱插拔,第 2 個支援 NCQ(Native Command Queueing)技術,NCQ 最大深度為 32,則使用 fio 進行性能測試時,其 iodepth不得超過 32;

在 HDD 和 SSD 早期,AHCI 控制器接口協定和 SATA 硬碟傳輸接口足夠滿足系統的性能需求,性能的瓶頸在硬碟端,随着閃存技術的飛速發展,系統的性能瓶頸由下層(硬碟)轉移至上層(接口和協定),SSD 急需要更高效的接口和協定。在此背景下,NVMe橫空出世。

NVMe 全稱為 Non-Volatile Memory Express,是非易失性存儲器标準,運作在PCIe 接口之上的協定标準。

協定的層級關系為:NVMe <---事務層 <--- 資料鍊路層 <--- 實體層,NVMe作為指令層和應用層協定位于最上層,下面 3 層均為 PCIe。

【協定】NVMe over RoCE 初探 SATA、PCIe 接口和AHCI、NVMe 協定

NVMe協定實際是一個應用層的協定,PCIe規範定義了傳輸層(事務層)、資料鍊路層和實體層。

NVMe協定通常情況下是跑在PCIe協定棧上的。

pcie是接口,nvme是協定。

筆記本上pcie接口都是M.2的實體形态,但是M.2固态硬碟不一定都用nvme協定,可能是傳統sata硬碟所用的ahci協定。

現在已經有走PCIe通道的M.2接口了,就需要确認有沒有NVMe協定相關驅動即可,可以進BIOS看一下,有沒有NVMe相關的字眼,比如我的電腦,進到BIOS裡面後,會看到如下:

連結:https://www.zhihu.com/question/263723989/answer/1203340571

【協定】NVMe over RoCE 初探 SATA、PCIe 接口和AHCI、NVMe 協定

下面将從 SATA和 PCIe 接口對比、 AHCI 和 NVMe速率對比、SSD 外形尺寸 3 方面對比 NVMe 和 AHCI的不同之處。

AHCI 和 PCIe 接口對比

<col>

AHCI(SATA/SAS)

NVMe(PCIe)

背景

為HDD而設計

為SSD而設計

最大隊列數量

1

64k

最大隊列深度

32

延遲

6ms

2.8ms

通信

與SATA控制器通信

直接與CPU通信

SATA 和 PCIe 速率對比

目前我們使用 Intel Purley 平台伺服器,即 I/O 接口的速度分别 SATA 3.0 和 PCIe 3.0。預計2021 年中旬 Intel 量産Ice lake Xeon處理器,帶來的變化之一是 I/O 由 PCIe 3.0 切換至 PCIe 4.0,伺服器平台也将由 Purley 切換至 Whitley。

SATA 1.0

SATA 2.0

SATA 3.0

速率

150 MB/s

300 MB/s

600 MB/s

類型

理論單向速率(GT/s)

傳輸方式

實際單向速率(Gbps)

單向帶寬receive or transmit

PCIe 1.0

2.5

8 bit/10 bit

2

250 MB/s

PCIe 2.0

5

4

500 MB/s

PCIe 3.0

8

128 bit/ 130 bit

7.87

985 MB/s(約等于 1GB/s)

PCIe 4.0

16

15.75

2016 MB/s(約等于 2GB/s)

SSD的外形尺寸

【協定】NVMe over RoCE 初探 SATA、PCIe 接口和AHCI、NVMe 協定

NVMe SSD外形接口形态有:PCIe card slot, M.2, and U.2,其中 U.2專為NVMe設計,有2.5英寸/3.5英寸标準尺寸固态硬碟驅動器。

舉個例子,S4510 1.92TB 和 P4610 1.6TB 參數對比

S4510 1.92TB

P4610 1.6TB

光刻類型

64-Layer TLC 3D NAND

&lt;--

接口類型

SATA 3.0 6Gb/s

PCIe 3.1 x4, NVMe

順序讀 (MB/s)

560

3200

順序寫 (MB/s)

510

2080

随機讀(IOPS)

97k

643k

随機寫(IOPS)

35.5k

199k

閑置功耗(W)

1.1

典型功耗(W)

3.2

14

硬體加密

AES 256 bit

從上圖可以直覺看出,P4610 NVMe SSD 性能順序和随機讀/寫性能明顯優于 S4510 SATA SSD,具體資料為:順序讀約 5.7 倍、順序寫 3.7 倍、随機讀約 6.6 倍、随機寫約 5.6 倍。

RDMA(全稱:Remote Direct Memory Access)是一種遠端直接記憶體通路技術,在硬體中實作傳輸層協定,将記憶體/消息原語接口暴露至使用者空間,通過繞過 CPU 和核心網絡協定棧來實作網絡的高吞吐和低延遲。如今大規模部署 RDMA 的方式主要有 Infiniband 和 RoCE,前者主要用于高性能領域,後者用于網際網路公司資料中心較多,本文的實驗環境使用 RoCE。無論哪一種 RDMA 實作方式,都向上提供了統一的操作接口,即 RDMA verbs。

實驗裝置拓撲圖:

【協定】NVMe over RoCE 初探 SATA、PCIe 接口和AHCI、NVMe 協定

驅動選擇為:MLNX_OFED_LINUX-5.2-1.0.4.0-debian10.3-x86_64.tgz

【協定】NVMe over RoCE 初探 SATA、PCIe 接口和AHCI、NVMe 協定

MLNX_OFED driver

配置過程如下:

背景:兩台節點ip分别為:192.168.13.146, 192.168.13.147,使用 ib_send_bw 指令測試(需要指定 ib 裝置名,本例中配置 mlx5_3 裝置通信)。

Initiator 和 target 連接配接方式如下圖所示,左側為initiator,其右為target。在NVMe協定中,NVMe 控制器作為與 initiator 進行溝通的實體。通過确定 PCIe port 、NVMe controller 和NVMe namespace,initiator 端可以通過 discover 和 connect 互聯指令發現 target 端 NVMe namespace 并将其連接配接至本地。

【協定】NVMe over RoCE 初探 SATA、PCIe 接口和AHCI、NVMe 協定

引用至《深入淺出SSD》

NVM over Fabrics 協定定義了使用各種事務層協定來實作 NVMe 功能,其中包括 RDMA、FibreChannel等。相比與普通的 NVMe 指令,NVMe over Fabrics 擴充了 NVMe 标準指令和資料傳輸方式,比如增加了互聯指令,discover,connect、Property Get/Set、Authentication Send/Receive等。connect 指令攜帶 Host NQN、NVM Subsystem NQN 、PCIe port 和 Host identifier 資訊可以連接配接到 target 端 NVMe 控制器。

本文中 NVMe over RoCE 調用關系如下圖所示,核心 nvme_rdma 子產品相當于膠水層,連接配接 rdma stack 和 nvme core接口,即 NVMe 隊列接口可以對接 RDMA 隊列接口,進而調用下層 rdma stack 中 verbs 傳輸接口。

【協定】NVMe over RoCE 初探 SATA、PCIe 接口和AHCI、NVMe 協定

NVMe over RoCE 調用關系

initiator 端,又稱為host/client端,initiator 配置前提:RDMA基礎環境已搭建。通過NVMe 互聯指令探測和連接配接target 端 NVMe SSD 即可。

配置前 initiator 和 target 各有 4塊 NVMe SSD,使用上述 initator 和 target 配置方法,将 target 上 4 塊 NVMe SSD 挂載至 initator,配置後的現象是 initiator 會顯示 8 塊 NVMe SSD,target 仍然是 4 塊。經驗證: target 不可以操作被挂載至 initiator 端的 NVMe SSD。配置狀态如下圖所示:

【協定】NVMe over RoCE 初探 SATA、PCIe 接口和AHCI、NVMe 協定

配置前

【協定】NVMe over RoCE 初探 SATA、PCIe 接口和AHCI、NVMe 協定

配置後

下面對比測試本地 NVMe SSD 和 NVMe over RoCE SSD之間的順序/随機性能,單盤+ext4檔案系統,結論是:通過性能資料表明,NVMe over RoCE方法順序讀性能下降約 14%,随機寫和随機讀性能分别下降約 6% 和 2%,順序寫性能無影響。

I/O類型

Local NVMe SSD

NVMe over RoCE SSD

2035

2031

3374

2889

随機寫 (IOPS)

51.6k

48.4k

随機讀 (IOPS)

571k

557k

注:NVMe 裸盤測試性能正常,挂載檔案系統後性能急劇下降,後續會在檔案系統層面研究如何調優。

測試方法:将 NVMe SSD 全盤順序寫2遍後,使用 fio 測試工具

target 中同 1 個子系統(例如:nvme-subsystem-name)可供多個 initiator 連接配接。target 子系統關聯的硬碟為 /dev/nvme0n1,此時 initiator1 和 initiator2 同時連接配接 target nvme-subsystem-name,挂載分區後的效果是: initiator1 和 initiator2 均可對 /dev/nvme0n1分區正常讀寫,但不會同步,僅有等待 disconnect ,再次 connect 後才會進行資料同步。

問題1:nvmet 子產品無法加載的問題

問題2:在 initiation 端執行 nvme discover 指令時,遇到 ​<code>​Failed to write to /dev/nvme-fabrics: Invalid argument​</code>​報錯

nvme 是 NVMe SSD和 NVMe oF 存儲指令行管理工具,nvme安裝包為 nvme-cli,它依賴Linux核心 IOCTL 系統調用,該調用連接配接使用者層和NVMe驅動層,當使用者執行 nvme commands 時,IOCTL 會将指令參數傳遞至 NVMe common 層,該層代碼解析指令并執行指令,将指令封裝至 capsule ,進而傳遞至 NVMe Submission 隊列,Controller 處理後将 capsule 傳遞至 NVMe Completion 隊列,應用從 Completion 隊列取出 capsule,完成一次通信。

nvme 安裝和常用指令

檢視 NVMe SSD smartctl 資訊

1、刀片僅有 2 個盤位,可以通過 RoCE 連接配接 NVMe SSD 存儲池。

2、讀寫分離場景,可以使用 NVMe over RDMA 搭建 NFS。

3、NVMe SSD建立多個命名空間,通過 RoCE 供多個租戶使用。

【協定】NVMe over RoCE 初探 SATA、PCIe 接口和AHCI、NVMe 協定

建立多個命名空間

繼續閱讀