DPDK基础

一、简介

1、DPDK 是 Data Plane Development Kit的缩写;简单来说,DPDK应用程序运行在操作系统的User Space,利用自身提供的数据平面库来收发包处理,绕过了 Linux 内核协议栈对数据包处理过程,以提升报文处理效率。

一句话总结:DPDK可以将用户态的数据不经过内核直接转发到网卡,同样网卡数据也不经过内核直接映射到用户态内存实现加速目的。

2、DPDK网络协议处理过程:

DPDK针对Intel网卡实现了基于轮询方式的PMD(Poll Mode Drivers)驱动,这个驱动由API、用户空间运行的驱动程序构成,该驱动使用无中断方式直接操作网卡的接收和发送队列(除了链路状态通知仍必须采用中断方式以外)。PMD从网卡上接收到数据包后,会直接通过DMA方式传输到预分配的内存中,同时更新无锁环形队列中的数据包指针,不断轮询的应用程序很快就能感知收到数据包,并在预分配的内存地址上直接处理数据包。

3、DPDK核心思想:

(1)通过UIO技术将报文拷贝到应用空间处理;

(2)通过大页内存,降低cache miss ,提高命中率,进而cpu访问速度;

(3)通过CPU亲和性,绑定网卡和线程到固定的core,减少cpu任务切换;

(4)通过无锁队列,减少资源竞争。

4、DPDK框架结构(如下:)

二、DPDK安装

1、安装网卡驱动、升级网卡固件

  1)Mellanox官网下载对应OS的Mellanox驱动: Linux InfiniBand Drivers

  2)安装网卡驱动,执行如下命令:   

       #  cd  /root/MLNX_OFED_LINUX-5.5-1.0.3.2-ubuntu20.04-aarch64

       #  ./mlnxofedinstall

       #  /etc/init.d/opnibd restart

       #  reboot

 4)升级网卡固件:可从华为官网下载同型号网卡同系统下的固件版本直接安装。

2、DPDK安装:

1)安装DPDK依赖包和构建工具:

apt-get install cmake*

apt-get install *numa*

apt-get install libelf-freebsd-dev

apt-get install libelf-dev

apt-install ninja-build*

apt-get install meson*

2)编译安装DPDK:

tar -xJf dpdk-20.11.1.tar.xz 

cd dpdk-stable-20.11.1

meson -Dexamples=all -Dmax_numa_nodes=1 build

ninja -C build

ninja -C build install

3)验证安装是否成功:

   pkg-config --variable pc_path pkg-config

   pkg-config --modversion libdpdk

4)内存大页配置:

a、检查OS Hugepagesize情况:

#  cat /proc/meminfo | grep Huge

b、设置内存大页大小和页面数:

#  vim /etc/default/grub   //修改ubuntu中得grub参数

    GRUB_CMDLINE_LINUX="transparent_hugepage=never  default_hugepagesz=32M  hugepagesz=32M  hugepages=256 "

#  update-grub  (让grub修改生效)

#  reboot

#   cat /proc/cmdline  (确认grub参数是否生效)

5)运行测试,运行 ./build/examples/dpdk-helloworld  ,如下所示: 

三、加载驱动

1、VFIO

VFIO是一个可以安全地把设备I/O、中断、DMA等暴露到用户空间(userspace),从而可以在用户空间完成设备驱动的框架。用户空间直接设备访问,虚拟机设备分配可以获得更高的IO性能,依赖于IOMMU、vfio-pci;相比于UIO,VFIO更为强健和安全。

1)挂载vfio-pci驱动

a)查看是否已经挂载vfio-pci驱动:

未查询到,修改grub配置,开启vfio支持,检查GRUB配置:(内核需要配置支持Intel® VT-x、VT-d,内核通过如下命令查看)

没发现则需要添加:

#vim /etc/default/grub 

   GRUB_CMDLINE_LINUX="transparent_hugepage=never  default_hugepagesz=32M  hugepagesz=32M  hugepages=256   intel_iommu=on iommu=pt"

# update-grub  (让grub修改生效)

# reboot

#  cat /proc/cmdline  (确认grub参数是否生效)

b)加载vfio-pci驱动:

查看网卡驱动是否加载成功:</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

字节之舞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值