喜欢穷折腾的阿汤哥
tangtr.cn

开启 BBR 最方便的姿势

BBR 是来自于 Google 的黑科技,目的是通过优化和控制 TCP 的拥塞,充分利用带宽并降低延迟,起到神奇的加速效果。在 BBR 之前,比较有名的就是国产的锐速了,不过,由于锐速是个国产的闭源软件,而且已经很久不再更新,不能适配比较新的系统。正好,BBR 的出现,又成为一个可供折腾的对象,BBR 这个特性其实是在 Linux 内核 4.9 以上才计划加入的。所以,要开启 BBR,需要内核版本在 Linux kernel 4.9 以上。

网络上已经出现了大把大把的一键安装脚本,然而估计是为了省事,大多是直接无脑的从官方的 Mainline 分支上直接拉取所谓最新的内核安装。

RHL 系列

http://elrepo.org/tiki/tiki-index.php

DEB 系列

http://kernel.ubuntu.com/~kernel-ppa/mainline/
问题在于哪里呢,这些内核都是直接根据主线版内核机器编译生成的,是用于开发人员测试的,迭代速度非常之快,而且没有经过人工仔细的测试和维护,然后问题就出现了:

4.12 内核对于 virtio 网络驱动有严重的 bug,导致网络变得异常缓慢。该问题影响所有使用 virtio 网络驱动的 KVM VPS

所以为什么不适用各个发行版人工编译测试并发布的内核呢?
注意 BBR 不适用于 OVZ 等非完全虚拟化的 VPS,以下操作必须在 root 或者 sudo 下执行。

安装较新版内核

CentOS 7 系列

从 virt SIG 分支获取新内核

yum install -y kernel kernel-headers
yum group install "Development Tools" -y

查看安装的内核并删除旧内核(可选)

yum remove 旧内核 (可选,把要删除的内核名字复制粘贴)
grub2-set-default 0
reboot

Ubuntu 16 LTS 系列

如果你的系统还是 Ubuntu 14.* 请升级到最新的 LTS 版本,如果你的系统是 Ubuntu 17.x 版本,那么默认的内核已经符合要求。
安装 hwe 分支的内核

apt install --install-recommends linux-generic-hwe-16.04 -y

卸载旧内核并设置新内核

apt-get purge 旧内核 (可选,把要删除的内核名字复制粘贴)
update-grub
reboot

Debian 系列

对于 Debian 9 默认的内核已经符合要求,对于 Debian 7 个人建议还是升级到 Debian 9/8 吧。下面给出 Debian 8 的启用方式。

首先更改并添加 Backports 源,如果没有的话
rm /etc/apt/sources.list && vi /etc/apt/sources.list
修改为如下:

deb http://debian-archive.trafficmanager.net/debian-security jessie/updates main contrib non-free
deb http://debian-archive.trafficmanager.net/debian jessie-updates main contrib non-free
deb http://debian-archive.trafficmanager.net/debian jessie-backports main contrib non-free

然后从 backports 安装内核:

apt-get -t jessie-backports install linux-image-amd64 linux-headers-amd64 -y

卸载旧内核并设置新内核

apt-get purge 旧内核 (可选,把要删除的内核名字复制粘贴)
update-grub  
reboot

开启 BBR

开机后 uname -r 看看是不是内核 4.9 或者以上版本
执行 lsmod | grep bbr,如果结果中没有 tcp_bbr 的话就先执行

echo "tcp_bbr" >> /etc/modules

将 BBR 写入内核配置并保存生效

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo "vm.swappiness = 10" >> /etc/sysctl.conf
echo "vm.vfs_cache_pressure = 50" >> /etc/sysctl.conf
echo "net.ipv4.icmp_echo_ignore_all = 1" >> /etc/sysctl.conf
echo "net.core.default_qdisc = fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_notsent_lowat = 16384" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf
echo "net.ipv4.tcp_fastopen = 3" >> /etc/sysctl.conf
sysctl -p

检查生效情况

sysctl net.ipv4.tcp_congestion_control
lsmod | grep bbr

如果结果都有 bbr, 则证明你的内核已开启 bbr。看到有 tcp_bbr 模块即说明 BBR 已启动,这样,就可以开始体验 Google 的黑科技加速了。

其他一些内核优化
如果不懂请不要乱调!

vi /etc/sysctl.conf
加入如下部分:

fs.file-max = 512000
kernel.sysrq = 1
kernel.msgmnb = 65536
kernel.core_uses_pid = 1
net.core.wmem_max = 67108864
net.core.rmem_max = 67108864
net.ipv4.tcp_mem = 25600 51200 102400
net.ipv4.tcp_rmem = 8192 87380 67108864
net.ipv4.tcp_wmem = 8192 65536 67108864
net.core.netdev_max_backlog = 250000
net.core.somaxconn = 65535
net.core.optmem_max = 8192
net.ipv4.ip_forward = 1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_time = 240
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_sack = 1
net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_max_orphans = 262144
vm.swappiness = 10
vm.vfs_cache_pressure = 50
vm.overcommit_memory = 1
vm.min_free_kbytes = 65536
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_limit_output_bytes = 65536
net.ipv4.tcp_rfc1337 = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.log_martians = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.tcp_challenge_ack_limit = 999999999
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_base_mss = 1024
net.ipv4.route.gc_timeout = 100
net.ipv4.neigh.default.gc_stale_time = 120

执行 sysctl -p
修改文件限制

sed -i '$a * hard nofile 512000\n* soft nofile 512000' /etc/security/limits.conf

执行 ulimit -n 512000

转自DCC的小窝:https://www.dcc.cat/bbr/

赞(0)
未经允许不得转载:汤忒热 » 开启 BBR 最方便的姿势

评论 抢沙发

评论前必须登录!