我们前面测试了Ubuntu 26.04作为转发路由器的性能(Ubuntu 26.04 转发性能大考:Desktop居然干翻了Server?),最大峰值带宽来自于Desktop系统,为15.9 Gbps,最大平均带宽为15.4 Gbps。
紧接着,我们又测试了Ubuntu 26.04作为openVPN网关的性能(实测1.23 Gbps!Ubuntu 26.04下OpenVPN自动化部署与极限调优),最大峰值带宽同样来自于Desktop系统,为1.34 Gbps,最大平均带宽为1.32 Gbps。
既然Desktop系统性能这么强,我们后还测试了Desktop系统作为WireGuard网关的性能(1.47 Gbps跑满带宽!Ubuntu 26.04下WireGuard性能暴力实测,OpenVPN真的香不动了?),最大峰值带宽为983 Mbps,最大平均带宽为966 Mbps。对于传统的IPsec协议性能也不含糊,Desktop系统作为IPsec VPN网关时(老兵不死!在Ubuntu 26.04上,经典IPsec真的会被WireGuard彻底取代吗?),最大峰值带宽为458 Mbps,最大平均带宽为448 Mbps。
当然,欲望无止境,带宽不封顶,你可能觉得这点性能不够塞牙缝的,毕竟现在家里基本上已经普及1500 Mbps宽带,甚至有些家庭已经用上万兆网了,那转发性能势必要再往上提一提。
该怎么办呢?还记得我们前面刚刚测试的openEuler吗(VPP转发性能从10G暴增至24G?揭秘OpenEuler虚拟机的极限压榨术)?配置上VPP之后,转发性能直接从10 Gbps飙升到24 Gbps。既然如此,我们就捎带着试一下之前的老版本Ubuntu部署VPP的方法还能不能用(小白也能玩转VPP!Ubuntu 24.04使用APT极速部署VPP)。
我们使用最简单的通过FD.io官方仓库的安装方式。首先,下载并安装FD.io仓库密钥。
curl -s https://packagecloud.io/install/repositories/fdio/master/script.deb.sh | sudo bash
然后,我们就可以安装VPP核心组件了。
apt-get update
apt-get install -y vpp vpp-plugin-core vpp-plugin-dpdk
apt list vpp vpp-plugin-core vpp-plugin-dpdk
接下来,我们修改VPP配置文件/etc/vpp/startup.conf,关闭dpdk,启用af_packet,并配置4个worker,目标承载10 Gbps流量。
cat << ‘EOF’ > /etc/vpp/startup.conf
unix {
nodaemon
log /var/log/vpp/vpp.log
full-coredump
cli-listen /run/vpp/cli.sock
gid vpp
}
api-segment {
gid vpp
}
socksvr {
default
}
cpu {
main-core 0
workers 4
}
plugins {
plugin dpdk_plugin.so { disable }
plugin af_packet_plugin.so { enable }
}
EOF
确保日志目录存在,然后重启VPP服务。
mkdir -p /var/log/vpp
systemctl restart vpp
systemctl enable vpp
接下来,我们开启网卡的混杂模式,并将接口MTU调整为9000字节巨型帧。
ip link set ens192 promisc on
ip link set ens192 mtu 9000
ip link set ens224 promisc on
ip link set ens224 mtu 9000
然后在VPP内建立带多队列的af_packet接口,开启4队列,启用接口并配置IP。
vppctl create host-interface name ens192 num-rx-queues 4 num-tx-queues 4
vppctl create host-interface name ens224 num-rx-queues 4 num-tx-queues 4
vppctl set interface state host-ens192 up
vppctl set interface ip address host-ens192 10.0.1.1/24
vppctl set interface state host-ens224 up
vppctl set interface ip address host-ens224 10.0.2.1/24
然后,再VPP内部设置接口的MTU为9000字节巨型帧。同时配置RX队列核心绑定,将4个队列分别绑定给4个worker线程。
vppctl set interface mtu packet 9000 host-ens192
vppctl set interface mtu packet 9000 host-ens224
vppctl set interface rx-placement host-ens192 queue 0 worker 0
vppctl set interface rx-placement host-ens192 queue 1 worker 1
vppctl set interface rx-placement host-ens192 queue 2 worker 2
vppctl set interface rx-placement host-ens192 queue 3 worker 3
vppctl set interface rx-placement host-ens224 queue 0 worker 0
vppctl set interface rx-placement host-ens224 queue 1 worker 1
vppctl set interface rx-placement host-ens224 queue 2 worker 2
vppctl set interface rx-placement host-ens224 queue 3 worker 3
然后,我们测试两台客户端的可达性。
网络正常,开始打流。
最大带宽12.5 Gbps,平均带宽11.7 Gbps,还算可以。不过,这还是动态省电模式下的性能,我们打开涡轮增压再试一下。
立竿见影,最大带宽来到了18.5 Gbps,平均带宽也达到了17.9 Gbps,相比于内核转发的15.9 Gbps和15.4 Gbps,提升幅度大概为16 %。虽然整体性能不及华为自研的国产系统openEuler(还得是华为,OpenEuler打流能到37 Gbps),但作为一款桌面系统,这表现足以让它在转发界傲视群雄了。
细心的读小伙伴可能会发现,虽然我们在测试Ubuntu 26.04,但apt list结果显示的VPP组件是noble (24.04)版本的包。这说明FD.io官方仓库目前尚未正式发布26.04的专属版本,目前正处于跨版本兼容阶段,如果后续正式适配,转发性能没准就能跟openEuler掰掰手腕了!
声明:来自铁军哥,仅代表创作者观点。链接:https://eyangzhen.com/8077.html