第 8 章 联网
随着时间的推移红帽企业版 Linux 的网络栈已有了大量自动优化功能。对于大多数负载,自动配置的网络设定可提供优化的性能。
在大多数情况下联网性能问题是由硬件故障或者出错的基础设施造成的。这些原因不在本文档讨论范围。本章所讨论的性能问题及解决方案对优化完全正常工作的系统有帮助。
联网是一个专用子系统,以敏感的连接包含不同部分。这是为什么开源社区以及红帽都致力于使用自动优化网络性能的方式。因此,对于大多数负载,您根本不需要为性能重新配置联网设置。
8.1. 网络性能改进
红帽企业版 Linux 6.1 提供以下网络性能改进:
接收数据包操控(RPS)
RPS 启用单一 NIC
rx
队列使其接收在几个 CPU 之间发布的 softirq
负载。这样可以帮助防止单一 NIC 硬件队列中的网络流量瓶颈。
要启用 RPS,请在
/sys/class/net/ethX/queues/rx-N/rps_cpus
中指定目标 CPU 名称,使用 NIC 的对映设备名称(例如 eth1
, eth2
)替换 ethX,使用指定的 NIC 接受队列替换 rx-N
。这样可让在该文件中指定的 CPU 处理 ethX
中 rx-N
队列中的数据。指定 CPU 时,请注意该队列的缓存亲和力 [4]。
接收流程操控
RFS 是 RPS 的延伸,可让管理员配置在程序接收数据并整合至网络栈中时自动填充的哈希表。这可决定哪个程序接受网络数据(根据 source:destination 网络信息)。
使用此信息,网络栈可调度最佳 CPU 区接收每个数据包。要配置 RFS 请使用以下可调参数:
/proc/sys/net/core/rps_sock_flow_entries
- 这个参数控制内核可以操控的任意指定 CPU 可控制的最多栈/流程数。这是一个系统参数,有限共享。
/sys/class/net/ethX/queues/rx-N/rps_flow_cnt
- 这个参数控制可操控某个 NIC(
ethX
)中指定接受队列(rx-N
)的最大栈/流程数。注:所有 NIC 中这个参数的各个队列值之和应等于或者小于/proc/sys/net/core/rps_sock_flow_entries
。
与 RPS 不同,RFS 允许接收队列和程序在处理数据包流程时共享同一 CPU。这样可以在某些情况下改进性能。但这种改进依赖类似缓存阶层、程序负载等因素。
TCP-thin 流的 getsockopt 支持
Thin-stream 是用来描述程序用来发送数据的传输协议的名词,在这种低速率下,协议的重新传输机制并未完全饱和。使用 thin-stream 协议的程序通常使用可靠协议传输,比如 TCP。在大多数情况下此类程序提供对时间敏感的服务(例如股票交易、在线游戏、控制系统)。
对时间敏感的服务,丢失数据包对服务质量是致命的。要放置此类情况出现,已将
getsockopt
调用改进为支持两个附加选项:
- TCP_THIN_DUPACK
- 这个布尔值在 thin stream 的一个 duupACK 后启用动态重新传输。
- TCP_THIN_LINEAR_TIMEOUTS
- 这个布尔值为 thin stream 线性超时启用动态起动。
这两个选项都可由该程序特别激活。有关这些选项的详情请参考
file:///usr/share/doc/kernel-doc-version/Documentation/networking/ip-sysctl.txt
。有关 thin-stream 的详情请参考 file:///usr/share/doc/kernel-doc-version/Documentation/networking/tcp-thin.txt
。
传输代理服务器(TProxy)支持
内核现在可以处理非本地捆绑的 IPv4 TCP 以及 UDP 插槽以便支持传输代理服务器。要启用此功能,您将需要配置相应的 iptables。您还需要启用并正确配置路由策略。
有关传输代理服务器的详情请参考
file:///usr/share/doc/kernel-doc-version/Documentation/networking/tproxy.txt
。