VyOS 1.5引入VPP,手把手教你突破Linux转发天花板

前段时间,我们在Ubuntu 26.04系统中部署了VPP(老脚本立大功:Ubuntu 26.04丝滑部署VPP,实测性能竟比内核转发提升16 %!),并随之发布了一系列性能测试文章(十倍性能提升!Ubuntu 26.04深度实测:当VPP遇上OpenVPN,带宽直接冲破 6.5Gbps!),整体还是比较爽的。

不过,也有小伙伴问,既要安装Ubuntu系统(仅占752MB内存!Ubuntu 26.04 Server版上手:这才是服务器该有的样子!),又要部署VPP(性能暴涨670 %!当WireGuard遇上VPP,带宽直冲7.4 Gbps!),还要考虑VPP与最新版系统的兼容性问题,难免有点伤脑筋,有没有那种开箱即用的傻瓜式方案?

巧了!最近在逛开源社区时,发现VyOS在今年3月31日正式发布了1.5.0 GA版本(代号Circinus)。这个版本祭出了一个大招——原生支持基于VPP的数据加速平面!官方宣称,基于VPP技术加上DPDK驱动,性能最高能比传统的Linux内核数据面快将近15倍。

关键点在于,与许多其他网络操作系统不同,在VyOS中VPP是可选的,并且用户拥有完全控制权。你可以针对单独的接口按需开启,这就叫站着把钱挣了,还把性能给提了。

既然如此,那我也就来了兴致,想上手搞一把。毕竟,记不清是多少年以前了,就有粉丝让我研究一下VyOS,这下也算是一举两得。

那今天我们就在ESXi中部署一台简单测试一下,看看好用不好用。

首先,我们创建一台虚拟机,分配2 GB磁盘,依旧选择精简置备格式(实测狂省几百G!ESXi虚拟机空间刺客终极猎杀指南)。

考虑到要测试性能,我们分配3个网卡,第一个用作管理网卡(带内网络管理和带外网络管理有啥区别?),剩下两个用来测试性能。

第一步,点火开机。

如果你也是第一次用,也会感到奇怪:为什么没有安装的选项?而且第一个和第三个选项还是一样的。

据说这正是VyOS的神奇之处,不见兔子不撒鹰,先拉起内存系统,再往硬盘里装。既然如此,那就让他先开机再说吧。

默认的登录账号密码都是vyos,进入系统之后,我们先看看系统基本信息。

可以看到,系统内核版本为6.6.128,应该是基于Debian12系统开发的,系统版本号为VyOS 1.5.0 (circinus)。

不过眼尖的兄弟肯定发现了,这货的网卡竟然没有自动获取IP地址。当然,这也可以理解,毕竟对于企业设备,默认都是空配置。那我们怎么配置网卡IP地址呢?配置网卡使用DHCP自动获取IP地址的配置命令如下:

configure
set interfaces ethernet eth0 address dhcp
commit

这里有几个避坑指南要提一嘴:

1、进入配置模式时,会提示当前处于live-ISO环境,更改不会保存,除非完成硬盘安装。

2、接口下的地址配置区分IPv4和IPv6,我们配置使用dhcp来获取IPv4地址。

3、配置之后要使用commit提交配置,这跟之前华为的非实时生效配置模式一样(华为路由器配置基于路由的IPSec VPN)。

4、配置模式跟内核模式的前缀不一样,内核模式是(vyos@vyos:~$),配置模式是(vyos@vyos#),但部分命令是通用的,就比如这里查看IP地址的ip add。

当然,我们后续要是要使用SSH进行连接的,那获取到IP地址之后,我们肯定要测试一下SSH登录。

默认情况下提示连接被拒绝,估计是没有启用SSH服务。

果然没有监听22端口,我们查看一下SSH服务状态。

果然,SSH服务处于未激活状态,我们手工启动一下,再次尝试连接。

这次变成了公钥检查被拒绝,这个我们也习惯,默认是拒绝用户名密码登录的,我们调整一下SSH配置文件(Ubuntu开启SSH远程登录),调整PasswordAuthentication的值为yes,并重启SSH服务。

现在就能通过SSH就能登录成功了,还是蛮舒服的。

那接下来,我们先安装一下系统到硬盘。

可以看到,我们分配的2 GB系统盘是识别到了,但是系统没有运行在此,上面的分区大小都达到3.9 GB了。要安装的话,也很简单,一条命令即可:

安装完成之后,移除安装镜像,并重启虚拟机,否则就会重复进入到live-ISO环境。

重启后的引导页面,可以看到Deb12u1字样,应该确认是基于Debian12开发的了。

登录系统之后,发现IP地址和SSH服务又没有了,我们快速重新配置一下。

接下来,我们继续配置互联接口,准备测试转发性能,为防止配置丢失,我们在配置最后增加save命令保存配置。

configure
set interfaces ethernet eth1 address 10.12.1.2/24
set interfaces ethernet eth2 address 10.23.1.2/24
commit
save
ip add show eth1
ip add show eth2

既然版本介绍里面说VPP要单独启用,那我们就理解默认情况下是基于内核转发的,先测试一下默认的转发性能。

好家伙,最高转发带宽11.4 Gbps,不过两个方向差异有点大,一个方向有10.2 Gbps,反方向却只有7.15 Gbps。

那接下来,我们配置启用VPP试一下。

set vpp settings interface eth1
set vpp settings interface eth2

诶?怎么报错了,提示内存不够,怎么会,我们看看8 GB的内存用了多少。

还有7134 MB可用啊!其实,这是传统Linux内核与VPP数据面之间最核心的区别,我们看到的7 GB空闲内存,是Linux内核管理的标准4KB内存页。这些内存碎片化地散落在物理内存中。

而VPP极度苛求性能,为了达到网卡线速转发,它完全绕过了Linux内核,使用DPDK轮询模式驱动网卡。这就要求它必须使用物理上绝对连续的、大块的HugePages大页内存,以极大降低CPU缓存的未命中率。这里的报错明确提示需要3.2 GB,意味着VPP引擎想要启动,必须先从系统手里强行划走至少3.2 GB的连续大页内存,但目前系统分配的HugePages为0。

知道问题了,我们开始配置。

首先,这台虚拟机的8 GB总内存是充足的,我们可以非常宽裕地划出2048个2 MB大页(合计4 GB)专属内存给VPP。

set system option kernel memory hugepage-size 2M hugepage-count 2048
commit

我去,系统还留了4 GB?只有3.8 GB可用,VPP要求至少3.2 GB,那就折中分配1800个2 MB大页(合计3.6 GB)专属内存给VPP。

set system option kernel memory hugepage-size 2M hugepage-count 1800
commit

好了,这下没有报错了,我们保存配置并重启系统。

系统重启之后,再次配置将网卡移交给VPP。

可以看到,这次没有失败,但是依旧有警告,提示卸载选项会被忽略,同时只能支持210万条IPv4路由并发,目前全球互联网的完整BGP路由表大约也就90多万条,这容量应该够了吧?

同时,大页内存占用了3600 MB内存,现在整机内存来到了4247 MB,这台VPP引擎已经正式进入工作状态了。

OK,再次打流测试一下。

难道是有什么限制吗?最高速率依旧是11.1 Gbps,但是之前的7.15 Gbps提升到了10.7 Gbps,10.1 Gbps提升到了10.4 Gbps,整体有提升,但这也没有官方吹的15倍那么神乎其神嘛,而且像是被卡在了10 Gbps这道坎上。

其实,对比一下两次打流的明细,我们就能发现,没开VPP之前,带宽像过山车一样,从11.2 Gbps一路狂跌到5.7 Gbps;开启VPP之后,全程死死咬在10.6 – 11.1 Gbps之间,一条直线,稳如老狗!这意味着网络抖动和延迟被彻底抹平。

要这么看,VyOS 1.5.0引入的VPP数据面,不仅不是鸡肋,反而是企业级骨干网容灾、SD-WAN选路实验的完美航母级底座。

再反过来看,VyOS的基础性能也已经够强了,对于小内存场景,貌似不用VPP也行。

声明:来自铁军哥,仅代表创作者观点。链接:https://eyangzhen.com/8590.html

铁军哥的头像铁军哥

相关推荐

添加微信
添加微信
Ai学习群
返回顶部