FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)

性能测试

  • 测试L2
  • 测试L3
  • 测试vxlan隧道性能
    • 性能优化:
  • 测试ipsec加密隧道性能
    • 性能优化一:Cryptodev加密引擎
    • 性能优化二:QAT加密卡

硬件:Intel® Atom™ CPU C3758 @ 2.20GHz, 4G内存, 4核,1G网卡
软件:ubuntu16.04, vpp18.10
TRex双向线速发64字节的小包。

测试L2

拓扑如下:
FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)_第1张图片
待测vpp设备配置:
startup.conf

cpu {
         main-core 1
         corelist-workers 0,2,3
}
vppctl set interface l2 bridge TenGigabitEthernet7/0/0 10
vppctl set interface l2 bridge TenGigabitEthernet7/0/1 10

TRex发包器配置:
vi /etc/trex_cfg.yaml

- port_limit      : 2
  version         : 2
#List of interfaces. Change to suit your setup. Use ./dpdk_setup_ports.py -s to see available options
  interfaces    : ["07:00.0","07:00.1"]
  port_info       :  # Port IPs. Change to suit your needs. In case of loopback, you can leave as is.

     - dest_mac  : "c4:00:ad:a2:02:fb"
       src_mac   : "c4:00:ad:a2:02:fa"
     - dest_mac  : "c4:00:ad:a2:02:fa"
       src_mac   : "c4:00:ad:a2:02:fb"

测试结果如下:
FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)_第2张图片
TRex 1G网卡线速发包1.5Mpps,VPP基本线速转发,不丢包

Debug版本测试结果如下:
FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)_第3张图片
可以看得出Debug版本性能会下降很多。

测试L3

拓扑如下:
FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)_第4张图片
TRex发包器配置

- port_limit      : 2
  version         : 2
#List of interfaces. Change to suit your setup. Use ./dpdk_setup_ports.py -s to see available options
  interfaces    : ["07:00.0","07:00.1"]
  port_info       :  # Port IPs. Change to suit your needs. In case of loopback, you can leave as is.
         - ip    : 10.10.10.100
           default_gw : 10.10.10.1
         - ip    : 90.10.10.100
           default_gw : 90.10.10.1

测试结果如下:
FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)_第5张图片
线速转发

测试vxlan隧道性能

拓扑如下:
FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)_第6张图片
拓扑解析:
在vpp1和vpp2间搭建直连vxlan隧道。
TRex两端相当于vxlan lan侧PC。
把loop口、lan侧物理网卡及vxlan隧道端口绑定在一个桥里面

#vpp1的命令行配置如下:
vppctl
create vxlan tunnel src 10.10.10.1 dst 10.10.10.2 vni 13 decap-next l2
set interface l2 bridge vxlan_tunnel0 13 1
loopback create-interface
set interface l2 bridge loop0 13 bvi
set interface state loop0 up
set interface ip address loop0 20.10.10.1/24
set interface state TenGigabitEthernet7/0/1 up
set interface ip address TenGigabitEthernet7/0/1 10.10.10.1/24
set interface state TenGigabitEthernet7/0/0 up
set interface l2 bridge TenGigabitEthernet7/0/0 13 0
#vpp2的命令行配置如下:
vppctl
create vxlan tunnel src 10.10.10.2 dst 10.10.10.1 vni 13 decap-next l2
set interface l2 bridge vxlan_tunnel0 13 1
loopback create-interface
set interface l2 bridge loop0 13 bvi
set interface state loop0 up
set interface ip address loop0 20.10.10.2/24
set interface state TenGigabitEthernet7/0/1 up
set interface ip address TenGigabitEthernet7/0/1 10.10.10.2/24
set interface state TenGigabitEthernet7/0/0 up
set interface l2 bridge TenGigabitEthernet7/0/0 13 0

TRex配置如下:

- port_limit      : 2
  version         : 2
#List of interfaces. Change to suit your setup. Use ./dpdk_setup_ports.py -s to see available options
  interfaces    : ["07:00.0","07:00.1"]
  port_info       :  # Port IPs. Change to suit your needs. In case of loopback, you can leave as is.
         - ip    : 20.10.10.100
           default_gw : 20.10.10.200
         - ip    : 20.10.10.200
           default_gw : 20.10.10.100

TRex客户端配置:
FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)_第7张图片
FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)_第8张图片
测试结果如下:
FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)_第9张图片

性能优化:

在vpp1和vpp2互联接口加入vxlan-bypass

set interface ip vxlan-bypass TenGigabitEthernet7/0/1 

测试结果如下:
FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)_第10张图片
可见加入了这条命令转发提升了100Kpps。

测试ipsec加密隧道性能

拓扑如下:
FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)_第11张图片
本次使用IKEv2动态配置ipsec,配置顺序有要求,需要发起者和响应者先打通网络,ike协商成功后方能link出一个ipsec接口。命令行配置顺序如下:

第一步:配置发起者协商策略及基本网络

#vpp1配置:
set int state TenGigabitEthernet7/0/0 up 
set int ip address TenGigabitEthernet7/0/0 20.10.10.1/24        
set int state TenGigabitEthernet7/0/1 up 
set int ip address TenGigabitEthernet7/0/1 10.10.10.1/24 
ikev2 profile add pr1  
ikev2 profile set pr1 auth shared-key-mic string Vpp123 
ikev2 profile set pr1 id local fqdn vpp1.home 
ikev2 profile set pr1 id remote fqdn vpp2.home
ikev2 profile set pr1 responder TenGigabitEthernet7/0/1 10.10.10.2
ikev2 profile set pr1 ike-crypto-alg aes-cbc 128 ike-integ-alg sha1-96 ike-dh modp-1024 
ikev2 profile set pr1 esp-crypto-alg aes-cbc 128 esp-integ-alg sha1-96 esp-dh modp-1024
ikev2 profile set pr1 traffic-selector local ip-range 20.10.10.0 - 20.10.10.200 port-range 0 - 65535 protocol 0 
ikev2 profile set pr1 traffic-selector remote ip-range 30.10.10.0 - 30.10.10.200 port-range 0 - 65535 protocol 0

第二步:配置响应者策略及基本网络

#vpp2配置:
set int state TenGigabitEthernet7/0/0 up 
set int ip address TenGigabitEthernet7/0/0 30.10.10.1/24        
set int state TenGigabitEthernet7/0/1 up 
set int ip address TenGigabitEthernet7/0/1 10.10.10.2/24 
ikev2 profile add pr1  
ikev2 profile set pr1 auth shared-key-mic string Vpp123 
ikev2 profile set pr1 id local fqdn vpp2.home 
ikev2 profile set pr1 id remote fqdn vpp1.home
ikev2 profile set pr1 traffic-selector local ip-range 30.10.10.0 - 30.10.10.200 port-range 0 - 65535 protocol 0 
ikev2 profile set pr1 traffic-selector remote ip-range 20.10.10.0 - 20.10.10.200 port-range 0 - 65535 protocol 0

第三步:发起者发起协商

#vpp1配置:
ikev2 initiate sa-init pr1  //可多执行几遍,如果协商成功sh int会出现一个ipsec0的接口
//并且show ipsec会有隧道信息输出

FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)_第12张图片
FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)_第13张图片
第四步:配置ipsec接口路由

#vpp1配置:
set int state ipsec0 up 
ip route add 30.10.10.0/24 via ipsec0 
set int unnumbered ipsec0 use TenGigabitEthernet7/0/1
#vpp2配置:
set int state ipsec0 up 
ip route add 20.10.10.0/24 via ipsec0 
set int unnumbered ipsec0 use TenGigabitEthernet7/0/1

命令行配置完成。

两台vpp startup.conf配置如下:

cpu {
        main-core 0
        corelist-workers 1,2,3  //工作核心不是越多越好,要根据队列配合。

}
dpdk {
         dev 0000:07:00.0 {
             # num-rx-queues 2  //错误示范:接口上不要配收发包队列,配置不好会严重影响性能
         }
         dev 0000:07:00.1 
         uio-driver igb_uio
}

TRex 配置文件如下:

- port_limit      : 2
  version         : 2
#List of interfaces. Change to suit your setup. Use ./dpdk_setup_ports.py -s to see available options
  interfaces    : ["07:00.0","07:00.1"]
  port_info       :  # Port IPs. Change to suit your needs. In case of loopback, you can leave as is.
         - ip    : 20.10.10.100
           default_gw : 20.10.10.1
         - ip    : 30.10.10.100
           default_gw : 30.10.10.1

测试结果如下:
FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)_第14张图片

性能优化一:Cryptodev加密引擎

v18.10以及默认编译了Cryptodev加解密引擎,只需在startup.conf文件中开启即可。
推荐:http://syswift.com/166.html

cpu {
        main-core 0
        corelist-workers 1-3

}
dpdk {
         dev default{
             num-tx-desc 1024
             num-rx-desc 1024
         }
         dev 0000:07:00.0
         dev 0000:07:00.1
         uio-driver igb_uio
         vdev crypto_aesni_mb0   //加入crypto-input节点
         vdev crypto_aesni_mb1
         socket-mem 512
         no-multi-seg
}

测试结果如下:
FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)_第15张图片
加入了DPDK的Cryptodev引擎性能是原生ipsec的三倍之多。

性能优化二:QAT加密卡

Intel® QuickAssist Technology是Intel®公司提供的一种高性能数据安全和压缩的加速方案。也就是说只有Intel特定的芯片才支持。
本文使用的Intel® Atom™ CPU C3758 正是支持QAT加密卡的C3000系列。
关于CPU worker和 Cryptodev、qat的关系解释如下:
(复制于:http://syswift.com/166.html)

每一个线程都是一个Worker,它会将所有分配给它的网络帧在每个节点中都过一遍。因为每个Worker需要有2个可用的DPDK Cryptodev Queue Pair,一个用于处理用于输出的数据流,另一个用于处理输入的数据流。因此,为了让每个Worker都有必要的Cryptodev资源可用,我们为VPP DPDK Cryptodev作了如下限定:可用的DPDK Cryptodev的Queue Pair总数必须大于等于VPP Worker数量的2倍,而且将优先配置Intel® QuickAssist (QAT)资源。

DPDK QAT 驱动所支持的DH895xCC设备又能提供最多32个VF (Virtual Functions),每个VF拥有2个Queue Pair,正好提供给一个Worker使用。而DPDK的每个软件Cryptodev仅支持一种或几种Crypto算法,但单个Cryptodev就支持8个Queue Pair。假设我们配置了两个VF 和两个Cryptodev,那么VPP DPDK IPsec节点初始化时就能侦测到2个QAT的VF和2个AESNI_MB软件设备。2个VF能提供4个Queue Pair,而2个AESNI_MB则能提供16个,那么所有的Queue Pair加起来够10个Worker使用,而且第1,2个Worker将分得速度更快,时延更低的QAT资源。如果你的系统有超过10个Worker,那么不好意思,Queue Pair不够分的,系统只能拉响警报并drop所有网络帧。

安装qat驱动:
在vpp1和vpp2设备上分别安装QAT驱动

mkdir qat
cd qat
wget https://01.org/sites/default/files/downloads/intelr-quickassist-technology/qat1.7.l.4.2.0-00012.tar.gz
tar -zxvf qat1.7.l.4.2.0-000012.tar.gz

#下载依赖  //不同设备缺少的依赖不同,可根据报错安装依赖软件
apt install bc  linux-headers-`uname -r` lshw
./installer.sh
选择3  Install SR-IOV Host Acceleration

如果CPU不支持QAT,则会报错:
FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)_第16张图片
若支持,则输出:
连续回车安装即可
FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)_第17张图片
安装完成:
FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)_第18张图片

lspci可查看多出来的QAT VF
FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)_第19张图片
选择其中两个,将其绑定到dpdk中。(第一个不要选,从01.01.0开始)
修改startup.conf

cpu {
        main-core 0
        corelist-workers 1-2  //两个QAT VF 最多两个work核心

}
dpdk {
         huge-dir /mnt/huge
         uio-driver igb_uio
         socket-mem 512
         no-multi-seg
         no-tx-checksum-offload
         dev default{
             num-tx-desc 1024
             num-rx-desc 1024
         }
         dev 0000:07:00.0
         dev 0000:07:00.1
         dev 0000:01:01.1
         dev 0000:01:01.2   //在QAT VF存在的情况下会优先选择QAT
}

测试结果如下:
FD.IO-VPP研究及使用七(使用TRex测试vpp隧道性能)_第20张图片

你可能感兴趣的:(VPP)