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 会话,但在千...

Netgate 即将发布 pfSense CE 2.8 和 pfSense plus 25.03 版本,新版本中通过引入全新的 if_pppoe 驱动程序,大幅提升了 PPPoE 的连接吞吐性能。

自 2013 年发布 pfSense CE 2.1.0 以来,pfSense 一直依赖 mpd5 与 netgraph 来处理 PPPoE WAN 连接。这套架构虽然成功地建立了 PPPoE 会话,但在千兆光纤逐渐普及的今天,底层架构的性能瓶颈已暴露无遗。当运营商开始提供高达 10Gbps 的 PPPoE 服务时,WAN 连接的性能就成了关键。在官方的博客文章中,详细剖析了 netgraph 无法满足高吞吐要求的原因,并阐述了新的 if_pppoe 驱动如何解决这些问题。

mpd5 与 netgraph 的局限

多链路 PPP 守护进程(mpd5)基于 netgraph 运行。netgraph 是一个模块化的 FreeBSD 内核框架,能够灵活实现桥接、PPP、GIF 隧道、NAT、Netflow 等多种网络功能,并可任意组合。但这种模块化是有代价的:netgraph 的设计需要不断验证模块之间的连接、管理引用计数以及处理锁机制。在 20 世纪 90 年代,DSL 连接仅数十兆比特,且都是单核 CPU,这些开销尚可接受。而如今,光纤将吞吐量推向千兆乃至万兆级别,多核 CPU 也已成为常态,netgraph 固有的效率问题就变成了瓶颈。

netgraph 的模块化架构虽然灵活,却牺牲了性能。每处理一个数据包,都要为维持任意的模块连接图而进行持续的验证与同步,这会引入延迟并严重限制可扩展性。在高吞吐环境下,这些开销足以拖垮 PPPoE 性能,因此必须采用全新的方法。

新驱动 if_pppoe

为解决这些弊病,Netgate 为 pfSense 引入了专用的 if_pppoe 驱动程序。它是专门针对 PPPoE 情景的简化实现。通过聚焦单一职责,if_pppoe 彻底消除了 netgraph 的模块化开销和单线程限制,从而在多核环境中带来了显著的性能飞跃。

if_pppoe 的主要特性:

  • 多核优化:与 netgraph 不同,if_pppoe 能够高效利用多个 CPU 核心。它使用接收方缩放(RSS)根据协议、源/目的地址和端口号在内核之间分摊数据包处理。这样可确保单个 TCP 流始终固定在一个核心上,最大程度地减少乱序数据包,而其他核心则并发处理不同的流。
  • 简化的架构:专注于 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,VF1,受信任 VF,内核命名空间 ns2,iperf3 服务器
  • 链接速度:100Gbps
  • 测试时长:60 秒

测试数据对比如下,提升非常可观:

PPPoE 测试最小下载最小上传最大下载最大上传
mpd5 1 流2.623.234.563.84
mpd5 4 流5.013.716.664.15
if_pppoe 1 流6.184.596.384.94
if_pppoe 4 流8.187.969.018.24

如何启用新驱动

if_pppoe 内核驱动并非默认选项,需要手动启用才能生效。进入 系统 > 高级选项 > 网络设置,勾选相应选项并重启防火墙后即可生效。

启用 if_pppoe 驱动的设置界面

觉得内容不错?我要

评论 暂无评论
暂无评论,快来抢沙发吧~