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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

spdk-nvmf指南

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

spdk-nvmf指南

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


概述

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

名詞解釋

nvme over fabric

  • controller:nvme的字符設(shè)備,對(duì)應(yīng)為/dev/nvmeX,是我們下發(fā)控制命令的設(shè)備。
  • namespace:nvme的塊設(shè)備,對(duì)應(yīng)為/dev/nvmeXnX,也是我們下發(fā)IO的設(shè)備。
  • host:client端。
  • target:處理client請(qǐng)求,連接實(shí)際存儲(chǔ)設(shè)備。
  • transport:Transport是連接Host和Target的橋梁,可以是PCIE/RDMA/FC/TCP
  • subNQN:用于識(shí)別遠(yuǎn)程N(yùn)VMe存儲(chǔ)目標(biāo)controller. 保存在identify controller
  • EUI64/UUID/NGUID: 用于識(shí)別遠(yuǎn)程N(yùn)VMe namespace. 保存在NVMe Namespace Descriptor List,EUI64/NGUID同時(shí)保存在identify namespace
    • 注意:spdk使用uuid作為identifier連接kernel nvme initiator,在重連的時(shí)候有bug,這個(gè)bug在kernel5.13上才被修復(fù)掉。

spdk nvmf

subsystem:spdk創(chuàng)建的nvme controller。相當(dāng)于nvme controller,擁有了subsystem就可以被nvme host識(shí)別到并掛載了,就算他名下沒(méi)有namespace。

nvmf initiator 和 target

主要介紹 linux kernel nvme initiator + spdk nvmf target。spdk的nvmf initiator使用方法和訪問(wèn)pcie盤類似,不再詳述。

spdk nvmf target

nvmf和vhost一樣都是spdk的一個(gè)模塊。啟動(dòng)nvmf模塊就相當(dāng)于啟動(dòng)了一個(gè)nvme over fabrics target。啟動(dòng)后可以通過(guò)rpc創(chuàng)建nvmf subsystem,并把bdev掛載到namespace上。最后通過(guò)監(jiān)聽端口,實(shí)現(xiàn)遠(yuǎn)端nvme initiator的訪問(wèn)。

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

# 創(chuàng)建相應(yīng)的transport,可以使TCP或者RDMA python scripts/rpc.py nvmf_create_transport -t RDMA -u 8192 -p 2 -c 4096 # 創(chuàng)建一個(gè) bdev python scripts/rpc.py construct_malloc_bdev bdev_test # 創(chuàng)建一個(gè)NVM subsystem python scripts/rpc.py nvmf_create_subsystem nqn.2020-05.io.spdk:bdev_test -a -m 10 # -a = allow all # 給NVM subsystem 增加一個(gè)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)聽對(duì)應(yīng)的端口,至此一塊nvmf 盤已經(jīng)建立成功,可以成功的被遠(yuǎn)端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驅(qū)動(dòng)默認(rèn)不會(huì)被加載,我們一般看到的nvme驅(qū)動(dòng)是pcie驅(qū)動(dòng)。我們使用modprobe nvme-rdma啟動(dòng) nvmf rdma驅(qū)動(dòng)
  • 使用命令工具nvme讓nvme host掛載對(duì)應(yīng)target上的盤,下面是一個(gè)示例:
# Discovery 列出spdk nvmf target所有的subsystem nvme discover -t rdma -a 172.0.0.1 -s 4420 # 連接一塊nvmf盤,使用-n參數(shù)指定subnqn,只連接對(duì)應(yīng)subnqn的盤。 nvme connect -t rdma -n "nqn.2020-05.io.spdk:bdev_test" -a 172.0.0.1 -s 4420 # 連接對(duì)應(yīng)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

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

  • 保護(hù)同一個(gè)subsystem不會(huì)再同一個(gè)host上掛載多次
  • 多次掛載冗余保護(hù),例如:一個(gè)IP上的網(wǎng)卡宕機(jī)
  • linux kernel 4.15可以配置CONFIG_NVME_MULTIPATH啟動(dòng)multipath功能。啟動(dòng)之后,假設(shè)我們對(duì)用一個(gè)subsystem掛載兩次,nvme0和nvme1,/dev目錄會(huì)顯示如下

    $ ll /dev/nvme* /dev/nvme0 /dev/nvme0n1 /dev/nvme1

    如果nvme0因?yàn)槟撤N原因斷開,只要nvme1不斷開,那么nvme0n1就會(huì)可用。

    與之對(duì)應(yīng),如果不啟動(dòng)multipath,/dev目錄會(huì)顯示兩個(gè)controller和兩個(gè)namespace

    實(shí)踐注意事項(xiàng)

  • spdk會(huì)以roundrobin的形式分配IO queue到spdk core,因此僅增加io queue而不增加spdk core,可能性能并不會(huì)有很好的提升。
  • 如果spdk重啟,需要依賴另一端initiator重連,kernel intiator默認(rèn)的重連頻率是10秒。
  • 如果性能不達(dá)標(biāo),可以嘗試修改nvmf上的網(wǎng)絡(luò)參數(shù),比如包大小之類。
  • 對(duì)于bdev的異步事件:擴(kuò)容和bdev關(guān)閉,spdk-nvmf已經(jīng)實(shí)現(xiàn)了通知機(jī)制,通知initiator。
  • 使用kernel initiator要注意內(nèi)核驅(qū)動(dòng)的操作是否有冪等性、超時(shí)等保證,否則極其容易造成kernel D住。建議在可以允許的范圍內(nèi)選擇高版本的kernel。當(dāng)然實(shí)踐過(guò)程中或許不可避免的要backport。
  • 參考鏈接

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

    以上是生活随笔為你收集整理的spdk-nvmf指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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