1.工具下载
1.ubuntu
安装工具:
sudo apt-get install meson
sudo apt-get install ninja
sudo apt-get install python3-pyelftools
2.centos
yum install -y python3-pip numactl-devel libibverbs-utils libpcap-devel
//安装libpcap依赖包
wget http://mirror.centos.org/centos/9/PowerTools/x86_64/os/Packages/libpcap-devel-1.9.1-5.el8.x86_64.rpm
// libpcap-devel 无法下载使用上面安装包路径
yum install -y libpcap.x86_64
sudo rpm -ivh libpcap-devel-1.9.1-5.el8.x86_64.rpm
pip3 install -i Simple Index meson ninja
2.启动项更新
启动iommu并配置大页内存:
sudo vim /etc/default/grub
GRUB_CMDLINE_LINUX参数,添加intel_iommu=on iommu=pt default_hugepages=1G hugepagesz=2M hugepages=1024
保存退出后执行如下命令,然后重启服务器
sudo grub-mkconfig -o /boot/grub/grub.cfg
如果是ubuntu可以直接输入命令update-grub.
3.下载编译
进入dpdk官网https://www.dpdk.org/下载dpdk22.11.个人觉得github上下载dpdk更快点,同时还能切换到过去版本。但是可能有时候无法登录github环境。
进入dpdk目录
meson build
cd build
ninja
ninja install
3.1绑定PMD
uio和vfio都可以.uio或者vfio的作用是将网卡的pcie bar空间以及中断消息等暴露给dpdk。因为dpdk是应用程序,无法直接访问pcie的bar空间。
UIO
先编译dpdk-kmod.
dpdk-kmod编译
git clone git://dpdk.org/dpdk-kmods //已有合适的安装包
cd dpdk-kmods/linux/igb_uio/
make
安装
insmod dpdk-kmods/linux/igb_uio/igb_uio.ko
注意:加载igb_uio的时候出现一下问题,原因是该ko文件需要依赖,先加载modprobe uio
加载dn200驱动,将网卡处于down的状态
绑定网卡,且查看网卡状态.
usertools/dpdk-devbind.py --bind=igb_uio enp1s0f0
usertools/dpdk-devbind.py --status
VFIO
modprobe vfio-pci
usertools/dpdk-devbind.py --bind=vfio-pci 01:00.0
其他基本一致.
3.2 创建大页
mkdir -p /dev/hugepages
mountpoint -q /dev/hugepages || mount -t hugetlbfs nodev /dev/hugepages
echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages;
3.3 packetgen
下载packetgen
git clone https://github.com/pktgen/Pktgen-DPDK.git
切换分支到23.06
进入相应目录,make
./Builddir/app/pktgen -l 0-2 -n 4 -a 0000:01:00.0 -- -P -T -m "[1:2].0"
3.4 运行
进入build目录下。
./app/dpdk-testpmd -l 0-2 --main-lcore 2 -n 4 -a 01:00.0 -a 01:00.1 -- --record-core-cycles --record-burst-stats --coremask=3 --rxq=2 --txq=2 -i