pfSense新版本大幅度提升PPPoE性能

Netgate即将发布pfSense CE 2.8和pfSense plus 25.03版本,在新版本中,通过引入新的if_pppoe驱动程序,大幅度提高了PPPoE的连接速度。

自2013年发布pfSense ce 2.1.0年以来,pfSense多年来一直依赖mpd5和netgraph来处理PPPoE WAN连接。虽然这种设置有助于建立与 PPPoE 服务的连接,但现在千兆网络的需求暴露了底层架构的局限性。随着运营商提供高达0Gbps的PPPoE服务,WAN连接的性能将会非常重要。在官方的这篇博客文章中,深入探讨了 Netgraph达不到要求的原因,并就新的if_pppoe 驱动如何解决这些问题介绍了实现期望的技术细节。

mpd5

多链路PPP守护进程(mpd5)利用Netgraph,这是一个模块化的FreeBSD内核框架,旨在灵活地实现网络功能。Netgraph的优势在于其多功能性——它支持桥接、PPP、GIF隧道、NAT、Netflow等各种操作,并且所有这些操作都可以在任意配置中进行组合。然而,这种模块化是有代价的。Netgraph的设计需要对模块连接进行大量的验证、管理引用计数器以及处理锁。在20世纪90年代,DSL连接的速度达到数十兆比特,并且采用单核CPU,这种开销是可以承受的。但随着光纤连接将吞吐量推向数千兆比特的范围,以及多核CPU成为常态,Netgraph固有的低效率成为了瓶颈。

存在的问题

Netgraph的模块化架构虽然灵活,但却牺牲了性能。为了支持模块间任意的连接图,每个数据包都需要持续验证和同步,这会导致延迟并限制可扩展性。在高吞吐量环境中,这种开销会严重影响 PPPoE 的性能,因此显然需要一种新的方法。

新的驱动

为了解决这些缺点,Netgate为pfSense引入了一个新的if_pppoe驱动程序。该驱动程序是专门针对PPPoE的简化实施。通过缩小范围,if_pppoe 消除了Netgraph 模块化的开销和单线程特性,从而实现了显著的性能提升,尤其是在多核环境中。

if_pppoe 的主要特点

  • 多核优化:与Netgraph不同,if_pppoe旨在有效利用多个CPU内核。它使用接收方缩放 (RSS) 根据协议、源/目标地址和端口号在内核之间分配数据包。这可确保单个TCP流保留在一个核心上,从而最大限度地减少无序数据包,而其他核心则处理并发流。
  • 简化的架构:通过只关注PPPoE,if_pppoe避免了支持任意网络功能的复杂性。确保更精简、更快速的实施。
  • 并发数据包处理:该驱动程序允许跨多个CPU在接收和发送方向上同时处理数据包。

测试结果

为了对比新旧版本之前的区别,官方进行了对比测试。

PPPoE服务器使用运行Linux内核的Sapphire Rapids系统。

被测设备:Netgate 6100,L3 转发,pf 禁用,ix0/ix1 链路速度:10Gbps

流量生成器:Sapphire Rapids、Linux PPPoE 内核模式服务器

E810 NIC1、端口 0、VF1、可信 VF、内核命名空间 (ns1)、iperf3 客户端

E810 NIC2、端口 0、VF 1、受信任的 VF、Kennel 命名空间 (ns2)、iperf3 服务器

链接速度:100Gbps

测试持续时间:60 秒

下面是测试数据对比,可见提升幅度非常大。

PPPoE测试 最小下载 最小上传 最大下载  最大上传
mpd5 1 流 2.62 3.23 4.56 3.84
mpd5 4 流 5.01 3.71 6.66 4.15
if_pppoe 1 流 6.18 4.59 6.38 4.94
if_pppoe 4 流 8.18 7.96 9.01 8.24

如何使用

新版if_pppoe内核驱动并非默认选项,需要手动启用才能正常使用。转到系统>高级选项>网络设置,选中启用,并重启防火墙后才生效。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇