在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用DPDK和NVIDIA DOCA庫開發應用程序

星星科技指導員 ? 來源:NVIDIA ? 作者:Anuradha Karuppiah ? 2022-04-11 17:02 ? 次閱讀

在這篇文章中,我將帶您了解 FRR DOCA 數據平面插件的創建過程,并向您展示如何使用全新的 DOCAflow 庫卸載 PBR 規則。在上一篇文章中,您了解了使用 DPDK rte_flow 庫創建 FRR 數據平面插件,以加速 BlueField 上的 PBR 規則。

向 Zebra 添加 DOCA 數據平面插件

我仍然使用 DPDK API 進行硬件初始化,但隨后使用 DOCAflow API 來設置數據平面流管道。為此,我必須將 DPDK (libdpdk.pc)和 DOCAflow(doca-flow.pc)共享庫鏈接到 DOCA 數據平面插件。

root@dpu-arm:~# export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/mellanox/dpdk/lib/aarch 
64-linux-gnu/pkgconfig 
root@dpu-arm:~# pkg-config --libs doca-flow 
-ldoca_flow 
root@dpu-arm:~# pkg-config --cflags doca-flow 
-DALLOW_EXPERIMENTAL_API -include rte_config.h -mcpu=cortex-a72 -DALLOW_EXPERIMENTAL_API -I/opt/mellanox/dpdk/include/dpdk -I/opt/mellanox/dpdk/include/dpdk/../aarch64-linux-gnu/dpdk -I/opt/mellanox/dpdk/include/dpdk -I/usr/include/libnl3 
root@dpu-arm:~# 

我在 FRR makefile (configure.ac)中為 DPDK 和 DOCAflow添加了pkg check-and-define宏。

if test "$enable_dp_doca" = "yes"; then 
 PKG_CHECK_MODULES([DOCA], [libdpdk doca-flow], [ 
 AC_DEFINE([HAVE_DOCA], [1], [Enable DOCA backend]) 
 DOCA=true 
 ], [ 
 AC_MSG_ERROR([configuration specifies --enable-dp-doca but DOCA libs were not found]) 
 ]) 
fi

我將 DPDK 和 DOCAflow庫及cflags都包含在zebra-dp-doca make宏(zebra/subdir.am)中。

zebra_zebra_dplane_doca_la_CFLAGS = $(DOCA_CFLAGS) 
zebra_zebra_dplane_doca_la_LIBADD = $(DOCA_LIBS) 

使用/etc/frr/daemons啟動 FRR 服務時,可以啟用 DOCA 數據平面插件。

zebra_options= " -M dplane_doca -A 127.0.0.1"

硬件初始化和端口映射

使用 DPDK API 、rte_eal_initrte_eth_dev_info_get初始化硬件,并設置 Zebra 接口到 DPDK 端口映射。此工作流與上一節中的 DPDK 數據平面插件相同。

root@dpu-arm:~# vtysh -c "show dplane doca port" 
Total ports: 6 cores: 8 
Port Device IfName IfIndex sw,domain,port 
0 0000:03:00.0 p0 4 0000:03:00.0,0,65535 
1 0000:03:00.0 pf0hpf 6 0000:03:00.0,0,4095 
2 0000:03:00.0 pf0vf0 15 0000:03:00.0,0,4096 
3 0000:03:00.0 pf0vf1 16 0000:03:00.0,0,4097 
4 0000:03:00.1 p1 5 0000:03:00.1,1,65535 
5 0000:03:00.1 pf1hpf 7 0000:03:00.1,1,20479 
root@dpu-arm:~#

DOCAflow初始化

為了使用doca-flow編寫 PBR 規則,我必須初始化doca-flowdoca-flow-port數據庫。此初始化是在使用rte_eal_init初始化硬件后完成的。

我使用doca_flow_init通過配置流和隊列計數來初始化doca-flow庫。

struct doca_flow_cfg  flow_cfg; 

memset(&flow_cfg, 0, sizeof(flow_cfg)); 
flow_cfg.total_sessions = ZD_DOCA_FLOW_MAX; 
flow_cfg.queues = doca_ctx->nb_cores;  doca_flow_init (&flow_cfg, &err); 

當我使用 DPDK 設置硬件端口時,我必須使用dpdk_port-id將它們安裝到doca-flow-port數據庫中。

struct doca_flow_port_cfg  port_cfg; 

 memset(&port_cfg, 0, sizeof(port_cfg)); 
port_cfg.port_id = dpdk_port_id; 
port_cfg.type = DOCA_FLOW_PORT_DPDK_BY_ID; 
snprintf(port_id_str, ZD_PORT_STR_MAX, "%u", port_cfg.port_id); 
port_cfg.devargs = port_id_str; 

doca_port =  doca_flow_port_start (&port_cfg, &err);

使用 doca-flow API 編寫 PBR 規則

通過一系列用于匹配、動作、轉發和監控屬性的數據結構來對 DOCA 流進行編程

struct doca_flow_match  match, match_mask; 
struct  doca_flow_actions  actions; 
struct  doca_flow_fwd  fwd; 
struct doca_flow_monitor  monitor;

流匹配

這被指定為匹配和匹配掩碼。匹配掩碼是可選的,如果未指定,則由doca-flow庫自動填充。

memset(&match, 0, sizeof(match)); 
memset(&match_mask, 0, sizeof(match_mask));  

match.out_src_ip.type = DOCA_FLOW_IP4_ADDR; 
match.out_src_ip.ipv4_addr = src_ip; 
match_mask.out_src_ip.ipv4_addr = src_ip_mask; 

match.out_dst_ip.type = DOCA_FLOW_IP4_ADDR; 
match.out_dst_ip.ipv4_addr = dst_ip; 
match_mask.out_src_ip.ipv4_addr = dst_ip_mask; 
 
match.out_l4_type = ip_proto;  
 
match.out_src_port = RTE_BE16 (l4_src_port); 
match_mask.out_src_port = UINT16_MAX; 

match.out_dst_port = RTE_BE16 (l4_dst_port); 
match_mask.out_dst_port = UINT16_MAX; 

我跳過了填充etheth-mask等字段。這是因為doca-flow庫可以基于其他匹配字段dst_ipsrc_ip自動將此類字段填充到RTE_ETHER_TYPE_IPV4RTE_ETHER_TYPE_IPV6

流動作

為了路由數據包,我必須將目標 MAC 地址更改為網關( leaf2 ) MAC ,減少 TTL ,并更改源 MAC 地址。這一點最初在上一篇文章中討論,使用 NVIDIA BlueField DPU 和 DPDK 開發應用程序.

memset(&actions, 0, sizeof(actions));   actions.dec_ttl = true; 
 memcpy(actions.mod_src_mac, uplink_mac, DOCA_ETHER_ADDR_LEN); 
 memcpy(actions.mod_dst_mac, gw_mac, DOCA_ETHER_ADDR_LEN); 

流轉發

然后,我將輸出端口設置為上行鏈路。

memset(&fwd, 0, sizeof(fwd)); 
 
fwd.type = DOCA_FLOW_FWD_PORT; 
fwd.port_id = out_port_id; 

流監控

我設置了流量計數器進行故障排除。

memset(&monitor, 0, sizeof(monitor));  monitor.flags |= DOCA_FLOW_MONITOR_COUNT; 

DOCA流管道和入口

流程創建分為兩步:

創建流管道。

將流條目添加到流管道。

第一步是為查找階段創建軟件模板。第二步使用模板在硬件中的流進行編程。

當您必須對許多類似的流進行編程時,管道非常有用。對于這種情況,可以設置單個匹配模板(管道),并指示在創建流條目時必須更新哪個匹配字段(例如,第 4 層目標端口)。后續的流條目只需要 填充與管道(第 4 層目標端口)不同的匹配字段。

對于 PBR ,每個流模式都是唯一的,所以我使用已經填充的流屬性為每個 PBR 規則創建了一個單獨的管道和條目。

struct doca_flow_pipe_cfg  pipe_cfg;  

pipe_cfg.name = "pbr"; 
pipe_cfg.port = in_dport->doca_port; 
pipe_cfg.match = &match; 
pipe_cfg.match_mask = &match_mask; 
pipe_cfg.actions = &actions; 
pipe_cfg.monitor = &monitor; 
pipe_cfg.is_root = true;  

flow_pipe =  doca_flow_create_pipe (&pipe_cfg, &fwd, NULL, &err); 
flow_entry =  doca_flow_pipe_add_entry (0, flow_pipe, &match, &actions, &monitor, &fwd, &err);

流刪除

流管道和條目創建 API 返回管道和流指針,這些指針必須被緩存以供后續刪除。

 doca_flow_pipe_rm_entry( 0, flow_entry); 
 doca_flow_destroy_pipe (port_id, flow_pipe); 

流統計

在創建流時,我設置了DOCA_FLOW_MONITOR_COUNT標志。我使用doca_flow_query查詢了流統計數據。

struct  doca_flow_query query ; 

// hit counters – query.total_pkts and query.total_bytes 
memset(&query, 0, sizeof(query)); 
 doca_flow_query (flow_entry, &query); 

驗證硬件加速

FRR-PBR 規則配置和流量生成與dpdk-plugin相同。流量按預期由 DPU 硬件轉發,并可使用流計數器進行驗證。

root@dpu-arm:~# vtysh -c "show dplane doca pbr flow" 
Rules if pf0vf0 
 Seq 1 pri 300 
 SRC IP Match: 172.20.0.8/32 
 DST IP Match: 172.30.0.8/32 
 IP protocol Match: 17 
 DST Port Match: 53 
 Tableid: 10000 
 Action: nh: 192.168.20.250 intf: p0 
 Action: mac: 00:00:5e:00:01:fa 
 DOCA flow: installed 0xffff28005150 
 DOCA stats: packets 202 bytes 24644 
root@dpu-arm:~# 

還可以使用硬件條目進行驗證:

root@dpu-arm:~# ~/mlx_steering_dump/mlx_steering_dump_parser.py -p `pidof zebra` - 
f /tmp/dpdkDump 
domain 0xe294002, table 0xaaab07648b10, matcher 0xffff28012c30, rule 0xffff28014040 
 match: outer_l3_type: 0x1, outer_ip_dst_addr: 172.30.0.8, outer_l4_type: 0x2, metadata_reg_c_0: 0x00030000, outer_l4_dport: 0x0035, outer_ip_src_addr: 172.20.0.8 
 action: MODIFY_HDR(hdr(dec_ip4_ttl)), rewrite index 0x0 & VPORT, num 0xffff & CTR(hits(352), bytes(42944)), index 0x806200

通過使用doca-flow,FRR 現在具有了第二個數據平面插件,可用于 PBR 規則的硬件加速。

程序開發要點

在本系列文章中,您了解了如何使用rte_flow或doca_flow通過四個步驟對 DPU 網絡應用程序進行硬件加速:

將 DOCA / DPDK 庫鏈接到應用程序。

初始化硬件。

設置應用程序到硬件端口的映射。

用于引導流量的流編程。

隨著越來越多的元素卸載到DPU 上,及源代碼行( SLOC )的增加,開發過程可能會變得復雜。而這正是 DOCA 抽象庫可以幫助解決的:

DOCA 附帶了幾個內置庫,如doca-dpi、 gRPC 、 Firefly 時間同步等。這些庫支持應用程序的快速即插即用。

DOCA 構建(如doca_pipe)使您能夠模板化管道,消除樣板代碼并優化流插入。

即將推出的 DOCA 庫,如硬件加速的 LPM (最長前綴匹配),使構建交換機管道變得更容易。這與您在本系列文章中看到的示例應用程序 FRR 尤其相關, FRR 通常用于使用 BGP 構建 LPM 路由表(或 RIB )。

借助 DOCA ,您還可以在融合加速器上的 GPU 和 DPU 上實現令人激動的開發體驗。

關于作者

Anuradha Karuppiah 是 NVIDIA 網絡的首席軟件工程師。 Anuradha 使用 FRR (自由范圍路由軟件套件)設計和實現 EVPN 解決方案。

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • NVIDIA
    +關注

    關注

    14

    文章

    4991

    瀏覽量

    103135
收藏 人收藏

    評論

    相關推薦

    AWTK-WEB 快速入門(2) - JS 應用程序

    導讀AWTK可以使用相同的技術棧開發各種平臺的應用程序。有時我們需要使用Web界面與設備進行交互,本文介紹一下如何使用JS語言開發AWTK-WEB應用程序。用AWTKDesigner新
    的頭像 發表于 12-05 01:04 ?118次閱讀
    AWTK-WEB 快速入門(2) - JS <b class='flag-5'>應用程序</b>

    AWTK-WEB 快速入門(1) - C 語言應用程序

    導讀AWTK可以使用相同的技術棧開發各種平臺的應用程序。有時我們需要使用Web界面與設備進行交互,本文介紹一下如何使用C語言開發AWTK-WEB應用程序。用AWTKDesigner新建
    的頭像 發表于 11-27 11:46 ?217次閱讀
    AWTK-WEB 快速入門(1) - C 語言<b class='flag-5'>應用程序</b>

    NVIDIA DOCA 2.9版本的亮點解析

    NVIDIA DOCA通過為開發者提供全面的軟件框架以利用硬件加速來增強 NVIDIA 網絡平臺的功能,從而提高性能、安全性和效率。其 API、
    的頭像 發表于 11-27 11:15 ?330次閱讀
    <b class='flag-5'>NVIDIA</b> <b class='flag-5'>DOCA</b> 2.9版本的亮點解析

    簡單認識libmodbus開發

    或TCP網絡與符合Modbus協議的設備發送/接收數據,方便開發者構建應用程序或將Modbus通信集成到設備中。
    的頭像 發表于 11-13 15:42 ?329次閱讀
    簡單認識libmodbus<b class='flag-5'>開發</b><b class='flag-5'>庫</b>

    NVIDIA DOCA-OFED的主要特性

    NVIDIA DOCA 軟件平臺釋放了 NVIDIA BlueField 網絡平臺的潛力,并為NVIDIA BlueField和ConnectX設備提供了所需的所有主機驅動
    的頭像 發表于 11-09 13:50 ?280次閱讀

    在TM4C MCU上用FreeRTOS開發通用應用程序應用說明

    電子發燒友網站提供《在TM4C MCU上用FreeRTOS開發通用應用程序應用說明.pdf》資料免費下載
    發表于 09-11 14:15 ?0次下載
    在TM4C MCU上用FreeRTOS<b class='flag-5'>開發</b>通用<b class='flag-5'>應用程序</b>應用說明

    簡單認識NVIDIA網絡平臺

    BlueField-3 SuperNIC,為多租戶生成式 AI 云和大型企業級用戶提供了各種至關重要的先進功能。其核心結構是交換機 + SuperNIC(超級網卡)+ LinkX + DOCA 軟件開發包 + NCCL 集合通信
    的頭像 發表于 09-09 09:22 ?440次閱讀

    IB Verbs和NVIDIA DOCA GPUNetIO性能測試

    NVIDIA DOCA GPUNetIO 是 NVIDIA DOCA SDK 中的一個,專門為實時在線 GPU 數據包處理而設計。它結合了
    的頭像 發表于 08-23 17:03 ?628次閱讀
    IB Verbs和<b class='flag-5'>NVIDIA</b> <b class='flag-5'>DOCA</b> GPUNetIO性能測試

    借助NVIDIA DOCA 2.7增強AI 云數據中心和NVIDIA Spectrum-X

    NVIDIA DOCA 加速框架為開發者提供了豐富的、驅動和 API,以便為 NVIDIA BlueField DPU 和 SuperNI
    的頭像 發表于 05-29 09:22 ?502次閱讀

    NVIDIA Omniverse USD Composer能用來做什么?如何獲取呢?

    NVIDIA Omniverse? USD Composer(以前稱為 Create)是 NVIDIA Omniverse? 中用于構建虛擬世界的參考應用程序,允許用戶進行組裝、模擬和渲染大型場景。
    的頭像 發表于 05-20 10:07 ?873次閱讀
    <b class='flag-5'>NVIDIA</b> Omniverse USD Composer能用來做什么?如何獲取呢?

    使用Redis和Spring?Ai構建rag應用程序

    整合如何通過簡化的開發流程,讓開發者能夠更專注于創新而非底層實現。一、SpringAI簡介由大型語言模型(LLM)驅動的應用程序中,向量數據常作為人工智能應用程
    的頭像 發表于 04-29 08:04 ?1053次閱讀
    使用Redis和Spring?Ai構建rag<b class='flag-5'>應用程序</b>

    NVIDIA數字人技術加速部署生成式AI驅動的游戲角色

    NVIDIA 在 GDC 2024 大會上宣布,Inworld AI 等領先的 AI 應用程序開發者,正在使用 NVIDIA 數字人技術加速部署生成式 AI 驅動的游戲角色。
    的頭像 發表于 04-09 10:08 ?680次閱讀
    <b class='flag-5'>NVIDIA</b>數字人技術加速部署生成式AI驅動的游戲角色

    NVIDIA深度參與GTC,向量數據大廠Zilliz與全球頂尖開發者共迎AI變革時刻

    近日,備受關注的 NVIDIA GTC 已拉開序幕。來自世界各地的頂尖 AI 開發者齊聚美國加州圣何塞會議中心,共同探索行業未來,全球領先的向量數據公司 Zilliz 也不例外。作為去年被
    的頭像 發表于 03-26 11:01 ?417次閱讀

    關于DPDK的一些常見問題

    對于單核多CPU部署,一個CPU分配給操作系統,另一個分配給基于DPDK應用程序。對于多核部署,無論是否使用超線程,都可以為每個端口分配多個內核。
    的頭像 發表于 03-05 11:44 ?859次閱讀
    關于<b class='flag-5'>DPDK</b>的一些常見問題

    基于NVIDIA DOCA 2.6實現高性能和安全的AI云設計

    作為專為 NVIDIA? BlueField? 網絡平臺而設計的數據中心基礎設施軟件框架,NVIDIA? DOCA? 使廣大開發者能夠利用其行業標準 API 在
    的頭像 發表于 02-23 10:02 ?479次閱讀
    主站蜘蛛池模板: 日本黄色绿像| 97人洗澡人人澡人人爽| 99r8这里精品热视频免费看| 狠狠躁夜夜躁人人爽天天段| 久久久久久久综合| 国产香蕉98碰碰久久人人| 婷婷综合五月中文字幕欧美| 夜夜超b天天| 手机在线观看视频你懂的| 日本高清视频色| 国产精品视频久久久久| 视频免费播放| 奇米影视奇米色777欧美| 可以免费播放的在线视频| 狼人 成人 综合 亚洲| 国产成人mv 在线播放| 中文字幕在线观看亚洲| 中文字幕一区二区三区在线观看 | 五月婷婷六月婷婷| 色在线免费| 男人的天堂一区二区视频在线观看 | 国产人成午夜免费看| 最新在线网址| 美女下面小内内的沟| 五月在线观看| 免费一级特黄| www.av在线| 日日操夜夜爱| 成人理论片| 综合天堂| 欧美日韩一区二区三区毛片| 制服丝袜中文字幕第一页| 四虎4hu永久在线观看| 理论片人人51| 午夜精品国产| 欧美激情伊人| 亚洲五月激情综合图片区| 欧美日韩国产网站| 77米奇影院| 影院在线观看免费| 在线三级网址|