spdk-nvmf指南
spdk-nvmf指南
- 概述
- 名詞解釋
- nvme over fabric
- spdk nvmf
- nvmf initiator 和 target
- spdk nvmf target
- linux kernel NVMeOF initiator
- multipath
- 實踐注意事項
- 參考鏈接
概述
NVMe協議制定了本機高速訪問PCIe SSD的規范,為了把本地高速訪問的優勢暴露給遠端應用, 誕生了NVMe-oF 協議。NVMe-oF target 是NVMe協議在不同傳輸網絡 (transport) 上面的延伸。NVMe-oF 協議中的 transport 可以多種多樣, 諸如 Ethernet, Fibre Channel,Infiniband等。當前比較流行的transport實現是基于RDMA的Ethernet transport, Linux Kernel 和SPDK的NVMe-oF target 都支持。
名詞解釋
nvme over fabric
- controller:nvme的字符設備,對應為/dev/nvmeX,是我們下發控制命令的設備。
- namespace:nvme的塊設備,對應為/dev/nvmeXnX,也是我們下發IO的設備。
- host:client端。
- target:處理client請求,連接實際存儲設備。
- transport:Transport是連接Host和Target的橋梁,可以是PCIE/RDMA/FC/TCP
- subNQN:用于識別遠程NVMe存儲目標controller. 保存在identify controller
- EUI64/UUID/NGUID: 用于識別遠程NVMe namespace. 保存在NVMe Namespace Descriptor List,EUI64/NGUID同時保存在identify namespace
- 注意:spdk使用uuid作為identifier連接kernel nvme initiator,在重連的時候有bug,這個bug在kernel5.13上才被修復掉。
spdk nvmf
subsystem:spdk創建的nvme controller。相當于nvme controller,擁有了subsystem就可以被nvme host識別到并掛載了,就算他名下沒有namespace。
nvmf initiator 和 target
主要介紹 linux kernel nvme initiator + spdk nvmf target。spdk的nvmf initiator使用方法和訪問pcie盤類似,不再詳述。
spdk nvmf target
nvmf和vhost一樣都是spdk的一個模塊。啟動nvmf模塊就相當于啟動了一個nvme over fabrics target。啟動后可以通過rpc創建nvmf subsystem,并把bdev掛載到namespace上。最后通過監聽端口,實現遠端nvme initiator的訪問。
spdk nvmf target 創建示例:
# 創建相應的transport,可以使TCP或者RDMA python scripts/rpc.py nvmf_create_transport -t RDMA -u 8192 -p 2 -c 4096 # 創建一個 bdev python scripts/rpc.py construct_malloc_bdev bdev_test # 創建一個NVM subsystem python scripts/rpc.py nvmf_create_subsystem nqn.2020-05.io.spdk:bdev_test -a -m 10 # -a = allow all # 給NVM subsystem 增加一個namespace,使用malloc bdev。 python scripts/rpc.py nvmf_subsystem_add_ns nqn.2020-05.io.spdk:bdev_test bdev_test -g 9EF1D3DAB2044ABA8F83B0427E58AEB0 # 讓nvmf subsystem監聽對應的端口,至此一塊nvmf 盤已經建立成功,可以成功的被遠端host discover到。 python scripts/rpc.py nvmf_subsystem_add_listener nqn.2020-05.io.spdk:bdev_test -t rdma -a 172.0.0.1 -s 4420linux kernel NVMeOF initiator
- nvme over fabrics驅動默認不會被加載,我們一般看到的nvme驅動是pcie驅動。我們使用modprobe nvme-rdma啟動 nvmf rdma驅動
- 使用命令工具nvme讓nvme host掛載對應target上的盤,下面是一個示例:
multipath
同一個subsystem在initiator端掛載兩次(例如從兩個IP連過來),initiator端能識別到兩次掛載實際上是同一塊盤,這就是multipath功能,開啟multipath有如下好處:;
linux kernel 4.15可以配置CONFIG_NVME_MULTIPATH啟動multipath功能。啟動之后,假設我們對用一個subsystem掛載兩次,nvme0和nvme1,/dev目錄會顯示如下
$ ll /dev/nvme* /dev/nvme0 /dev/nvme0n1 /dev/nvme1如果nvme0因為某種原因斷開,只要nvme1不斷開,那么nvme0n1就會可用。
與之對應,如果不啟動multipath,/dev目錄會顯示兩個controller和兩個namespace
實踐注意事項
參考鏈接
總結
以上是生活随笔為你收集整理的spdk-nvmf指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++的线程安全静态检查
- 下一篇: 分布式块存储QoS限速算法介绍与实践以及