Post

OpenWrt 与高通 NSS 加速:原理、差异及支持情况详解

本文详细介绍了高通 NSS(网络子系统)硬件加速引擎的概念,对比了 OpenWrt 的数据包转向与软硬件流卸载方法,分析了 NSS 在原生 OpenWrt 中不受支持的原因,并探讨了高通 IPQ 系列芯片设备对 NSS 的支持情况与适用场景。

OpenWrt 与高通 NSS 加速:原理、差异及支持情况详解

什么是 NSS?

NSS(网络子系统)是由高通公司开发的专用硬件卸载引擎,集成在其 IPQ 系列 SoC(片上系统)中,例如 IPQ807x 和 IPQ6018。NSS 设计用于处理高吞吐量的网络任务,如 NAT、路由,甚至 IPsec 等安全任务,而无需占用主 CPU 核心的资源。

OpenWrt 如何”卸载”流量?

OpenWrt 提供三种主要的流量卸载方法,每一种都旨在减少 CPU 负载和提高吞吐量:

1. 数据包转向(Packet Steering)

将网络处理分布在多个 CPU 核心上。它有助于平衡多核 CPU 上的负载,但仍然依赖 CPU 来处理数据包。

2. 软件流卸载(Software Flow Offloading)

通过使用 CPU 的快速路径加速流量处理,允许更高效地处理路由和 NAT(网络地址转换),方法是绕过内核的常规慢速路径。这完全依赖 CPU 来加速数据包转发。

3. 硬件流卸载(Hardware Flow Offloading)

仅在选定设备上可用(如 MediaTek),此方法使用基于内核的机制(nftables/iptables)将数据包转发直接卸载到网络硬件以加速流量。但这仅限于具有 OpenWrt 支持的硬件加速功能的设备。

为什么 NSS 在原生 OpenWrt 中不受支持?

NSS 需要专有二进制文件(NSS 固件)和对 Linux 内核和网络堆栈的大量补丁。高通公司不开放发布必要的固件或有关如何集成 NSS 支持的详细文档,这使得 OpenWrt 社区极其困难地维护它。所需的补丁侵入性强且复杂,改变了网络堆栈的大部分内容,这使得上游集成到 OpenWrt 不太可能。与每个新内核版本的兼容性维护是另一个障碍,因为高通对这些补丁的支持最少且零散。

NSS 与 OpenWrt 卸载选项有何不同?

NSS 和 OpenWrt 卸载方法之间的主要区别在于,NSS 在 SoC 内直接提供硬件加速,几乎完全绕过 CPU 处理某些网络任务。而 OpenWrt 的卸载则严重依赖 CPU 来管理和加速流量,要么通过多核 CPU 分布(数据包转向),要么通过内核级加速(软件/硬件流卸载)。

NSS 与 OpenWrt 的内置卸载不兼容,因为它们在处理数据包的方式上相互冲突,导致性能问题,甚至彻底失败。

关键差异:

数据包转向

虽然它在多个 CPU 核心之间重新分配数据包处理,但仍然大量涉及 CPU。使用 NSS 时,专用硬件核心处理数据包,因此数据包转向可能会通过不必要地涉及 CPU 而产生干扰,降低硬件卸载的好处。

软件流卸载

这使用内核级机制(nftables/iptables)通过利用 CPU 的快速路径来加速数据包转发。然而,NSS 绕过内核的网络堆栈,直接将这些任务卸载到硬件。如果两者都启用,数据包处理可能会在软件和硬件中冗余进行,导致低效或冲突。

硬件流卸载

仅适用于某些设备(如 MediaTek),此方法通过内核驱动程序将数据包处理卸载到特定硬件。但是,这种硬件加速完全独立于 NSS,在高通设备上的效率不如 NSS。与 NSS 一起使用可能导致不可预测的行为,因为两者都试图加速流量,但方式不兼容。

我需要 NSS 吗?

以下是您可能需要 NSS 的一些原因:

  • 您在 IPQ807x 或 IPQ6018 系列设备上需要高网络吞吐量(如千兆速度)。
  • 您的路由器处理资源密集型任务,例如 NAT、VPN(IPsec)或其他会使 CPU 过载的路由密集型活动。
  • 您正在寻求比 OpenWrt 的软件和硬件卸载选项能提供的更好性能。

但是,重要的是要注意,NSS 在 OpenWrt 上不被官方支持。目前,只有少数社区驱动的项目维护 NSS 补丁。

开源社区开发者维护着一个 NSS fork 版本的 OpenWrt:qosmio/openwrt-ipq 和必要的 NSS 包:qosmio/nss-packages

我想要 NSS。我的设备支持它吗?

NSS 适用于大多数高通 IPQ807x 和 IPQ6018 设备。如果您的设备是这个芯片集系列的一部分,并且在 OpenWrt 中受支持,它可以运行 NSS。

支持的设备包括但不限于:

  • 基于 IPQ807x 的设备(例如某些高端的网件和 TP-Link 路由器)
  • 基于 IPQ6018 的设备(例如某些企业级路由器)
This post is licensed under CC BY 4.0 by the author.