克隆源码 git clone https://github.com/baidu/dperf.git cd dperf
make
./build/dperf -h
在进行编译的时候出现下面的错误: root@oitech-pc:/home/oitech/桌面/dperf# make /bin/sh: 1: pkg-config: not found Makefile:44: *** "no installation of DPDK found"。 停止。
表明编译dperf需要依赖DPDK,但是系统中没有安装DPDK
将dperf安装到系统路径中:sudo cp build/dperf /usr/local/bin/
从源码安装DPDK:
sudo apt install -y build-essential meson ninja-build python3-pip
wget https://fast.dpdk.org/rel/dpdk-22.11.4.tar.xz tar -xf dpdk-22.11.4.tar.xz cd dpdk-22.11.4
meson build cd build ninja sudo ninja install
echo 'export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
cd /home/oitech/桌面/dperf make clean make
出现编译错误,麒麟软件源中没有对librte_net_bond的驱动,直接在makefile中将相应的驱动进行移除,然后在进行编译:
cd /home/oitech/桌面/dperf
cp Makefile Makefile.backup
sed -i 's/-lrte_net_bond//g' Makefile
make clean make
查看官方文档 进行相应的参数的补充(完成)
现在查看dpdk是否安装正确,以及相应的网卡是否绑定到PMD驱动(dpdk相应的驱动没有完成)
查看相应网卡的地址:lspci
在DPDK目录下,将网卡驱动绑定到DPDK下: 网卡一般处于活动状态: 步骤1:需要先关闭网络接口:网卡:eno1 关闭eno1接口:ip link set eno1 down 验证接口状态:ip link show eno1
步骤2:将网卡重新绑定到vfio-pci:网卡号:01:00.0 绑定:./usertools/dpdk-devbind.py --bind=vfio-pci 0000:01:00.0 验证绑定结果:./usertools/dpdk-devbind.py --status net
预期成功输出: Network devices using DPDK-compatible driver ============================================ 0000:01:00.0 'I210 Gigabit Network Connection' drv=vfio-pci unused=igb
Network devices using kernel driver =================================== 0000:02:00.0 'I210 Gigabit Network Connection' if=eno2 drv=igb unused=vfio-pci Active
然后设置大页内存:
echo 1024 | sudo tee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
sudo mkdir -p /dev/hugepages sudo mount -t hugetlbfs nodev /dev/hugepages
port 0000:82:00.0 10.79.10.144 10.79.10.106
duration 150s
cps 300k
client 16.0.0.1 1
server 48.0.0.1 5
tx_burst 128
payload_size 1400
listen 80 1
protocol udp
rss l3
client.conf: mode client
cpu 0 1 2 3 4
port 0000:81:00.0 10.79.10.106 10.79.10.144
duration 150s
cps 300k
client 16.0.0.1 1
server 48.0.0.1 5
tx_burst 128
launch_num 3
payload_size 1400
listen 80 1
protocol udp
cc 1
pipeline 4
keepalive 0us
rss l3
双端口测试:(跟单端口类似,只不过需要两个网口绑定到dpdk下面,也就是绑定到vfio-pci驱动下面)
服务端:
mode server
listen 80 1
port 0000:01:00.0 6.6.10.2 6.6.10.1 9c:69:b4:68:91:d8
client 6.6.30.2 16
server 6.6.50.2 4
port 0000:01:00.1 6.6.20.2 6.6.20.1 9c:69:b4:68:91:d9
client 6.6.40.2 16
server 6.6.60.2 4
#port bond4:2(0000:01:00.0,0000:01:00.1) 6.6.10.2 6.6.10.1 9c:69:b4:68:91:d8
#client 6.6.30.2 16
#server 6.6.50.2 8
duration 150s
tx_burst 128
jumbo 9600
payload_size 9500
cps 256
cpu 0 1 2 3 4 5 6 7
protocol udp
客户端:
mode client
cpu 0 1 2 3 4 5 6 7
#port bond4:2(0000:81:00.0,0000:81:00.1) 6.6.10.1 6.6.10.2 9c:69:b4:68:91:c8
#client 6.6.30.2 16
#server 6.6.50.2 8
port 0000:81:00.0 6.6.10.1 6.6.10.2 9c:69:b4:68:91:c8
client 6.6.30.2 16
server 6.6.50.2 4
port 0000:81:00.1 6.6.20.1 6.6.20.2 9c:69:b4:68:91:c9
server 6.6.60.2 4
client 6.6.40.2 16
duration 150s
cps 256
tx_burst 128
launch_num 4
payload_size 9500
listen 80 1
protocol udp
cc 1
keepalive 0us
jumbo 9600
pipeline 4
在进行dpdk的配置的时候,不知道它的相应的网口的ip该如何进行配置: 在将网口的驱动挂载到dpdk之后,不能使用ifconfig等查询网口的ip地址,但是在配置文件中又需要相应的ip地址,那么根据官方文档的描述,不需要查询相应的ip,直接编辑一个虚拟的ip地址,进行相互连接就可以,例如服务器:192.168.100.1 客户端:192.168.100.2
在后面环境配置完成后,进行相应的文件配置的时候,使用配置文件,在官方进行查询
关于海光和intelCPU的使用差异(vfio-pci驱动不能正确加载的问题):
在使用海光的CPU的时候,dpdk的vfio驱动能够正确的进行加载,但是更换成了intel的CPU的时候,会显示下面的错误: root@oitech-pc:/home/oitech/桌面/dpdk-stable-22.11.10# ./usertools/dpdk-devbind.py --bind=vfio-pci 0000:01:00.1 Error: bind failed for 0000:01:00.1 - Cannot bind to driver vfio-pci: [Errno 19] No such device Error: unbind failed for 0000:01:00.1 - Cannot open /sys/bus/pci/drivers//unbind: [Errno 13] Permission denied: '/sys/bus/pci/drivers//unbind' root@oitech-pc:/home/oitech/桌面/dpdk-stable-22.11.10# ./usertools/dpdk-devbind.py --status 即不能进行使用相应的vfio-pci进行驱动的绑定,也不能使用morprobe进行模块的挂载,经过查询,发现是因为,在intel的平台中,vfio-pci的驱动没有被正确的编译在内核中,需要将vfio-pci编译在内核中: 先查看是否支持并开启了IOMMU: intel: cat /proc/cpuinfo | grep vmx AMD: cat /proc/cpuinfo | grep svm
如果支持IOMMU: sudo vim /etc/default/grub :在GRUB_CMDLINE_LINUX行添加intel_iommu=on iommu=pt sudo update-grub:更新linux启动配置文件 sudo reboot:重启系统,重启之后使用cat /proc/cmdline查看有"intel_iommu=on iommu=pt"标识则说明成功了
然后在使用sudo modprobe vfio-pci进行驱动的安装 如果不支持IOMMU: 将vfio相关的驱动都卸载掉 rmmod vfio_iommu_type1 rmmod vfio-pci rmmod vfio
#重新安装驱动 modprobe vfio enable_unsafe_noiommu_mode=1 modprobe vfio-pci
在进行dpdk的配置的时候,不知道它的相应的网口的ip该如何进行配置: 在将网口的驱动挂载到dpdk之后,不能使用ifconfig等查询网口的ip地址,但是在配置文件中又需要相应的ip地址,那么根据官方文档的描述,不需要查询相应的ip,直接编辑一个虚拟的ip地址,进行相互连接就可以,例如服务器:192.168.100.1 客户端:192.168.100.2
是需要写脚本进行相关的测试的