NVMe 上的 RAID 陣列

NVMe 上的 RAID 陣列
在本文中,我們將討論組織 RAID 陣列的不同方法,並展示第一個支援 NVMe 的硬體 RAID 控制器。

RAID 技術的所有應用都可以在伺服器領域找到。 在客戶端部分,最常使用的是兩個磁碟上的軟體 RAID0 或 RAID1。

本文將簡要概述 RAID 技術、如何使用三種不同工具建立 RAID 陣列的簡短教程,以及使用每種方法的虛擬磁碟效能比較。

什麼是RAID?

維基百科 給出了RAID技術的全面定義:

的RAID (英語 冗余獨立磁盤陣列 - 獨立(獨立)磁碟冗餘陣列) - 資料虛擬化技術,用於將多個實體磁碟裝置組合成一個邏輯模組,以提高容錯能力和效能。

磁碟陣列的配置和使用的技術取決於所選的 RAID等級。 RAID 等級在規範中標準化 常見 RAID 磁碟資料格式。 它描述了許多 RAID 級別,但最常見的是 RAID0、RAID1、RAID5 和 RAID6。

RAID0條紋,是一種 RAID 級別,它將兩個或多個實體磁碟機組合成一個邏輯磁碟機。 邏輯磁碟的磁碟區等於陣列中所包含的實體磁碟的磁碟區的總和。 此 RAID 等級沒有冗餘,一個磁碟機發生故障可能會導致虛擬磁碟中的所有資料遺失。

Уровень RAID1鏡子,在兩個或更多磁碟上建立相同的資料副本。 虛擬磁碟的大小不超過實體磁碟的最小大小。 只要陣列中至少有一個實體磁碟處於運作狀態,RAID1 虛擬磁碟上的資料就可用。 使用 RAID1 增加了冗餘,但這是一個相當昂貴的解決方案,因為在兩個或多個磁碟的陣列中只有一個磁碟的容量可用。

Уровень RAID5 解決了成本高的問題。 創建RAID5等級的陣列至少需要3塊磁碟,並且該陣列可以抵抗5塊磁碟的故障。 RAID5 中的資料儲存在帶有校驗和的區塊中。 資料盤和校驗盤沒有嚴格的劃分。 RAID1 中的校驗和是對 N-XNUMX 個區塊進行 XOR 運算的結果,每個區塊取自不同的磁碟。

雖然RAID陣列增加了冗餘並提供冗餘,但它們不適合儲存備份。

在簡要介紹了 RAID 陣列的類型之後,您可以繼續學習允許您組裝和使用磁碟陣列的裝置和程式。

RAID 控制器的類型

建立和使用 RAID 陣列有兩種方法:硬體和軟體。 我們將考慮以下解決方案:

  • Linux 軟體 RAID。
  • 英特爾® CPU 上的虛擬 RAID。
  • LSI MegaRAID 9460-8i。

請注意,英特爾® 解決方案在晶片組上運行,這提出了它是硬體解決方案還是軟體解決方案的問題。 例如,VMWare ESXi 虛擬機器管理程式考慮了 VROC 軟體,但並未正式支援它。

Linux 軟體 RAID

Linux 作業系統系列中的軟體 RAID 陣列在客戶端和伺服器領域都是相當常見的解決方案。 創建陣列所需的只是 mdadm 實用程式和一些區塊設備。 Linux 軟體 RAID 對所使用的磁碟機的唯一要求是成為系統可存取的區塊裝置。

沒有設備和軟體成本是這種方法的明顯優勢。 Linux 軟體 RAID 以 CPU 時間為代價組織磁碟陣列。 支援的 RAID 等級清單以及目前磁碟陣列的狀態可以在 mdstat 檔案中查看,該檔案位於 procfs 根目錄中:

root@grindelwald:~# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid10] 
unused devices: <none>

透過連接適當的核心模組來新增對 RAID 層級的支持,例如:

root@grindelwald:~# modprobe raid456
root@grindelwald:~# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] 
unused devices: <none>

所有磁碟陣列操作均透過 mdadm 命令列公用程式執行。 磁碟陣列透過一條命令組裝:

mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/nvme1n1 /dev/nvme2n1

執行該指令後,系統中會出現/dev/md0區塊設備,它代表一個虛擬磁碟。

英特爾® CPU 上的虛擬 RAID

NVMe 上的 RAID 陣列英特爾® VROC 標準硬體金鑰
英特爾® Virtual RAID On CPU (VROC) 是一種基於英特爾® 晶片組創建 RAID 陣列的硬體和軟體技術。 此技術主要適用於支援英特爾® 至強® 可擴充處理器的主機板。 預設情況下,VROC 不可用。 要啟動它,您必須安裝 VROC 硬體許可證金鑰。

標準 VROC 授權可讓您建立具有 0、1 和 10 RAID 等級的磁碟陣列。 高級版本透過 RAID5 支援擴展了此列表。

現代主機板上的英特爾® VROC 技術與英特爾® 磁碟區管理設備 (VMD) 結合使用,為 NVMe 驅動器提供熱插拔功能。

NVMe 上的 RAID 陣列英特爾® VROC 標準許可證 伺服器啟動時,透過設定實用程式配置陣列。 在選項卡上 高級 將出現 Intel® Virtual RAID on CPU 項目,您可以在其中配置磁碟陣列。

NVMe 上的 RAID 陣列在兩個磁碟機上建立 RAID1 陣列
英特爾® VROC 技術自有其王牌。 使用 VROC 建置的磁碟陣列與 Linux Software RAID 相容。 這意味著可以在 /proc/mdstat 中監視陣列的狀態並透過 mdadm 進行管理。 這個「功能」得到了英特爾的官方支援。 在Setup Utility中組裝RAID1後,您可以在作業系統中觀察磁碟機的同步:

root@grindelwald:~# cat /proc/mdstat 
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md126 : active raid1 nvme2n1[1] nvme1n1[0]
      1855832064 blocks super external:/md127/0 [2/2] [UU]
      [>....................]  resync =  1.3% (24207232/1855832064) finish=148.2min speed=205933K/sec
      
md127 : inactive nvme1n1[1](S) nvme2n1[0](S)
      10402 blocks super external:imsm
       
unused devices: <none>

請注意,您無法使用 mdadm 在 VROC 上組裝陣列(組裝後的陣列將是 Linux SW RAID),但您可以更改其中的磁碟並拆卸陣列。

大規模集成電路 MegaRAID 9460-8i

NVMe 上的 RAID 陣列LSI MegaRAID 9460-8i 控制器外觀
RAID 控制器是一個獨立的硬體解決方案。 此控制器僅適用於直接與其連接的驅動器。 此 RAID 控制器支援最多 24 個 NVMe 驅動器。 正是 NVMe 支援使該控制器與許多其他控制器區分開來。

NVMe 上的 RAID 陣列硬體控制器的主選單
使用 UEFI 模式時,控制器設定將整合到設定實用程式中。 與 VROC 相比,硬體控制器選單看起來要複雜得多。

NVMe 上的 RAID 陣列在兩個磁碟上建立 RAID1
解釋如何在硬體控制器上配置磁碟陣列是一個相當微妙的主題,可能是一篇成熟文章的原因。 這裡我們將簡單地限制自己使用預設設定建立 RAID0 和 RAID1。

連接到硬體控制器的磁碟對作業系統不可見。 相反,控制器將所有 RAID 陣列「屏蔽」為 SAS 磁碟機。 連接到控制器但不屬於磁碟陣列的磁碟機將無法被作業系統存取。

root@grindelwald:~# smartctl -i /dev/sda
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-48-generic] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Vendor:               AVAGO
Product:              MR9460-8i
Revision:             5.14
Compliance:           SPC-3
User Capacity:        1,999,844,147,200 bytes [1.99 TB]
Logical block size:   512 bytes
Rotation Rate:        Solid State Device
Logical Unit id:      0x000000000000000000000000000000
Serial number:        00000000000000000000000000000000
Device type:          disk
Local Time is:        Sun Oct 11 16:27:59 2020 MSK
SMART support is:     Unavailable - device lacks SMART capability.

儘管偽裝成 SAS 驅動器,NVMe 陣列仍將以 PCIe 速度運作。 但是,此功能可讓您從舊版 NVMe 啟動。

試驗台

每種組織磁碟陣列的方法都有其自身的物理優點和缺點。 但是使用磁碟陣列時是否存在效能差異?

為了達到最大的公平性,所有測試將在同一台伺服器上進行。 其配置:

  • 2 個英特爾® 至強® 6240;
  • 12 個 DDR4-2666 16 GB;
  • LSI MegaRAID 9460-8i;
  • 英特爾® VROC 標準硬體金鑰;
  • 4 個英特爾® 固態盤 DC P4510 U.2 2TB;
  • 1x 三星 970 EVO Plus M.2 500GB。

測試單元為P4510,一半連接主機板,另一半連接RAID控制器。 M.2 運行的是 Ubuntu 20.04,測試將使用 fio 版本 3.16 運行。

測試

首先,讓我們檢查一下使用磁碟時的延遲。 測試在一個執行緒中執行,區塊大小為4 KB。 每個測試持續 5 分鐘。 在啟動之前,將對應的區塊設備設定為none作為I/O調度器。 fio 指令如下圖所示:

fio --name=test --blocksize=4k --direct=1 --buffered=0 --ioengine=libaio  --iodepth=1 --loops=1000 --runtime=300  --rw=<mode> --filename=<blkdev>

從 fio 結果中我們得到 clat 99.00%。 結果如下表所示。

隨機讀數,μs
隨機記錄,μs

磁盤
112
78

Linux 軟體 RAID、RAID0
113
45

VROC、RAID0
112
46

大規模積體電路、RAID0
122
63

Linux 軟體 RAID、RAID1
113
48

VROC、RAID1
113
45

大規模積體電路、RAID1
128
89

除了存取資料時的延遲之外,我還想查看虛擬磁碟機的效能並將其與實體磁碟的效能進行比較。 運行 fio 的命令:

fio --name=test --blocksize=4k --direct=1 --buffered=0 --ioengine=libaio  --loops=1000 --runtime=300  --iodepth=<threads> --rw=<mode> --filename=<blkdev>

性能是根據 I/O 操作來衡量的。 結果如下表所示。

隨機讀1線程,IOPS
隨機寫入1線程,IOPS
隨機讀128線程,IOPS
隨機寫入128線程,IOPS

磁盤
11300
40700
453000
105000

Linux 軟體 RAID、RAID0
11200
52000
429000
232000

VROC、RAID0
11200
52300
441000
162000

大規模積體電路、RAID0
10900
44200
311000
160000

Linux 軟體 RAID、RAID1
10000
48600
395000
147000

VROC、RAID1
10000
54400
378000
244000

大規模積體電路、RAID1
11000
34300
229000
248000

很容易看出,與軟體解決方案相比,使用硬體控制器會導致延遲增加和效能下降。

結論

使用硬體解決方案從兩個磁碟建立磁碟陣列看起來不合理。 然而,在某些任務中使用 RAID 控制器是合理的。 隨著支援 NVMe 介面的控制器的出現,使用者有機會在其專案中使用更快的 SSD。

NVMe 上的 RAID 陣列

只有註冊用戶才能參與調查。 登入, 請。

您使用 RAID 解決方案嗎?

  • 企業排放佔全球 29,6%是的,硬體解決方案32

  • 企業排放佔全球 50,0%是的,軟體解決方案54

  • 企業排放佔全球 16,7%18號

  • 企業排放佔全球 3,7%無需 RAID4

108 位用戶投票。 14 名用戶棄權。

來源: www.habr.com

添加評論