日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用DPDK和NVIDIA DOCA庫(kù)開發(fā)應(yīng)用程序

星星科技指導(dǎo)員 ? 來(lái)源:NVIDIA ? 作者:Anuradha Karuppiah ? 2022-04-11 17:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

向 Zebra 添加 DOCA 數(shù)據(jù)平面插件

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

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庫(kù)及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啟動(dòng) FRR 服務(wù)時(shí),可以啟用 DOCA 數(shù)據(jù)平面插件。

zebra_options= " -M dplane_doca -A 127.0.0.1"

硬件初始化和端口映射

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

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 規(guī)則,我必須初始化doca-flowdoca-flow-port數(shù)據(jù)庫(kù)。此初始化是在使用rte_eal_init初始化硬件后完成的。

我使用doca_flow_init通過(guò)配置流和隊(duì)列計(jì)數(shù)來(lái)初始化doca-flow庫(kù)。

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); 

當(dāng)我使用 DPDK 設(shè)置硬件端口時(shí),我必須使用dpdk_port-id將它們安裝到doca-flow-port數(shù)據(jù)庫(kù)中。

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 規(guī)則

通過(guò)一系列用于匹配、動(dòng)作、轉(zhuǎn)發(fā)和監(jiān)控屬性的數(shù)據(jù)結(jié)構(gòu)來(lái)對(duì) DOCA 流進(jìn)行編程

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

流匹配

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

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; 

我跳過(guò)了填充etheth-mask等字段。這是因?yàn)?code style="border-width:0px;vertical-align:baseline;padding:0px;margin:0px;background-color:rgb(244,244,244);">doca-flow庫(kù)可以基于其他匹配字段dst_ipsrc_ip自動(dòng)將此類字段填充到RTE_ETHER_TYPE_IPV4RTE_ETHER_TYPE_IPV6

流動(dòng)作

為了路由數(shù)據(jù)包,我必須將目標(biāo) MAC 地址更改為網(wǎng)關(guān)( leaf2 ) MAC ,減少 TTL ,并更改源 MAC 地址。這一點(diǎn)最初在上一篇文章中討論,使用 NVIDIA BlueField DPU 和 DPDK 開發(fā)應(yīng)用程序.

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); 

流轉(zhuǎn)發(fā)

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

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

流監(jiān)控

我設(shè)置了流量計(jì)數(shù)器進(jìn)行故障排除。

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

DOCA流管道和入口

流程創(chuàng)建分為兩步:

創(chuàng)建流管道。

將流條目添加到流管道。

第一步是為查找階段創(chuàng)建軟件模板。第二步使用模板在硬件中的流進(jìn)行編程。

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

對(duì)于 PBR ,每個(gè)流模式都是唯一的,所以我使用已經(jīng)填充的流屬性為每個(gè) PBR 規(guī)則創(chuàng)建了一個(gè)單獨(dú)的管道和條目。

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);

流刪除

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

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

流統(tǒng)計(jì)

在創(chuàng)建流時(shí),我設(shè)置了DOCA_FLOW_MONITOR_COUNT標(biāo)志。我使用doca_flow_query查詢了流統(tǒng)計(jì)數(shù)據(jù)。

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); 

驗(yàn)證硬件加速

FRR-PBR 規(guī)則配置和流量生成與dpdk-plugin相同。流量按預(yù)期由 DPU 硬件轉(zhuǎn)發(fā),并可使用流計(jì)數(shù)器進(jìn)行驗(yàn)證。

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:~# 

還可以使用硬件條目進(jìn)行驗(yàn)證:

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

通過(guò)使用doca-flow,F(xiàn)RR 現(xiàn)在具有了第二個(gè)數(shù)據(jù)平面插件,可用于 PBR 規(guī)則的硬件加速。

應(yīng)程序開發(fā)要點(diǎn)

在本系列文章中,您了解了如何使用rte_flow或doca_flow通過(guò)四個(gè)步驟對(duì) DPU 網(wǎng)絡(luò)應(yīng)用程序進(jìn)行硬件加速:

將 DOCA / DPDK 庫(kù)鏈接到應(yīng)用程序。

初始化硬件。

設(shè)置應(yīng)用程序到硬件端口的映射。

用于引導(dǎo)流量的流編程。

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

DOCA 附帶了幾個(gè)內(nèi)置庫(kù),如doca-dpi、 gRPC 、 Firefly 時(shí)間同步等。這些庫(kù)支持應(yīng)用程序的快速即插即用。

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

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

借助 DOCA ,您還可以在融合加速器上的 GPU 和 DPU 上實(shí)現(xiàn)令人激動(dòng)的開發(fā)體驗(yàn)。

關(guān)于作者

Anuradha Karuppiah 是 NVIDIA 網(wǎng)絡(luò)的首席軟件工程師。 Anuradha 使用 FRR (自由范圍路由軟件套件)設(shè)計(jì)和實(shí)現(xiàn) EVPN 解決方案。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • NVIDIA
    +關(guān)注

    關(guān)注

    14

    文章

    5696

    瀏覽量

    110143
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何構(gòu)建藍(lán)牙應(yīng)用程序?

    應(yīng)用程序使用藍(lán)牙(blueZ)。 我已經(jīng)安裝了 gcc-riscv64-linux-gnu。 但是,沒(méi)有安裝 blueZ 標(biāo)頭和庫(kù)。 如何構(gòu)建我的藍(lán)牙應(yīng)用程序
    發(fā)表于 04-01 07:31

    開發(fā)板是否支持DPDK的安裝?

    開發(fā)板是否支持DPDK的安裝
    發(fā)表于 03-30 07:46

    生產(chǎn)環(huán)境數(shù)據(jù)庫(kù)連接池耗盡的全流程排查與性能優(yōu)化實(shí)戰(zhàn)

    數(shù)據(jù)庫(kù)連接池是應(yīng)用程序與數(shù)據(jù)庫(kù)之間的緩存連接組件。連接池在應(yīng)用程序啟動(dòng)時(shí)創(chuàng)建一組數(shù)據(jù)庫(kù)連接,應(yīng)用程序
    的頭像 發(fā)表于 03-27 15:58 ?352次閱讀

    NVIDIA推出cuEST量子化學(xué)加速庫(kù)

    本周,NVIDIA 發(fā)布了 NVIDIA cuEST。這是一款全新的 NVIDIA CUDA-X 庫(kù),可將電子結(jié)構(gòu)計(jì)算遷移到 GPU 上執(zhí)行。應(yīng)用材料公司、三星、新思科技和 TSMC
    的頭像 發(fā)表于 03-23 15:11 ?531次閱讀

    基于NVIDIA Isaac庫(kù)開發(fā)的機(jī)器人調(diào)酒師ADAM亮相國(guó)際賽場(chǎng)

    基于 NVIDIA Isaac 庫(kù)開發(fā)的機(jī)器人調(diào)酒師 ADAM,為維加斯黃金騎士隊(duì)的冰球粉絲帶來(lái)了身臨其境的未來(lái)式服務(wù)體驗(yàn)。
    的頭像 發(fā)表于 12-24 10:05 ?630次閱讀

    利用NVIDIA Cosmos開放世界基礎(chǔ)模型加速物理AI開發(fā)

    NVIDIA 最近發(fā)布了 NVIDIA Cosmos 開放世界基礎(chǔ)模型(WFM)的更新,旨在加速物理 AI 模型的測(cè)試與驗(yàn)證數(shù)據(jù)生成。借助 NVIDIA Omniverse 庫(kù)和 Co
    的頭像 發(fā)表于 12-01 09:25 ?1488次閱讀

    NVIDIA推出全新BlueField-4 DPU

    全新 NVIDIA BlueField DPU 具有 800Gb/s 的吞吐量,其集成的 NVIDIA ConnectX-9 SuperNIC 和 NVIDIA DOCA 微服務(wù)為 A
    的頭像 發(fā)表于 11-03 14:48 ?1236次閱讀

    PYQT 應(yīng)用程序框架及開發(fā)工具

    特點(diǎn),已成為嵌入式領(lǐng)域的重要開發(fā)工具 PyQt 是一個(gè)創(chuàng)建 GUI 應(yīng)用程序的工具包。它是 Python 編程語(yǔ)言和 Qt 庫(kù)的成功融合。因?yàn)榭捎玫念愑泻芏?,他們被分成幾個(gè)模塊。QtCore 模塊
    發(fā)表于 10-29 07:15

    利用NVIDIA DOCA GPUNetIO技術(shù)提升MoE模型推理性能

    在第三屆 NVIDIA DPU 中國(guó)黑客松競(jìng)賽中,我們見證了開發(fā)者與 NVIDIA 網(wǎng)絡(luò)技術(shù)的深度碰撞。在 23 支參賽隊(duì)伍中,有 5 支隊(duì)伍脫穎而出,展現(xiàn)了在 AI 網(wǎng)絡(luò)、存儲(chǔ)和安全等領(lǐng)域的創(chuàng)新突破。
    的頭像 發(fā)表于 09-23 15:25 ?1248次閱讀

    學(xué)生適合使用的SOLIDWORKS 云應(yīng)用程序

    隨著科技的不斷發(fā)展,計(jì)算機(jī)輔助設(shè)計(jì)(CAD)技術(shù)已經(jīng)成為現(xiàn)代工程教育的重要組成部分。SOLIDWORKS作為一款CAD軟件,其教育版云應(yīng)用程序為學(xué)生提供了強(qiáng)大而靈活的設(shè)計(jì)平臺(tái)。本文將探討
    的頭像 發(fā)表于 09-15 10:39 ?968次閱讀
    學(xué)生適合使用的SOLIDWORKS 云<b class='flag-5'>應(yīng)用程序</b>

    NVIDIA Omniverse Extension開發(fā)秘籍

    NVIDIA Omniverse 是一個(gè)模塊化平臺(tái),使用高級(jí) API 和微服務(wù)來(lái)構(gòu)建由 OpenUSD 和 NVIDIA RTX 提供支持的 3D 應(yīng)用。OpenUSD 功能強(qiáng)大的 3D 框架與 NVIDIA RTX 用于視覺渲
    的頭像 發(fā)表于 08-22 15:52 ?3882次閱讀
    <b class='flag-5'>NVIDIA</b> Omniverse Extension<b class='flag-5'>開發(fā)</b>秘籍

    NVIDIA通過(guò)全新 Omniverse庫(kù)、Cosmos物理AI模型及AI計(jì)算基礎(chǔ)設(shè)施,為機(jī)器人領(lǐng)域開啟新篇章

    NVIDIA 通過(guò)全新 Omniverse 庫(kù)、Cosmos 物理 AI 模型及 AI 計(jì)算基礎(chǔ)設(shè)施,為機(jī)器人領(lǐng)域開啟新篇章 ? ·?全新 NVIDIA Omniverse NuRec 3D
    的頭像 發(fā)表于 08-12 11:29 ?2029次閱讀
    <b class='flag-5'>NVIDIA</b>通過(guò)全新 Omniverse<b class='flag-5'>庫(kù)</b>、Cosmos物理AI模型及AI計(jì)算基礎(chǔ)設(shè)施,為機(jī)器人領(lǐng)域開啟新篇章

    NVIDIA DOCA 3.0版本的亮點(diǎn)解析

    NVIDIA DOCA 框架已發(fā)展成為新一代 AI 基礎(chǔ)設(shè)施的重要組成部分。從初始版本到備受期待的 NVIDIA DOCA 3.0 發(fā)布,每個(gè)版本都擴(kuò)展了
    的頭像 發(fā)表于 07-04 14:27 ?1413次閱讀
    <b class='flag-5'>NVIDIA</b> <b class='flag-5'>DOCA</b> 3.0版本的亮點(diǎn)解析

    第三屆NVIDIA DPU黑客松開啟報(bào)名

    碰撞的絕佳機(jī)會(huì)。本次競(jìng)賽采用開放式主題,參與者將通過(guò) NVIDIA DOCA 軟件框架構(gòu)建創(chuàng)新的加速應(yīng)用程序,充分挖掘 NVIDIA BlueField DPU 在 AI、網(wǎng)絡(luò)、存儲(chǔ)和
    的頭像 發(fā)表于 05-27 10:16 ?1032次閱讀

    NVIDIA將為每家AI工廠提供網(wǎng)絡(luò)安全

    NVIDIA DOCA Argus 框架可檢測(cè) AI 工作負(fù)載中的威脅并對(duì)之做出響應(yīng),同時(shí)與企業(yè)安全系統(tǒng)無(wú)縫集成,從而提供實(shí)時(shí)洞察。
    的頭像 發(fā)表于 05-07 15:11 ?1160次閱讀
    <b class='flag-5'>NVIDIA</b>將為每家AI工廠提供網(wǎng)絡(luò)安全
    临桂县| 婺源县| 黄梅县| 虞城县| 江孜县| 同心县| 赤壁市| 台前县| 北宁市| 洛川县| 黄浦区| 安顺市| 阿鲁科尔沁旗| 翁牛特旗| 会泽县| 巍山| 阿尔山市| 崇义县| 阜新市| 仙游县| 广灵县| 百色市| 剑川县| 盈江县| 遂宁市| 自治县| 文山县| 巴南区| 定日县| 兴山县| 岱山县| 顺平县| 剑河县| 定远县| 上饶县| 长汀县| 寿阳县| 安义县| 永平县| 务川| 德惠市|