突破极限:Netflix 如何以 800Gb/s 提供视频流量
为数百万并发用户提供高清晰度视频不仅需要快速的磁盘和大带宽管道;更需要精细地消除所有不直接推动位从存储到网络传输的 CPU 周期和内存拷贝。在 NAB Show 的一次详细技术演讲中,Netflix 工程师展示了将单服务器吞吐量推向 800Gb/s 所需的架构演进。
在这种规模下,主要的瓶颈不是原始的计算能力,而是内存带宽和操作系统内核的开销。为实现这些速度,Netflix 将重点放在特定工作负载上:使用基于 FreeBSD-current 和 NGINX 的堆栈提供预编码的静态媒体文件。
数据路径的演进
要了解 Netflix 如何达到 800Gb/s,查看他们为降低 CPU 与内存总线“税负”而实施的优化时间线会很有帮助。
1. 异步 Sendfile (2014)
传统上,提供文件需要将数据从磁盘复制到内核,再到用户空间,最后再回到内核以通过网络发送。Netflix 使用了 sendfile(2),它允许内核直接从文件描述符传输数据到 TCP 套接字,完全绕过用户空间。
然而,标准的 sendfile 在磁盘读取缓慢时会阻塞 NGINX 工作进程。Netflix 实现了 异步 sendfile,将操作转变为“发起即忘”的机制。当磁盘读取完成时,中断处理程序会通知 TCP 栈数据已就绪,防止工作线程停滞,并将旧硬件的吞吐量从 23Gb/s 提升至 36Gb/s。
2. 内核 TLS (kTLS) (2016)
加密是现代流量的必需,但 TLS 通常会中断 sendfile 流程。在标准的 TLS 设置中,数据必须从内核复制到用户空间,由 CPU 加密后再返回内核。
Netflix 通过将 TLS 对称加密移入内核来解决此问题。虽然初始握手仍在用户空间进行,但大批量加密作为 sendfile 流程的一部分在内核中处理。这恢复了零拷贝的数据流,并消除了因内核与用户空间之间反复拷贝导致的巨大内存带宽峰值。
3. 精通 NUMA (2019)
随着网络速度提升,Netflix 遇到了非统一内存架构(NUMA)的限制。在多插槽系统中,内存和 I/O 设备“更靠近”特定的 CPU 核心。如果 Node 0 上的 CPU 需要加密存放在 Node 1 附属内存中的数据并通过附属在 Node 0 的 NIC 发送,则数据必须多次跨越 NUMA 结构(插槽之间的互连)。
在最坏情况下,单个数据包可能会跨越 NUMA 总线四次:
- 磁盘 → 内存
- 内存 → CPU(用于加密)
- CPU → 内存(已加密)
- 内存 → NIC
这种拥塞导致 CPU 停顿。Netflix 实施了 磁盘中心分区,确保读取、加密和传输过程都在数据所在的 NUMA 节点上进行。通过转向“严格磁盘中心分区”,他们彻底消除了大批量数据跨越 NUMA 总线的情况,显著降低了互连的饱和度。
最终飞跃:内联硬件 kTLS (2022)
即使在 NUMA 优化后,基于软件的 kTLS 仍消耗近一半的可用 CPU 周期。为突破 400Gb/s 的瓶颈,Netflix 与 NVIDIA(Mellanox)合作,使用 ConnectX-6 Dx NIC 实现了 内联硬件 kTLS。
通过硬件卸载,内核直接将加密密钥传递给 NIC。数据从磁盘流向内存后直接以明文发送到 NIC;NIC 在数据进入线路时实时加密。
影响有两方面:
- CPU 负担减轻: 主机 CPU 不再参与大批量加密过程。
- 内存带宽降低: 内存带宽需求减半(从约 400GB/秒降至约 200GB/秒,针对 800Gb/s 流),因为 CPU 不再需要读取和写入数据进行加密。
800Gb/s 实验结果
Netflix 使用配备双 AMD EPYC 7713 CPU 和四块 Mellanox ConnectX-6 Dx NIC 的 Dell R7525 服务器,对该架构的极限进行测试。他们实现 720Gb/s 的过程经历了多次迭代:
- 初始结果 (420Gb/s): 受限于 AMD 在插槽之间的 xGMI 链路上的动态链宽管理 (DLWM)。
- 强制链宽 (500Gb/s): 将 xGMI 强制为 x16 和 18GT/s 后,由于 NVMe 四象限的 I/O 分布不均,出现平台瓶颈。
- 磁盘中心分区 (670Gb/s): 通过改变 DMA 处理方式改进 xGMI 哈希,虽带来一定的页面守护进程压力。
- 严格磁盘中心分区 (720Gb/s): 确保出站 NIC 与磁盘所在的 NUMA 节点本地化后,达到 720Gb/s。此时瓶颈从 CPU 转向因内容热度导致的 NIC 输出下降(部分 NIC 推至 94Gb/s,其他则停留在 84Gb/s)。
技术综合与社区视角
该架构凸显了高性能网络的根本性转变:向“全部卸载”迈进。通过将数据平面推入内核再到硬件,Netflix 将 CPU 的角色降至仅作为协调者,而非数据处理器。
从社区角度来看,一些观察者质疑对静态、已加密的 DRM 内容使用 TLS 的必要性。然而,“TLS 无处不在”的行业趋势表明,安全和隐私的收益——以及使用标准化硬件卸载的能力——超过了开销。此外,该堆栈中使用 FreeBSD 进一步强调了 BSD 内核在需要对网络栈进行细粒度控制的专用高吞吐网络任务中的持续重要性。