Debian/Ubuntu BBR网络参数优化

Debian/Ubuntu BBR网络参数优化

建议先按顺序阅读以下文章:

  1. 物理机服务器性能优化【BIOS篇】
  2. Ubuntu/Debian 安装XanMod内核提升性能
  3. Debian/Ubuntu Linux调节CPU频率工具安装 cpupower

本文的参数主要是针对XanMod内核进行优化,原理我尽量说明清楚,在主线内核上可以进行参考(有一定的参考意义)。

参数配置

# BBR及网络性能优化配置
# 适用于: Debian 11, Kernel 6.12.32
# CPU: Intel Xeon E5-2680 v4 * 2
# RAM: 32GB

# 启用BBR3拥塞控制算法
net.ipv4.tcp_congestion_control = bbr    # 升级为BBR3,提供更好的拥塞控制
net.core.default_qdisc = fq_codel         # 使用fq_codel替代fq,更好地处理缓冲区膨胀

# 网络协议栈优化
## 增加默认的TCP读写缓冲区大小
net.core.rmem_default = 1048576           # 保持1MB默认接收缓冲区
net.core.wmem_default = 1048576           # 保持1MB默认发送缓冲区
## 增加TCP读写缓冲区的最大大小
net.core.rmem_max = 33554432              # 增加到32MB,提升高带宽场景性能
net.core.wmem_max = 33554432              # 增加到32MB,提升高带宽场景性能
## TCP自动调优设置(最小,默认,最大)
net.ipv4.tcp_rmem = 4096 1048576 16777216
net.ipv4.tcp_wmem = 4096 1048576 16777216

# 网络性能优化
## 增加网络设备的数据包队列长度
net.core.netdev_max_backlog = 32768
net.core.netdev_budget = 600              # 添加NAPI轮询预算
net.core.netdev_budget_usecs = 8000       # 添加NAPI轮询时间预算
## 增加监听队列的最大长度
net.core.somaxconn = 65535
## 增加TCP最大syn队列长度
net.ipv4.tcp_max_syn_backlog = 32768

# TCP连接优化
## 启用TCP Fast Open
net.ipv4.tcp_fastopen = 3                 # 同时启用客户端和服务器端
## 启用TCP时间戳
net.ipv4.tcp_timestamps = 1
## 启用TCP SACK
net.ipv4.tcp_sack = 1
net.ipv4.tcp_dsack = 1                    # 添加重复SACK支持
## 启用TCP窗口扩展
net.ipv4.tcp_window_scaling = 1
## 优化TCP延迟
net.ipv4.tcp_low_latency = 1              # 添加低延迟模式
net.ipv4.tcp_notsent_lowat = 16384        # 添加发送缓冲区低水位标记
net.ipv4.tcp_mtu_probing = 1              # 启用MTU探测

# TCP连接复用
## 启用TIME-WAIT套接字重用
net.ipv4.tcp_tw_reuse = 1
## 设置TIME-WAIT套接字的最大数量
net.ipv4.tcp_max_tw_buckets = 65535
## TCP连接保活设置
net.ipv4.tcp_keepalive_time = 600         # 添加TCP保活时间
net.ipv4.tcp_keepalive_intvl = 30         # 添加TCP保活间隔
net.ipv4.tcp_keepalive_probes = 5         # 添加TCP保活探测次数

# TCP内存优化
## TCP内存自动调优(最小,压力,最大,单位:页)
net.ipv4.tcp_mem = 786432 1048576 26777216  # 增加最大值以支持更多连接

# 系统资源限制
## 增加系统文件描述符限制
fs.file-max = 1048576

# IPv4协议优化
## 启用TCP SYN Cookies(防止SYN Flood攻击)
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 2           # 添加SYN+ACK重试次数限制
net.ipv4.tcp_syn_retries = 2              # 添加SYN重试次数限制
## 禁用TCP慢启动重启
net.ipv4.tcp_slow_start_after_idle = 0

# 本地端口范围
## 扩大可用的本地端口范围
net.ipv4.ip_local_port_range = 1024 65535

# 路由优化
## 启用路由缓存
net.ipv4.route.gc_timeout = 100

# 安全性优化
## 禁用ICMP回显请求(ping)
# net.ipv4.icmp_echo_ignore_all = 1       # 建议注释掉,除非特殊需求

# 内存管理优化
## 允许系统分配所有物理内存
vm.overcommit_memory = 1                  # 保持不变,适合大多数场景

# 大页内存和内存管理优化
vm.nr_hugepages = 512                     # 保持不变,适合当前内存配置
vm.swappiness = 10                        # 保持不变,减少使用swap
vm.dirty_ratio = 60                       # 保持不变,适合大内存服务器
vm.dirty_background_ratio = 2             # 保持不变,在后台刷新脏页

# 补充优化
net.ipv4.tcp_adv_win_scale = 2            # 添加TCP窗口缩放因子优化
net.ipv4.tcp_fin_timeout = 15             # 添加FIN超时优化

参数调整

# BBR3网络优化配置文件详细解析与参数调整指南

这个配置文件(bbr3_network_optimization.conf)是针对Linux系统的网络性能优化设置,主要启用了BBR拥塞控制算法并优化了各种网络参数。以下是详细解释和不同服务器配置下的参数调整建议:

1. 拥塞控制算法设置

net.ipv4.tcp_congestion_control = bbr    # 升级为BBR3,提供更好的拥塞控制
net.core.default_qdisc = fq_codel         # 使用fq_codel替代fq,更好地处理缓冲区膨胀
  • 确认你的内核支持BBR3。如果不支持,可以使用bbrcubic
  • 可以通过sysctl net.ipv4.tcp_available_congestion_control检查可用的拥塞控制算法
  • 对于大多数服务器,fq_codel是一个很好的选择,但如果你的服务器主要处理大文件传输,可以考虑使用fq

2. 网络缓冲区设置

net.core.rmem_default = 1048576           # 保持1MB默认接收缓冲区
net.core.wmem_default = 1048576           # 保持1MB默认发送缓冲区
net.core.rmem_max = 33554432              # 增加到32MB,提升高带宽场景性能
net.core.wmem_max = 33554432              # 增加到32MB,提升高带宽场景性能
net.ipv4.tcp_rmem = 4096 1048576 16777216
net.ipv4.tcp_wmem = 4096 1048576 16777216

调整建议:

低内存服务器(≤4GB):

net.core.rmem_max = 16777216            # 16MB
net.core.wmem_max = 16777216            # 16MB
net.ipv4.tcp_rmem = 4096 524288 8388608
net.ipv4.tcp_wmem = 4096 524288 8388608

中等配置服务器(8-16GB):

net.core.rmem_max = 25165824            # 24MB
net.core.wmem_max = 25165824            # 24MB
net.ipv4.tcp_rmem = 4096 1048576 12582912
net.ipv4.tcp_wmem = 4096 1048576 12582912

高配置服务器(≥32GB):

保持原配置或进一步增加

3.网络性能优化

net.core.netdev_max_backlog = 8192
net.core.netdev_budget = 300
net.core.somaxconn = 16384
net.ipv4.tcp_max_syn_backlog = 8192

以下是调整建议:

中等负载服务器:

net.core.netdev_max_backlog = 16384
net.core.netdev_budget = 400
net.core.somaxconn = 32768
net.ipv4.tcp_max_syn_backlog = 16384

高负载服务器:

保持原配置或根据实际负载增加

4. TCP连接优化

net.ipv4.tcp_fastopen = 3                 # 同时启用客户端和服务器端
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_dsack = 1                    # 添加重复SACK支持
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_low_latency = 1              # 添加低延迟模式
net.ipv4.tcp_notsent_lowat = 16384        # 添加发送缓冲区低水位标记
net.ipv4.tcp_mtu_probing = 1              # 启用MTU探测

调整建议:

  • 这些设置适用于大多数服务器配置,通常不需要根据硬件配置调整
  • 如果服务器主要用于实时应用(如游戏服务器),保持tcp_low_latency = 1
  • 如果主要用于大文件传输,可以设置tcp_low_latency = 0

5. TCP连接复用

net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_tw_buckets = 65535
net.ipv4.tcp_keepalive_time = 600         # 添加TCP保活时间
net.ipv4.tcp_keepalive_intvl = 30         # 添加TCP保活间隔
net.ipv4.tcp_keepalive_probes = 5         # 添加TCP保活探测次数

调整建议:

低连接服务器:

net.ipv4.tcp_max_tw_buckets = 32768
net.ipv4.tcp_keepalive_time = 1200      # 更长的保活时间

高连接服务器:

net.ipv4.tcp_max_tw_buckets = 131070
net.ipv4.tcp_keepalive_time = 300       # 更短的保活时间

6.TCP内存优化

net.ipv4.tcp_mem = 786432 1048576 26777216  # 增加最大值以支持更多连接

调整建议:

低内存服务器(≤4GB):

net.ipv4.tcp_mem = 196608 262144 6291456

中等内存服务器(8-16GB):

net.ipv4.tcp_mem = 393216 524288 13107200

高内存服务器(≥32GB):保持原配置或增加

7. 系统资源限制

fs.file-max = 1048576

调整建议:

  • 低负载服务器: fs.file-max = 262144
  • 中等负载服务器: fs.file-max = 524288
  • 高负载服务器: 保持原配置或增加

8. IPv4协议优化

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 2           # 添加SYN+ACK重试次数限制
net.ipv4.tcp_syn_retries = 2              # 添加SYN重试次数限制
net.ipv4.tcp_slow_start_after_idle = 0

调整建议:

  • 这些安全设置适用于大多数服务器,通常不需要根据硬件配置调整

9. 本地端口范围

net.ipv4.ip_local_port_range = 1024 65535

调整建议:

  • 对于大多数服务器配置,这个设置是合适的
  • 如果服务器运行特定应用需要保留某些端口,可以调整范围

10. 内存管理优化

vm.overcommit_memory = 1                  # 保持不变,适合大多数场景
vm.nr_hugepages = 512                     # 保持不变,适合当前内存配置
vm.swappiness = 10                        # 保持不变,减少使用swap
vm.dirty_ratio = 60                       # 保持不变,适合大内存服务器
vm.dirty_background_ratio = 2             # 保持不变,在后台刷新脏页

调整建议:

低内存服务器(≤4GB):

vm.nr_hugepages = 128 vm.swappiness = 30 vm.dirty_ratio = 30

中等内存服务器(8-16GB):

vm.nr_hugepages = 256 vm.swappiness = 20 vm.dirty_ratio = 40

高内存服务器(≥32GB):保持原配置

刷新配置

sudo sysctl -p

验证

查看BBR3状态:

modinfo tcp_bbr

如果提示modinfo: ERROR: Module tcp_bbr not found.错误请执行以下命令再查看BBR3状态

image

sudo depmod

image

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容