0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

NVIDIA BlueField DPU应用程序的不同编译方法

星星科技指导员 来源:NVIDIA 作者:Anuradha Karuppiah 2022-04-20 14:12 次阅读

随着我们进入 NVIDIA BlueField DPU 应用程序开发的新世界,高效地设置构建步骤非常重要,以便您能够无缝地{code =》 compile =》 unit-test}。在本文中,我介绍了为 DPU 编译应用程序的不同方法。

DOCA 数据平面插件的自由范围路由

在 DPU 应用开发 在系列文章中,我谈到了在中创建 DOCA 数据平面插件 FRR 用于卸载策略。 FRR 的代码计数接近 100 万行( 789678 SLOC ),这使得它成为测量构建时间的最佳候选。

直接在 BlueField DPU 上开发

DPU 具有 Arm64 体系结构,一种快速启动 DPU 应用程序的方法是直接在 DPU 上开发。本测试使用的是 NVIDIA BlueField2 ,带有 8G RAM 和 8xCortex-A72 CPU

我安装了 BlueField 启动文件( BFB ),它为 DPU 提供 Ubuntu 20.04.3 操作系统映像。它还包括 DOCA-1.2 和 DPDK-20.11.3 的库。为了使用 DOCA 库构建应用程序,我将 DPDK pkgconfig位置添加到PKG_CONFIG路径。

root@dpu-arm:~# export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/mellanox/dpdk/lib/aarch64-linux-gnu/pkgconfig 

接下来,通过克隆 FRR 并切换到 DOCA 数据平面插件分支,我在 DPU 上设置了我的代码工作区。

root@dpu-arm:~/code# git clone  https://github.com/AnuradhaKaruppiah/frr.git  
root@dpu-arm:~/code# cd frr 
root@dpu-arm:~/code/frr# git checkout dp-doca 

FRR 需要一系列不断发展的先决条件,这些先决条件在FRR 社区文档安装了这些依赖项后,我将 FRR 配置为包括 DPDK 和 DOCA 数据平面插件。

root@dpu-arm:~/code/frr# ./bootstrap.sh 

root@dpu-arm:~/code/frr# ./configure --build=aarch64-linux-gnu --prefix=/usr --includedir=\${prefix}/include --mandir=\${prefix}/share/man --infodir=\${prefix}/share/info --sysconfdir=/etc --localstatedir=/var --disable-silent-rules --libdir=\${prefix}/lib/aarch64-linux-gnu --libexecdir=\${prefix}/lib/aarch64-linux-gnu --disable-maintainer-mode --disable-dependency-tracking --enable-exampledir=/usr/share/doc/frr/examples/ --localstatedir=/var/run/frr --sbindir=/usr/lib/frr --sysconfdir=/etc/frr --with-vtysh-pager=/usr/bin/pager --libdir=/usr/lib/aarch64-linux-gnu/frr --with-moduledir=/usr/lib/aarch64-linux-gnu/frr/modules "LIBTOOLFLAGS=-rpath /usr/lib/aarch64-linux-gnu/frr" --disable-dependency-tracking --disable-dev-build --enable-systemd=yes --enable-rpki --with-libpam --enable-doc --enable-doc-html --enable-snmp --enable-fpm --disable-zeromq --enable-ospfapi --disable-bgp-vnc --enable-multipath=128 --enable-user=root --enable-group=root --enable-vty-group=root --enable-configfile-mask=0640 --enable-logfile-mask=0640 --disable-address-sanitizer --enable-cumulus=yes --enable-datacenter=yes --enable-bfdd=no --enable-sharpd=yes --enable-dp-doca=yes --enable-dp-dpdk=yes 

因为我用 DPU 作为 my 开发环境Roment ,我构建并安装了 FRR 二进制文件:

root@dpu-arm:~/code# make –j12 all; make install 

以下是构建时间的进展。我用多种方法来衡量:

是时候使用make -j12 all和make install构建和安装二进制文件了

是时候构建相同的二进制文件了,但也可以使用dpkg-buildpackage –j12 –uc –us将它们组装到 Debian 软件包中

第一种方法用于编码和单元测试。第二种生成 DEB 的方法需要与其他外部开发环境上的构建时间进行比较。

时间上的差异是意料之中的。生成一个包需要几个额外的步骤。

使用 DPU 作为开发环境有一些明显的优势。

您可以在不离开工作区的情况下进行编码、构建和安装,然后进行单元测试。

您可以为增量代码更改优化构建。

最后一种选择通常是与完整构建相比,大幅缩短构建时间。例如,我在 FRR 中修改了 DOCA 数据平面代码,并用以下结果重建:

root@dpu-arm:~/code/frr# time make –j12 

>>>>>>>>>>>>> snipped make output >>>>>>>>>>>> 

real 0m3.119s 

user 0m2.794s 

sys 0m0.479s 

虽然这可能会让事情变得更简单,但它需要无限期地为每个开发人员保留 DPU 的许可证,仅用于应用程序开发或维护。您的开发环境可能还需要更多的内存和马力,因此长期来看,这是一个不太可行的选择。

在 x86 服务器上开发

我的 Bluefield2 DPU 由一台 x86-64 Ubuntu 20.04 服务器托管,我在开发环境中使用了这台服务器。

root@server1-x86:~# lscpu |grep "CPU(s):\|Model name" 

CPU(s): 32 

Model name: Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz 

root@server1-x86:~# grep MemTotal /proc/meminfo 

MemTotal: 131906300 kB 

在本例中,构建机器是 x86 ,应用程序将运行的主机是 DPU-Arm64 。有几种方法可以做到这一点:

在 x86 构建机器上使用 Arm 仿真。 A 。 DOCA 开发容器 作为 DOCA 软件包的一部分提供。

使用交叉编译工具链。

在这个测试中,我使用了第一个选项,因为它是最简单的。第二个选项可以提供不同的性能,但创建该工具链有其挑战 。

我在 x86 服务器上下载并加载了bfb_builder_doca_ubuntu_20.04容器,并启动了它。

root@server1-x86:~# sudo docker load -i bfb_builder_doca_ubuntu_20.04-mlnx-5.4.tar 
root@server1-x86:~# docker run -v ~/code:/code --privileged -it -e container=dock 
er doca_v1.11_bluefield_os_ubuntu_20.04-mlnx-5.4:latest 

DOCA 和 DPDK 库预先安装在这个容器中,我只需要将它们添加到PKG_CONFIG路径。

root@86b87b0ab0c2:/code # export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/mellanox/dpdk/lib/aarch64-linux-gnu/pkgconfig 

我在容器中设置了工作区和 FRR 先决条件,与前面的选项相同。

root@86b87b0ab0c2:/code # git clone  https://github.com/AnuradhaKaruppiah/frr.git  
root@86b87b0ab0c2:/code # cd frr 
root@86b87b0ab0c2:/code/frr # git checkout dp-doca 

我可以在这个 DOCA 容器中构建我的应用程序,但我无法对其进行测试。因此,必须将 FRR 二进制文件构建并打包到 DEB 中,然后将其复制到 BlueField DPU 进行测试。我设置了 FRR Debian 规则,以匹配前面选项中使用的 FRR 构建配置,并生成了包:

root@86b87b0ab0c2:/code/frr # dpkg-buildpackage –j12 –uc -us 

表 2 显示了构建时间与以前方法的比较。


表 2 。 DPU Arm 和 X86 构建时间

构建时间的巨大飞跃让我感到惊讶,因为我有一台库存充足的 x86 服务器,而且没有 Docker 限制。因此,将 CPU 和 RAM 扔到一个问题上似乎并不总是有帮助!这种性能下降是因为跨体系结构,正如您在下一个选项中看到的那样。

在 AWS 引力子实例中开发

接下来,我尝试在 Arm 上构建我的应用程序,但这次是在一台马力更大的外部服务器上。为此,我使用了 Amazon EC2 Graviton 实例,其规格与我的 x86 服务器相当。

Arm64 arch , Ubuntu 20.04 操作系统

128G 内存

32 伏 CPU

root@ip-172-31-28-243:~# lscpu |grep "CPU(s):\|Model name" 
CPU(s): 32 
Model name: Neoverse-N1 
root@ip-172-31-28-243:~# grep MemTotal /proc/meminfo 
MemTotal: 129051172 kB 

为了在本例中设置 DOCA 和 DPDK 库,我安装了DOCA SDK 回购元包.

root@ip-172-31-28-243:~# dpkg -i doca-repo-aarch64-ubuntu2004-local_1.1.1-1.5.4.2.4.1.3.bf.3.7.1.11866_arm64.deb 
root@ip-172-31-28-243:~#  apt update 
root@ip-172-31-28-243:~# apt install doca-sdk 

克隆和构建 FRR Debian 包的其余步骤与前面的选项相同。

表 3 显示了构建在 AWS Arm 实例上的运行情况。


表 3 。 DPU Arm 、 X86 和 AWS Arm 的构建时间

这是一个明显的赢家,不需要咖啡。

图 1 显示了这些环境中的编译时间。

图 1 。具有不同选项的 FRR 构建时间

总结

在本文中,我讨论了 DPU 应用程序的几个开发环境:

BlueField 增值税

x86 服务器上的 DOCA 开发容器

AWS 引力计算实例

你可以直接在 DPU 上制作应用程序原型,在 x86 DOCA 开发容器中进行开发实验,然后用 DOCA 抓取一个 AWS Graviton 实例,使其进入 hyperspeed !

关于作者

Anuradha Karuppiah 是 NVIDIA 网络的首席软件工程师。 Anuradha 使用 FRR (自由范围路由软件套件)设计和实现 EVPN 解决方案。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NVIDIA
    +关注

    关注

    14

    文章

    4985

    浏览量

    103026
  • 应用程序
    +关注

    关注

    37

    文章

    3268

    浏览量

    57698
收藏 人收藏

    评论

    相关推荐

    android手机上emulate应用程序方法

    在Android手机上模拟(emulate)应用程序方法通常涉及到使用Android模拟器(Emulator)或类似的工具来模拟Android环境,以便在没有实际物理设备的情况下运行和测试应用程序
    的头像 发表于 12-05 15:33 255次阅读

    NVIDIA DOCA-OFED的主要特性

    NVIDIA DOCA 软件平台释放了 NVIDIA BlueField 网络平台的潜力,并为NVIDIA BlueField和Connec
    的头像 发表于 11-09 13:50 265次阅读

    linux驱动程序编译方法是什么

    Linux驱动程序编译方法主要包括两种: 与内核一起编译编译成独立的内核模块 。以下是对这两种
    的头像 发表于 08-30 14:46 566次阅读

    linux驱动程序编译方法有哪两种

    Linux驱动程序编译方法主要可以归纳为两种: 手动编译 和 使用内核构建系统(Makefile)自动编译 。 1. 手动
    的头像 发表于 08-30 14:39 667次阅读

    NVIDIA BlueField-3 DPU助力思科提高工作负载安全性和运营效率

    、位置和外形尺寸的应用程序工作负载。 思科最近发布了Cisco Secure Workload 3.9 版,将企业的安全性和运营效率提升到了新的水平。它提供了新的功能来缓解威胁和漏洞,并为部署微分段(microsegmentation)提供了更大的灵活性。它现在还扩展到NVIDI
    的头像 发表于 06-27 17:31 766次阅读

    espressif编译时显示应用程序分区低于30%如何调整?

    当用eclipse 编译结束时, 程序弹出提示:应用程序可用分区低于30%(仅563284,一共2097152),请点击 进行调正.. 我试着编辑partition_voip_example.csv
    发表于 06-11 07:30

    借助NVIDIA DOCA 2.7增强AI 云数据中心和NVIDIA Spectrum-X

    NVIDIA DOCA 加速框架为开发者提供了丰富的库、驱动和 API,以便为 NVIDIA BlueField DPU 和 SuperNIC 创建高性能的
    的头像 发表于 05-29 09:22 489次阅读

    NVIDIA DPU编程入门开课仪式在澳门科技大学成功举办

    5 月 24 日,NVIDIA DPU 编程入门开课仪式在澳门科技大学成功举办。作为首个在中国开设 NVIDIA DPU 编程相关课程的高校,来自澳门科技大学不同院系的师生共同见证了本
    的头像 发表于 05-28 09:40 395次阅读

    NVIDIA Omniverse USD Composer能用来做什么?如何获取呢?

    NVIDIA Omniverse™ USD Composer(以前称为 Create)是 NVIDIA Omniverse™ 中用于构建虚拟世界的参考应用程序,允许用户进行组装、模拟和渲染大型场景。
    的头像 发表于 05-20 10:07 828次阅读
    <b class='flag-5'>NVIDIA</b> Omniverse USD Composer能用来做什么?如何获取呢?

    Nvidia的AI芯片路线图分析与解读

    SmartNIC智能网卡/DPU数据处理引擎的下一跳ConnectX-8/BlueField-4目标速率为 800G,与1.6T Quantum和Spectrum-X配套的SmartNIC和DPU的路标仍不明晰,NVLink5.
    发表于 04-29 09:59 995次阅读
    <b class='flag-5'>Nvidia</b>的AI芯片路线图分析与解读

    使用Docker部署Go Web应用程序步骤

    大多数情况下Go应用程序编译成单个二进制文件,web应用程序则会包括模版和配置文件。而当一个项目中有很多文件的时候,由于很多文件没有同步就会导致错误的发生并且产生很多的问题。
    发表于 04-20 09:33 503次阅读
    使用Docker部署Go Web<b class='flag-5'>应用程序</b>步骤

    【从0开始创建AWTK应用程序编译应用到RTOS平台

    AWStudio上编写好AWTK应用程序后,部署到RTOS平台(如STM32)是很方便的,下面就以STM32F429型号为例子来介绍如何编译AWTK应用到RTOS
    的头像 发表于 03-21 08:23 612次阅读
    【从0开始创建AWTK<b class='flag-5'>应用程序</b>】<b class='flag-5'>编译</b>应用到RTOS平台

    应用程序中的服务器错误怎么解决?

    在使用应用程序时,可能会遇到服务器错误的问题。这种错误通常会导致应用程序无法正常运行 ,给用户带来不便。下面将介绍应用程序中的服务器错误及其解决方法,帮助您快速解决这一问题。
    的头像 发表于 03-12 15:13 6215次阅读

    基于NVIDIA DOCA 2.6实现高性能和安全的AI云设计

    网络平台上快速创建应用程序和服务,并启用 NVIDIA BlueField DPUNVIDIA
    的头像 发表于 02-23 10:02 472次阅读

    如何构建linux开发环境和编译软件工程、应用程序

    前文介绍了如何使用官方提供的镜像文件启动开发板,本文将说明如何构建linux开发环境和编译软件工程、应用程序
    的头像 发表于 01-03 12:31 2051次阅读
    如何构建linux开发环境和<b class='flag-5'>编译</b>软件工程、<b class='flag-5'>应用程序</b>