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"
测试结果如下:
TRex 1G网卡线速发包1.5Mpps,VPP基本线速转发,不丢包
Debug版本测试结果如下:
可以看得出Debug版本性能会下降很多。
- 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
拓扑如下:
拓扑解析:
在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
在vpp1和vpp2互联接口加入vxlan-bypass
set interface ip vxlan-bypass TenGigabitEthernet7/0/1
测试结果如下:
可见加入了这条命令转发提升了100Kpps。
拓扑如下:
本次使用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会有隧道信息输出
#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
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
}
测试结果如下:
加入了DPDK的Cryptodev引擎性能是原生ipsec的三倍之多。
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,则会报错:
若支持,则输出:
连续回车安装即可
安装完成:
lspci可查看多出来的QAT VF
选择其中两个,将其绑定到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
}