日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spdk-nvmf指南

發(fā)布時間:2024/2/28 编程问答 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spdk-nvmf指南 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

spdk-nvmf指南

    • 概述
    • 名詞解釋
      • nvme over fabric
      • spdk nvmf
    • nvmf initiator 和 target
      • spdk nvmf target
      • linux kernel NVMeOF initiator
        • multipath
    • 實踐注意事項
    • 參考鏈接


概述

NVMe協(xié)議制定了本機高速訪問PCIe SSD的規(guī)范,為了把本地高速訪問的優(yōu)勢暴露給遠端應用, 誕生了NVMe-oF 協(xié)議。NVMe-oF target 是NVMe協(xié)議在不同傳輸網(wǎng)絡 (transport) 上面的延伸。NVMe-oF 協(xié)議中的 transport 可以多種多樣, 諸如 Ethernet, Fibre Channel,Infiniband等。當前比較流行的transport實現(xiàn)是基于RDMA的Ethernet transport, Linux Kernel 和SPDK的NVMe-oF target 都支持。

名詞解釋

nvme over fabric

  • controller:nvme的字符設備,對應為/dev/nvmeX,是我們下發(fā)控制命令的設備。
  • namespace:nvme的塊設備,對應為/dev/nvmeXnX,也是我們下發(fā)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創(chuàng)建的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創(chuàng)建nvmf subsystem,并把bdev掛載到namespace上。最后通過監(jiān)聽端口,實現(xiàn)遠端nvme initiator的訪問。

spdk nvmf target 創(chuàng)建示例:

# 創(chuàng)建相應的transport,可以使TCP或者RDMA python scripts/rpc.py nvmf_create_transport -t RDMA -u 8192 -p 2 -c 4096 # 創(chuàng)建一個 bdev python scripts/rpc.py construct_malloc_bdev bdev_test # 創(chuàng)建一個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監(jiān)聽對應的端口,至此一塊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 4420

linux kernel NVMeOF initiator

  • nvme over fabrics驅動默認不會被加載,我們一般看到的nvme驅動是pcie驅動。我們使用modprobe nvme-rdma啟動 nvmf rdma驅動
  • 使用命令工具nvme讓nvme host掛載對應target上的盤,下面是一個示例:
# Discovery 列出spdk nvmf target所有的subsystem nvme discover -t rdma -a 172.0.0.1 -s 4420 # 連接一塊nvmf盤,使用-n參數(shù)指定subnqn,只連接對應subnqn的盤。 nvme connect -t rdma -n "nqn.2020-05.io.spdk:bdev_test" -a 172.0.0.1 -s 4420 # 連接對應spdk nvmf target下所有的盤。 nvme connect-all -t rdma -a 172.0.0.1 -s 4420 # 兩種disconnect的方式,一種是指定盤符,一種是指定subnqn nvme disconnect -d /dev/nvme0 nvme disconnect -n "nqn.2020-05.io.spdk:bdev_test"

multipath

同一個subsystem在initiator端掛載兩次(例如從兩個IP連過來),initiator端能識別到兩次掛載實際上是同一塊盤,這就是multipath功能,開啟multipath有如下好處:;

  • 保護同一個subsystem不會再同一個host上掛載多次
  • 多次掛載冗余保護,例如:一個IP上的網(wǎng)卡宕機
  • 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會以roundrobin的形式分配IO queue到spdk core,因此僅增加io queue而不增加spdk core,可能性能并不會有很好的提升。
  • 如果spdk重啟,需要依賴另一端initiator重連,kernel intiator默認的重連頻率是10秒。
  • 如果性能不達標,可以嘗試修改nvmf上的網(wǎng)絡參數(shù),比如包大小之類。
  • 對于bdev的異步事件:擴容和bdev關閉,spdk-nvmf已經實現(xiàn)了通知機制,通知initiator。
  • 使用kernel initiator要注意內核驅動的操作是否有冪等性、超時等保證,否則極其容易造成kernel D住。建議在可以允許的范圍內選擇高版本的kernel。當然實踐過程中或許不可避免的要backport。
  • 參考鏈接

  • NVMe over Fabrics 技術特征
  • 深入理解 SPDK NVMeTCP transport的設計
  • 基于SPDK的高效NVMe-oF target
  • 20.01 SPDK NVMe-oF RDMA Performance Report官方詳細的性能測試結果,可作為后續(xù)性能優(yōu)化的依據(jù)
  • NVMe over Fabrics Target官方例子,如何起spdk nvmf target
  • SPDK NVMe-oF target 多路功能介紹
  • 搭建遠端存儲,深度解讀SPDK NVMe-oF target
  • SPDK線程模型解析
  • NVMe Over Fabrics video from the 2016 OpenFabrics Workshop
  • 總結

    以上是生活随笔為你收集整理的spdk-nvmf指南的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。