17.1 綜覽 #
NVM Express (NVMe) 是有關存取非揮發性儲存 (通常是 SSD 磁碟) 的介面標準。與 SATA 相比,NVMe 支援的速度要高得多,並且延遲更低。
NVMe over Fabric 是用於透過不同網路結構存取 NVMe 儲存的一種架構。這些網路結構有 RDMA、TCP 或基於光纖通道的 NVMe (FC-NVMe) 等。NVMe over Fabric 的作用類似於 iSCSI。為提高容錯能力,NVMe over Fabric 內建了多重路徑支援。NVMe over Fabric 多重路徑不是以傳統 DM 多重路徑為基礎。
NVMe 主機是連接到 NVMe 目標的機器。NVMe 目標是共用其 NVMe 區塊裝置的機器。
SUSE Linux Enterprise Server 15 SP5 支援 NVMe。提供了可用於 NVMe 區塊儲存及 NVMe over Fabric 目標和主機的核心模組。
若要查看您的硬體是否有任何特殊考量,請參閱第 17.4 節 「特殊硬體組態」。
17.2 設定 NVMe over Fabric 主機 #
若要使用 NVMe over Fabric,必須在目標上使用支援的網路方法。支援的方法包括基於光纖通道的 NVMe、TCP 和 RDMA。以下小節介紹如何將主機連接到 NVMe 目標。
17.2.1 安裝指令列用戶端 #
若要使用 NVMe over Fabric,需要安裝 nvme
指令列工具。請使用 zypper
安裝該工具:
>
sudo
zypper in nvme-cli
使用 nvme --help
可列出所有可用的子指令。我們提供了 nvme
子指令的手冊頁。執行 man
nvme-SUBCOMMAND
可查閱相關的手冊頁。例如,若要檢視 discover
子指令的手冊頁,請執行 man nvme-discover
。
17.2.2 探查 NVMe over Fabric 目標 #
若要列出 NVMe over Fabric 目標上的可用 NVMe 子系統,您需有探查控制器位址和服務 ID。
>
sudo
nvme discover -t TRANSPORT -a DISCOVERY_CONTROLLER_ADDRESS -s SERVICE_ID
以基礎傳輸媒體 (loop
、rdma
、tcp
或 fc
) 取代 TRANSPORT。以探查控制器的位址取代 DISCOVERY_CONTROLLER_ADDRESS。對於 RDMA 和 TCP,此位址應是 IPv4 位址。以傳輸服務 ID 取代 SERVICE_ID。如果服務基於 IP (例如 RDMA 或 TCP),則服務 ID 指定連接埠號碼。對於光纖通道,不需要提供服務 ID。
NVMe 主機只會看到它們有權連接的子系統。
範例:
>
sudo
nvme discover -t tcp -a 10.0.0.3 -s 4420
對於 FC,其範例如下所示:
>
sudo
nvme discover --transport=fc \ --traddr=nn-0x201700a09890f5bf:pn-0x201900a09890f5bf \ --host-traddr=nn-0x200000109b579ef6:pn-0x100000109b579ef6
如需詳細資訊,請參閱man nvme-discover
。
17.2.3 連接 NVMe over Fabric 目標 #
識別 NVMe 子系統後,可以使用 nvme connect
指令來連接它。
>
sudo
nvme connect -t transport -a DISCOVERY_CONTROLLER_ADDRESS -s SERVICE_ID -n SUBSYSTEM_NQN
以基礎傳輸媒體 (loop
、rdma
、tcp
或 fc
) 取代 TRANSPORT。以探查控制器的位址取代 DISCOVERY_CONTROLLER_ADDRESS。對於 RDMA 和 TCP,此位址應是 IPv4 位址。以傳輸服務 ID 取代 SERVICE_ID。如果服務基於 IP (例如 RDMA 或 TCP),則此 ID 指定連接埠號碼。以探查指令找到的所需子系統的 NVMe 合格名稱取代 SUBSYSTEM_NQN。NQN 是 NVMe 合格名稱 (NVMe Qualified Name) 的縮寫。NQN 必須是唯一的。
範例:
>
sudo
nvme connect -t tcp -a 10.0.0.3 -s 4420 -n nqn.2014-08.com.example:nvme:nvm-subsystem-sn-d78432
對於 FC,其範例如下所示:
>
sudo
nvme connect --transport=fc \ --traddr=nn-0x201700a09890f5bf:pn-0x201900a09890f5bf \ --host-traddr=nn-0x200000109b579ef6:pn-0x100000109b579ef6 \ --nqn=nqn.2014-08.org.nvmexpress:uuid:1a9e23dd-466e-45ca-9f43-a29aaf47cb21
或者,使用 nvme connect-all
連接探查到的所有名稱空間。如需進階用法,請參閱 man
nvme-connect
和 man nvme-connect-all
。
如果發生路徑遺失,NVMe 子系統會嘗試重新連接一段時間,該時間由 ctrl-loss-tmo
指令的 nvme connect
選項定義。在這段時間 (預設值為 600s) 過後,將移除該路徑並通知區塊層 (檔案系統) 的上層。依預設,隨後會以唯讀模式掛接檔案系統,這種行為通常不符合預期。因此,建議設定 ctrl-loss-tmo
選項,使 NVMe 子系統無限制地持續嘗試重新連接。為此,請執行以下指令:
>
sudo
nvme connect --ctrl-loss-tmo=-1
若要使 NVMe over Fabric 子系統在開機時可用,請在主機上建立一個 /etc/nvme/discovery.conf
檔案,並在其中包含傳遞給 discover
指令的參數 (請參閱第 17.2.2 節 「探查 NVMe over Fabric 目標」)。例如,如果您如下所示使用 discover
指令:
>
sudo
nvme discover -t tcp -a 10.0.0.3 -s 4420
請將 discover
指令的參數新增至 /etc/nvme/discovery.conf
檔案:
echo "-t tcp -a 10.0.0.3 -s 4420" | sudo tee -a /etc/nvme/discovery.conf
然後啟用
服務:>
sudo
systemctl enable nvmf-autoconnect.service
17.2.4 多重路徑 #
預設會啟用 NVMe 原生多重路徑。如果在控制器身分設定中設定了 CMIC
選項,則 NVMe 堆疊預設會將 NVMe 磁碟機識別為多重路徑裝置。
若要管理多重路徑,您可以使用以下指令:
nvme list-subsys
列印多重路徑裝置的配置。
multipath -ll
指令有相容模式,可顯示 NVMe 多重路徑裝置。請記住,您需要啟用
enable_foreign
選項才能使用該指令。如需詳細資訊,請參閱第 18.13 節 「其他選項」。nvme-core.multipath=N
當做為開機參數新增該選項時,將停用 NVMe 原生多重路徑。
iostat
iostat
指令可能不會顯示 nvme list-subsys
列出的所有控制器。依預設,iostat
會過濾掉所有沒有 I/O 的區塊裝置。若要使 iostat
顯示所有裝置,請使用:
iostat -p ALL
17.3 設定 NVMe over Fabric 目標 #
17.3.1 安裝指令列用戶端 #
若要設定 NVMe over Fabric 目標,需要安裝 nvmetcli
指令列工具。請使用 zypper
安裝該工具:
>
sudo
zypper in nvmetcli
nvmetcli
上提供了 http://git.infradead.org/users/hch/nvmetcli.git/blob_plain/HEAD:/Documentation/nvmetcli.txt 的最新文件。
17.3.2 組態步驟 #
下面的程序舉例說明如何設定 NVMe over Fabric 目標。
組態儲存在樹狀結構中。使用 cd
指令可進行導覽。使用 ls
可列出物件。您可以使用 create
建立新物件。
啟動
nvmetcli
互動式外圍程序:>
sudo
nvmetcli
建立新連接埠:
(nvmetcli)>
cd ports
(nvmetcli)>
create 1
(nvmetcli)>
ls 1/
o- 1 o- referrals o- subsystems建立 NVMe 子系統:
(nvmetcli)>
cd /subsystems
(nvmetcli)>
create nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82
(nvmetcli)>
cd nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82/
(nvmetcli)>
ls
o- nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82 o- allowed_hosts o- namespaces建立新的名稱空間,並在其中設定 NVMe 裝置:
(nvmetcli)>
cd namespaces
(nvmetcli)>
create 1
(nvmetcli)>
cd 1
(nvmetcli)>
set device path=/dev/nvme0n1
Parameter path is now '/dev/nvme0n1'.啟用先前建立的名稱空間:
(nvmetcli)>
cd ..
(nvmetcli)>
enable
The Namespace has been enabled.顯示建立的名稱空間:
(nvmetcli)>
cd ..
(nvmetcli)>
ls
o- nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82 o- allowed_hosts o- namespaces o- 1允許所有主機使用該子系統。只有在安全環境中才可這樣做。
(nvmetcli)>
set attr allow_any_host=1
Parameter allow_any_host is now '1'.或者,可以只允許特定的主機建立連接:
(nvmetcli)>
cd nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82/allowed_hosts/
(nvmetcli)>
create hostnqn
列出建立的所有物件:
(nvmetcli)>
cd /
(nvmetcli)>
ls
o- / o- hosts o- ports | o- 1 | o- referrals | o- subsystems o- subsystems o- nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82 o- allowed_hosts o- namespaces o- 1使目標可透過 TCP 使用。為 RDMA 使用
trtype=rdma
:(nvmetcli)>
cd ports/1/
(nvmetcli)>
set addr adrfam=ipv4 trtype=tcp traddr=10.0.0.3 trsvcid=4420
Parameter trtype is now 'tcp'. Parameter adrfam is now 'ipv4'. Parameter trsvcid is now '4420'. Parameter traddr is now '10.0.0.3'.或者,使目標可透過光纖通道使用:
(nvmetcli)>
cd ports/1/
(nvmetcli)>
set addr adrfam=fc trtype=fc traddr=nn-0x1000000044001123:pn-0x2000000055001123 trsvcid=none
將子系統連結至該連接埠:
(nvmetcli)>
cd /ports/1/subsystems
(nvmetcli)>
create nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82
現在,可以使用
dmesg
驗證該連接埠是否已啟用:#
dmesg ... [ 257.872084] nvmet_tcp: enabling port 1 (10.0.0.3:4420)
17.3.3 備份和還原目標組態 #
可使用以下指令在 JSON 檔案中儲存目標組態:
>
sudo
nvmetcli
(nvmetcli)>
saveconfig nvme-target-backup.json
若要還原組態,請使用:
(nvmetcli)>
restore nvme-target-backup.json
您還可以抹除目前組態:
(nvmetcli)>
clear
17.4 特殊硬體組態 #
17.4.1 綜覽 #
某些硬體需要特殊的組態才能正常運作。請瀏覽以下章節的標題,確定您是否使用了所提到的任何裝置或廠商。
17.4.2 Broadcom #
如果您在使用 Broadcom Emulex LightPulse Fibre Channel SCSI 驅動程式,請在 lpfc
模組的目標和主機中新增核心組態參數:
>
sudo
echo "options lpfc lpfc_enable_fc4_type=3" > /etc/modprobe.d/lpfc.conf
確定 Broadcom 介面卡韌體的版本至少為 11.4.204.33。另請確定已安裝最新版本的 nvme-cli、nvmetcli 和核心。
若要啟用光纖通道連接埠做為 NVMe 目標,需要額外設定一個模組參數:lpfc_enable_nvmet=
COMMA_SEPARATED_WWPNS
。請輸入帶有前置 0x
的 WWPN,例如 lpfc_enable_nvmet=0x2000000055001122,0x2000000055003344
。系統只會為目標模式設定列出的 WWPN。可將光纖通道連接埠設定為目標或啟動器。
17.4.3 Marvell #
QLE269x 和 QLE27xx 介面卡上都支援 FC-NVMe。Marvell® QLogic® QLA2xxx 光纖通道驅動程式中預設會啟用 FC-NVMe 支援。
若要確認是否已啟用 NVMe,請執行以下指令:
>
cat /sys/module/qla2xxx/parameters/ql2xnvmeenable
如果顯示 1
,則表示 NVMe 已啟用,顯示 0
表示 NVMe 已停用。
然後,檢查以下指令的輸出,確定 Marvell 介面卡韌體的版本不早於 8.08.204:
>
cat /sys/class/scsi_host/host0/fw_version
最後,確定已安裝適用於 SUSE Linux Enterprise Server 的最新版 nvme-cli、QConvergeConsoleCLI 和核心。例如,您可以執行
#
zypper lu && zypper pchk
來檢查更新和修補程式。
如需安裝的更多詳細資料,請參閱下列 Marvell 使用者指南中的 FC-NVMe 部分:
17.5 更多資訊 #
如需 nvme
指令各功能的詳細資料,請參閱 nvme nvme-help
。
以下連結提供了 NVMe 和 NVMe over Fabric 的簡介: