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


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

测试L2

拓扑如下:
在这里插入图片描述
待测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"

测试结果如下:
在这里插入图片描述
TRex 1G网卡线速发包1.5Mpps,VPP基本线速转发,不丢包

Debug版本测试结果如下:
在这里插入图片描述
Debug版本性能会下降很多, 测试性能的时候需要去掉debug开关

测试L3

拓扑如下:
在这里插入图片描述
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

测试结果如下:
在这里插入图片描述
线速转发

测试vxlan隧道性能

拓扑如下:
在这里插入图片描述
拓扑解析:
在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客户端配置:
在这里插入图片描述
在这里插入图片描述
测试结果如下:
在这里插入图片描述

性能优化:

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

set interface ip vxlan-bypass TenGigabitEthernet7/0/1 

测试结果如下:
在这里插入图片描述
可见加入了这条命令转发提升了100Kpps。

测试ipsec加密隧道性能

拓扑如下:
在这里插入图片描述
本次使用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会有隧道信息输出

在这里插入图片描述
在这里插入图片描述
第四步:配置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

测试结果如下:
在这里插入图片描述

性能优化一:Cryptodev加密引擎

v18.10以及默认编译了Cryptodev加解密引擎,只需在startup.conf文件中开启即可。

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的三倍之多。

性能优化二: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,则会报错:
在这里插入图片描述
若支持,则输出:
连续回车安装即可
在这里插入图片描述
安装完成:
在这里插入图片描述

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
}

测试结果如下:
在这里插入图片描述

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要将一台配置FD.io VPP-DPDK的主机配置为三层路由器,您可以按照以下步骤进行操作: 1. 安装和配置FD.io VPP-DPDK:在中间主机上,按照之前提到的方法安装和配置FD.io VPP-DPDK。确保您正确设置了DPDK环境变量,并在VPP配置文件中启用DPDK。 2. 配置网络接口:为VPP配置网络接口,以便进行路由。您可以使用VPP命令行界面或配置文件来完成此操作。以下是一个示例命令行配置: ``` vpp# set interface ip address <INTERFACE_NAME> <IP_ADDRESS>/<SUBNET_MASK> vpp# set interface state <INTERFACE_NAME> up ``` 在上述命令中,`<INTERFACE_NAME>`是VPP接口的名称,`<IP_ADDRESS>`和`<SUBNET_MASK>`是该接口的IP地址和子网掩码。确保为每个接口分配唯一的IP地址。 3. 配置静态路由:为了实现三层路由,您需要在VPP配置适当的静态路由。使用VPP命令行界面或配置文件添加静态路由规则。以下是一个示例命令行配置: ``` vpp# ip route add <DESTINATION_NETWORK>/<SUBNET_MASK> via <NEXT_HOP_IP_ADDRESS> <INTERFACE_NAME> ``` 在上述命令中,`<DESTINATION_NETWORK>/<SUBNET_MASK>`是要路由的目标网络及其子网掩码,`<NEXT_HOP_IP_ADDRESS>`是下一跳的IP地址,`<INTERFACE_NAME>`是指向下一跳的VPP接口的名称。 4. 启用IP转发:为了使中间主机能够作为路由器转发数据包,您需要启用IP转发功能。在Linux上,您可以使用以下命令启用IP转发: ``` sudo sysctl -w net.ipv4.ip_forward=1 ``` 确保在中间主机上执行此命令。 5. 配置其他主机:为其他两台主机配置正确的IP地址,并将它们的默认网关设置为中间主机的IP地址。这样,其他主机将发送给非本地网络的数据包到中间主机进行路由。 请注意,这只是一个简单的示例配置,您可能需要根据您的网络拓扑和需求进行更详细的配置。确保您了解网络拓扑、子网划分和路由表配置等基本概念,并参考FD.io VPP的官方文档以获取更多详细信息和配置选项。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值