Linux内核中提供了若干套TCP拥塞控制算法:
reno是最基本的拥塞控制算法,也是TCP协议的实验原型;
bic适用于丢包极为罕见的情况,比如北美和欧洲之间的线路,这是2.6.8到2.6.18之间的Linux内核的默认算法;
cubic是修改版的bic,适用环境比bic广泛一点,它是2.6.19之后的linux内核的默认算法;
hybla适用于高延时、高丢包率的网络,比如卫星链路——同样适用于中美之间的链路。
h-tcp高性能网络中综合表现比较优秀的算法,但它有rtt不公平性和低带宽不友好性等问题。
网友的结论,hybla适合欧美节点的高延迟网络环境,htcp适合日本节点的低延迟网络环境。
现折腾将一台欧美小鸡拥塞算法改为hybla,记录如下:
加载tcp_hybla
模块
/sbin/modprobe tcp_hybla
OpenVZ的机器这一步就会报错。
然后看下是否正确加载了此模块
lsmod |grep hybla
测试是否正确加载:
$ lsmod |grep hybla
tcp_hybla 2310 5
$ sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = hybla cubic reno
两次都看到hybla
,说明已正常加载。
修改系统配置(以CentOS 6为例)
vim /etc/sysctl.conf
在最后添加如下内容:
fs.file-max = 65536
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.rmem_default = 65536
net.core.wmem_default = 65536
net.core.netdev_max_backlog = 4096
net.core.somaxconn = 4096
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_congestion_control = hybla
# 选择性开启
#net.ipv4.tcp_fastopen = 3
使修改立即生效:
sysctl -p
测试
这里就不说了,效果是有一些的,但是肯定不会非常明显!而且跟主机商也有很大关系!
OK,收工!
补充:
卸载模块的方法:
rmmod tcp_hybla
注意:tcp_hybla
适用于延迟高,丢包高的网络,例如中美之间,如果是亚洲的低延迟的机器,请使用 tcp_htcp
代替,方法类似
文章评论