• Anntec ZKUXFT XT2 FGPA卡DPDK使用方法


    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系统预先安装依赖库,命令如下: 

    1. yum install numactl-devel
    2. yum install libpcap-devel

    ubuntu系统预先安装依赖库,命令如下: 

    1. apt-get install libnuma-dev
    2. apt-get install libpcap-dev

    3.   解压、编译安装包 

    1. tar zxf anntec-<version>-<dpdkversion>.tar.gz
    2. cd anntec -<version>-< dpdkversion >
    3. make
    4. make install

    4. 设置 DPDK 运行环境 

    4.1设置大页内存 

    1. x86
    2. echo 4096 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
    3. arm
    4. echo 20 > /sys/devices/system/node/node0/hugepages/hugepages-524288kB/nr_hugepages

    4.2导入igb_uio驱动 

    1. modprobeuio
    2. insmod ./kmod/igb_uio.ko

    4.3绑定网卡

     Ethernet 类型卡,绑定方式如下: 

    1. ./usertools/dpdk-devbind.py --bind=igb_uio<pci bus>
    2. 注: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 类型卡,绑定方式如下:   

    1. echo 1e92 <devid> >/sys/bus/pci/drivers/igb_uio/new_id
    2. 注: devid 可以通过命令:lspci -n|grep 1e92|awk -F: '{print $4}'查看
    3. 例如: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的链接信息,如下图:  

     解除绑定 

    1. echo <pci bus> > /sys/bus/pci/drivers/igb_uio/unbind
    2. 例如:echo 0000:0c:00.0 > /sys/bus/pci/drivers/igb_uio/unbind

    5. 使用 TESTPMD 性能测试 

    5.1设置共享库路径 

    1. x86
    2. export LD_LIBRARY_PATH=/XXX/anntec-<version>-<dpdkversion>/build/x86_64/lib
    3. arm
    4. export LD_LIBRARY_PATH=/XXX/anntec-<version>-<dpdkversion>/build/aarch64/lib
    5. 注:xxx表示存放anntec-<version>-<dpdkversion>的根路径

     5.2使用testpmd x86 

    1. x86
    2. ./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
    3. arm
    4. ./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
    5. 注:除了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只发数据 

    1. ./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
    2. testpmd> set fwd txonly
    3. testpmd> set txpkts 1024 /设置发包大小,默认64
    4. testpmd> start
    5. testpmd> show port stats all
    6. testpmd> quit

    5.2.5使用testpmd只接收数据 

    1. ./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
    2. testpmd> set fwd rxonly
    3. testpmd> start
    4. testpmd> show port stats all
    5. testpmd> quit

    5.2.6 批处理运行

    1. nicarg=" "
    2. nic_pci=`lspci -nn|grep -E '1e92|0022'|awk '{print $1}'`
    3. for i in $nic_pci
    4. do
    5. nicarg="$nicarg -w $i"
    6. done
    7. pwd=`pwd`
    8. arch=`uname -m`
    9. export LD_LIBRARY_PATH=$pwd/build/$arch/lib
    10. echo $LD_LIBRARY_PATH
    11. ./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网卡使用

    1. export LD_LIBRARY_PATH=/opt/anntec-1.2.1-dpdk19.11.3gcc4.8.5/build/x86_64/lib
    2. 网闸模式
    3. ./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
    4. 虚拟网卡模式
    5. ./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

  • 相关阅读:
    matlab中narginchk函数用法及其举例
    《Python+Kivy(App开发)从入门到实践》自学笔记:高级UX部件——RecycleView遍历并显示数据
    flink redis connector需要防止包冲突
    Kubernetes(k8s)网络策略NetworkPolicy
    QT+OSG/osgEarth编译之三十八:Snappy+Qt编译(一套代码、一套框架,跨平台编译,版本:Snappy-1.1.9)
    洛谷P6877 長いだけのネクタイ
    C#与C++数据类型的相互转换。 C#使用非托管的dll,如何封送类,结构体、联合体,不同类型的数组、以及封送回调方法?
    【QT】qtcreator便捷快捷键以及QML介绍
    PHP Hyperf框架 RPC调用内存泄露
    SOFA-RPC学习记录
  • 原文地址:https://blog.csdn.net/weixin_42414349/article/details/128158465