1. 建议环境
CPU Architecture | x86_64、aarch64 |
CPU MHz: | 2000以上 |
Memory | 每个node空闲内存超过2G |
硬盘 | 剩余空间大于100M |
OS | Ubuntu,centos,银河麒麟,UOS等Linux |
Linux kernel version | 3.10.0及其以上 |
Boot setting | isolcpus=1-8nohz_full=1-8rcu_nocbs=1-8 |
root权限 | 使用dpdk尽量使用root权限 |
2. 预先安装依赖库
centos系统预先安装依赖库,命令如下:
yum install numactl-devel
yum install libpcap-devel
ubuntu系统预先安装依赖库,命令如下:
apt-get install libnuma-dev
apt-get install libpcap-dev
3. 解压、编译安装包
tar zxf anntec-<version>-<dpdkversion>.tar.gz
cd anntec -<version>-< dpdkversion >
make
make install
4. 设置 DPDK 运行环境
4.1设置大页内存
x86
echo 4096 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
arm
echo 20 > /sys/devices/system/node/node0/hugepages/hugepages-524288kB/nr_hugepages
4.2导入igb_uio驱动
modprobeuio
insmod ./kmod/igb_uio.ko
4.3绑定网卡
Ethernet 类型卡,绑定方式如下:
./usertools/dpdk-devbind.py --bind=igb_uio<pci bus>
注:pci bus 可以通过命令:lspci -n|grep 1e92|awk '{print $1}'查看例如:./usertools/dpdk-devbind.py --bind=igb_uio 01:00.0
查看是否绑定成功
./usertools/dpdk-devbind.py -s
绑定成功会在DPDK-compatible driver下面看见相应的pci信息,如下图:
非Ethernet 类型卡,绑定方式如下:
echo 1e92 <devid> >/sys/bus/pci/drivers/igb_uio/new_id
注: devid 可以通过命令:lspci -n|grep 1e92|awk -F: '{print $4}'查看
例如:echo 1e92 0022 >/sys/bus/pci/drivers/igb_uio/new_id
查看是否绑定成功 :
ls -l /sys/bus/pci/drivers/igb_uio/
绑定成功会在/sys/bus/pci/drivers/igb_uio/目录下看见pci的链接信息,如下图:
解除绑定
echo <pci bus> > /sys/bus/pci/drivers/igb_uio/unbind
例如:echo 0000:0c:00.0 > /sys/bus/pci/drivers/igb_uio/unbind
5. 使用 TESTPMD 性能测试
5.1设置共享库路径
x86
export LD_LIBRARY_PATH=/XXX/anntec-<version>-<dpdkversion>/build/x86_64/lib
arm
export LD_LIBRARY_PATH=/XXX/anntec-<version>-<dpdkversion>/build/aarch64/lib
注:xxx表示存放anntec-<version>-<dpdkversion>的根路径
5.2使用testpmd x86
x86
./build/x86_64/app/testpmd -d ./build/x86_64/lib/librte_pmd_xnic.so -d ./build/x86_64/lib/librte_pmd_xnic2.so -d ./build/x86_64/lib/librte_mempool_ring.so -cff -n4 -w <pci bus> -w <pci bus>,desc_prefetch=1,cmpt_desc_len=16 -- -i --nb-cores=3 --rxq=1 --txq=1 -rxd=2048 --txd=2048 --burst=64 --mbuf-size=4224 --total-num-mbufs=262144
arm
./build/aarch64/app/testpmd -d ./build/aarch64/lib/librte_pmd_xnic.so -d ./build/aarch64/lib/librte_pmd_xnic2.so -d ./build/aarch64/lib/librte_mempool_ring.so -cff -n4 w <pci bus> -w <pci bus>,desc_prefetch=1,cmpt_desc_len=16 -- -i --nb-cores=3 --rxq=1 --txq=1 --rxd=2048 --txd=2048 --burst=64 --mbuf-size=4224 --total-num-mbufs=262144
注:除了pci bus是需要根据实际环境变化的,其他参数尽量别修改
5.2.1使用testpmd开始收发数据
testpmd> start
5.2.2使用testpmd查看收发数据状态
testpmd> show port stats all
5.2.3使用testpmd结束收发数据
testpmd>quit
5.2.4使用testpmd只发数据
./build/x86_64/app/testpmd -d ./build/x86_64/lib/librte_pmd_xnic.so d ./build/x86_64/lib/librte_pmd_xnic2.so -d ./build/x86_64/lib/librte_mempool_ring.so -cff -n4 -w <pci bus> -w <pci bus>,desc_prefetch=1,cmpt_desc_len=16 -- -i --nb-cores=3 --rxq=1 --txq=1 -rxd=2048 --txd=2048 --burst=64 --mbuf-size=4224 --total-num-mbufs=262144
testpmd> set fwd txonly
testpmd> set txpkts 1024 /设置发包大小,默认64
testpmd> start
testpmd> show port stats all
testpmd> quit
5.2.5使用testpmd只接收数据
./build/x86_64/app/testpmd -d ./build/x86_64/lib/librte_pmd_xnic.so d ./build/x86_64/lib/librte_pmd_xnic2.so -d ./build/x86_64/lib/librte_mempool_ring.so -cff -n4 -w <pci bus> -w <pci bus>,desc_prefetch=1,cmpt_desc_len=16 -- -i --nb-cores=3 --rxq=1 --txq=1 -rxd=2048 --txd=2048 --burst=64 --mbuf-size=4224 --total-num-mbufs=262144
testpmd> set fwd rxonly
testpmd> start
testpmd> show port stats all
testpmd> quit
5.2.6 批处理运行
nicarg=" "
nic_pci=`lspci -nn|grep -E '1e92|0022'|awk '{print $1}'`
for i in $nic_pci
do
nicarg="$nicarg -w $i"
done
pwd=`pwd`
arch=`uname -m`
export LD_LIBRARY_PATH=$pwd/build/$arch/lib
echo $LD_LIBRARY_PATH
./build/$arch/app/testpmd -d ./build/$arch/lib/librte_pmd_xnic.so -d ./build/$arch/lib/librte_pmd_xnic2.so -d ./build/$arch/lib/librte_mempool_ring.so -c3 -n4 $nicarg -- -i --nb-cores=1 --rxq=1 --txq=1 --rxd=2048 --txd=2048 --burst=64 --mbuf-size=4224 --total-num-mbufs=262144
5.3 虚拟NET_TAP网卡使用
export LD_LIBRARY_PATH=/opt/anntec-1.2.1-dpdk19.11.3gcc4.8.5/build/x86_64/lib
网闸模式
./build/x86_64/app/testpmd -d./build/x86_64/lib/librte_pmd_anntec.so -d ./build/x86_64/lib/librte_mempool_ring.so -cf -n4 -w 04:00.1 -w 04:00.0,desc_prefetch=1,cmpt_desc_len=16 -- -i --nb-cores=3 --rxq=1 --txq=1 --rxd=2048 --txd=2048 --burst=64 --mbuf-size=4224 --total-num-mbufs=262144
虚拟网卡模式
./build/x86_64/app/testpmd -d ./build/x86_64/lib/librte_pmd_anntec.so -d ./build/x86_64/lib/librte_pmd_tap.so -d ./build/x86_64/lib/librte_mempool_ring.so -cf -n4 -w 01:00.0 --vdev=net_tap0,iface=enp1s0f0,mac='00:64:74:61:70:12' -- -i --txq=1 --rxq=1 --txd=2048 --rxd=2048 --burst=64 --mbuf-size=4224 --total-num-mbufs=262144