• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 3 月 19 日下午 2 點,鎖定 NVIDIA AI 網絡中文專場。立即注冊觀看
    網路

    NVIDIA BlueField-2 DPU 和 DPDK 開發入門指南

    DPDK作為DOCA軟件框架重要的組成部分,幾乎在所有DOCA APP中都會出現,并且占有非常大的比重。因此,除了可以根據DOCA SDK以及提供的示例進行網絡相關功能的開發,也可以直接用DPDK API和相關示例進行開發。本人理解的兩者區別如下:

    1. DPDK是DOCA的功能子集,DOCA包含了更豐富的功能和加速特性;
    2. 如果設備能夠運行DOCA APP,則一定可以運行DPDK APP,反之則不一定;

    綜上,對于熟悉DPDK的開發者來說,無論是利用DOCA開發還是利用DPDK進行開發都會相對容易很多。因此,特別建議初學者先學會DPDK開發再上手DOCA開發

    本文將介紹如何把如下三個DPDK APP快速遷移到NVIDIA BlueField-2 DPU(以下簡稱bf2)上運行:

    ·dpdk-testpmd:DPDK中非常重要的測試工具,主要功能包括快速配置端口轉發和下發流規則;

    ·dpdk-l2fwd:DPDK中最簡單的轉發示例程序,很多APP都可以在此基礎上進行開發,進而避免“造輪子”、“從零開始”;

    ·dpdk-pktgen:非kernel版本的pktgen,能夠更快速的生成、發送和接收報文。特別是在DPU Arm上進行對比時,DPDK版本的pktgen效率相對kernel版本的pktgen提升了許多。提起該工具旨在方便對DPU進行網絡性能壓測;

    一、遷移環境

    1)bf2 運行在嵌入式模式(Embedded CPU Function Ownership Mode)下,即默認模式;

    2)DOCA 版本為DOCA_1.4.0;

    3)網絡拓撲:

    注:如果只有一塊bf2且沒有光模塊,也可以在如下拓撲中用VF+VM進行遷移和壓測VF的申請方式和Mellanox CX系列網卡一致,不再贅述,唯一區別是代表口下沉到bf2的Arm子系統中

    • 運行dpdk-testpmd

    ① DOCA默認集成DPDK(無源碼,只有編譯后的目錄,在/opt/mellanox/dpdk下),查詢默認版本的DPDK版本號:

    * export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/mellanox/dpdk/lib/aarch64-linux-gnu/pkgconfig

    * pkg-config –modversion libdpdk

    ② 可執行DPDK程序在/opt/mellanox/dpdk/bin下。查詢可用的dpdk端口:

    特別注意,Mellanox的網卡無需綁定uio或者vfio驅動,即開即用,只不過在運行dpdk app時,該端口的內核網絡棧無法使用

    ③dpdk-testpmd同在/opt/mellanox/dpdk/bin下。在root下運行,轉發pf0hpf和p0間的流量:

    關閉OVS:

    * /etc/init.d/openvswitch-switch stop

    申請大頁:

    * echo 4096 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

    運行app:

    * /opt/mellanox/dpdk/bin/dpdk-testpmd -a 03:00.0,representor=[0,65535] — –nb-ports=2 –total-num-mbufs=131000  -i

    注意:

    1. 檢查mac是否和pf0hpf和p0對應;
    2. testpmd的使用(轉發和下發流規則)可在DPDK官網dpdk.org參看學習,不做贅述;
    3. 可以用在宿主機上用ping和iperf等工具進行流量測試;
    4. 運行dpdk-l2fwd

    該示例的源碼需要DPDK官網(dpdk.org)下載,尋找與默認版本相近的版本下載并復制到Arm中即可,該程序沒有任何復雜的功能,非常適合初學者進行學習,以便深入了解bf2;

    ②進入源碼目錄,利用make編譯,這里不建議使用meson+ninja進行編譯;

    * export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/mellanox/dpdk/lib/aarch64-linux-gnu/pkgconfig

    * make

    ③ 運行

    特別注意:

    1. 一定要加上–no-mac-updating,一定要加上–no-mac-updating,一定要加上–no-mac-updating,重要的事情說三遍!!!
    2. -p指定了端口號(eg:3=0x0011,即綁定0號dpdk端口和1號dpdk端口),不同bf2上的pf0hpf和p0對應的dpdk端口號可能是不一樣的,可以多次切換參數值并根據mac地址將端口號識別出來;
    • 運行dpdk-pktgen

    ①pktgen需要再arm中編譯安裝新版本的DPDK,經過測試可行的DPDK版本是21.11;

    * 下載源碼至arm,解壓并進入源碼目錄;

    *  meson build

    *  ninja -C build

    *  cd build

    *  ninja install(卸載:ninja uninstall)

    *  ldconfig

    注意:

    ·編譯可能出現類似如下問題,錯誤類似“找不到rxp-compiler頭文件”,這個應該是其它廠商(Marvell)的驅動。修改報錯目錄下的meson文件,刪除build目錄重編即可。

    ·按照如下修改drivers/regex/octeontx2/meson.build,再重編DPDK:

    修改前

    修改后

    ②安裝好的版本可能和默認版本沖突,本人解決方案如下:

    ·使用DPDK-21.11:

    * mv  /opt/mellanox/dpdk  /opt/mellanox/dpdk_

    * ldconfig

    ·使用默認版本DPDK:

    * cd  dpdk-statble-21.11/build (進入編譯目錄)

    * ninja  uninstall (卸載)

    * mv  /opt/mellanox/dpdk_  /opt/mellanox/dpdk(還原目錄)

    * export  PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/mellanox/dpdk/lib/aarch64-linux-gnu/pkgconfig

    * ldconfig

    ·使用時,記得檢測當前環境使用的版本:

    * pkg-config  –modversion  libdpdk

    ③DPDK-21.11環境部署好后,在DPDK官網下載pktgen-21.11,最后在Arm中利用meson和ninja進行編譯即可正常使用;

    * ./pktgen -m 1024 -b 03:00.0 — -m “[1:2].0”

    bf2 Arm中pktgen-21.11運行情況

    最后補充,本人在bf2上開發了快一年,受限于需求,所以基本都在用DPDK進行開發。但DOCA是一個更豐富的軟件框架,建議熟悉DPDK在bf2上的使用后進一步學習DOCA的使用。另外,上述遷移試驗基本都是2022年在bf2中進行的,所碰到的問題可能會隨著產品迭代消失,所以本人的經驗僅供參考,希望NVIDIA的網絡產品越做越好。

    參考文檔:

    1. NVIDIA BlueField-2 Ethernet DPU User Guide(硬件文檔):

    https://docs.nvidia.com/networking/display/BlueField2DPUENUG

    +1

    標簽

    人人超碰97caoporen国产