Linux网络优化
1. 检查是否单核软中断太高
2. 检查是否开启 RPS,报文是否适合 RPS 算法
RPS 的工作原理
- 多核处理器环境:当服务器具有多个 CPU 核心时,默认情况下,所有的网络数据包可能会被发送到单个核心进行处理。这会使得该核心承担所有的网络负载,导致性能瓶颈。
- 数据包分配:RPS 的主要目的是在多个处理核心之间分配接收到的网络数据包。这是通过将数据包根据特定的哈希算法分配到不同的 CPU 核心,从而实现负载均衡。
- 提升性能:通过将网络数据包分散到多个核心处理,RPS 可以提高整体网络性能和数据处理能力,降低单个核心的负载,从而防止拥塞。
RPS 的配置
在 Linux 系统中,RPS 可以通过以下步骤进行配置:
- 检查 RPS 是否启用:可以通过查看
/proc/sys/net/core/rps_sock_flow_entries
文件来检查 RPS 的状态。 - 设置 RPS:
- 通过写入特定的值到
/proc/sys/net/core/rps_sock_flow_entries
文件,可以调整 RPS 的行为。 - 还可以通过设置网卡的 RX (接收) 处理队列,将接收到的数据包引导到不同的 CPU 核心。
- 通过写入特定的值到
- 使用
tc
命令:可以使用tc
命令进行高级流量控制,以便更精细地控制 RPS。
3. 绑核设置是否正确
4. 网卡参数检查调整
1 |
|
5. 检查网卡中断配置是否正确
1 |
|
6. CPU和网卡队列个数配置
1 |
|
7. 根据 NUMA 配置 CPU
1 |
|
8. 是否可以设置中断聚合
1 |
|
9. 查看软中断队列是否溢出
1 |
|
net.core.netdev_max_backlog
是一个控制 Linux
网络栈中软中断(softirq)处理的参数。它定义了当内核接收网络数据包时,网络设备驱动程序在网络缓冲区中缓存数据包的最大数量。如果此值被设置得过低,当数据包到达但不能及时处理时,可能会导致数据包丢失。合适地设置这个值有助于提高网络性能,尤其是在高流量情况下。
通过以下步骤来设置该参数:
查看当前值:
使用以下命令查看当前的netdev_max_backlog
值:
1
sysctl net.core.netdev_max_backlog
临时设置:
可以使用sysctl
命令临时设置此参数,直到下一次重启:将1
sudo sysctl -w net.core.netdev_max_backlog=<desired_value>
<desired_value>
替换为你想要设置的数字。例如,如果想设置为 5000:1
sudo sysctl -w net.core.netdev_max_backlog=5000
永久设置:
如果你想要在系统重启后仍然保持这个配置,可以将设置添加到/etc/sysctl.conf
文件中。打开文件并添加以下行:然后保存并关闭文件。接下来,使用以下命令应用更改:1
net.core.netdev_max_backlog = <desired_value>
1
sudo sysctl -p
在选择 net.core.netdev_max_backlog
的值时,需要根据你的网络负载、系统资源以及具体应用场景进行调整。通常,服务器的网络负载越大,这个值需要设置得越高。
设置得过高可能会导致内存占用增加,尤其是在流量波动时,可能会导致潜在的资源浪费。
如果出现高丢包率或延迟,可能需要分析网络性能,以确定这个值是否需要调整。
建议在监控网络流量和系统负载的同时进行调整,以找到一个合适的值。
10. 检查邻居表大小
1 |
|
将 net.ipv4.neigh.default.gc_thresh1 增大 1
2
3
4
5sudo sysctl -w net.ipv4.neigh.default.gc_thresh1=<desired_value>
# `/etc/sysctl.conf`
net.ipv4.neigh.default.gc_thresh1 = <desired_value>
# sudo sysctl -p
- 在选择
gc_thresh1
的值时,需要考虑到系统的内存和网络负载。如果设置得过高,可能会增加系统的内存使用。 - 除了
gc_thresh1
,还可以考虑调整其他相关参数,比如gc_thresh2
和gc_thresh3
,以便更全面地优化邻接缓存的行为。
11. 查看连接跟踪大小
1 |
|
12. TCP 参数检查
1 |
|
另外 net.ipv4.tcp_abort_on_overflow=1 ,内核将会在 TCP 接收缓冲区溢出并丢失数据包时直接中止连接,可以用于缓解服务器压力
13. 检查协议栈内存分配大小
1 |
|
相应调整: net.ipv4.tcp_mem net.ipv4.tcp_wmem net.ipv4.tcp_rmem 调整方法见上文。
缓冲区最佳大小随具体情况而不同。在数据通信中,带宽时延乘积 bandwidth-delay product,指的是一个数据链路的能力(每秒比特)与来回通信延迟(单位秒)的乘积。其结果是以比特(或字节)为单位的一个数据总量,等同在任何特定时间该网络线路上的最大数据量 -- 已发送但尚未确认的数据。 \(BDP = 带宽 * RTT\)
BONUS
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!