Yankee 发表于 2017-7-5 17:09:05

Scalable

本帖最后由 Yankee 于 2017-8-3 12:23 编辑

[*]Quick Start

[*]Changelog

= 2.2.12017-08-03 =

1. ensure i/o conservation trying to keep pipe filled;

= 2.2.02017-08-02 (重要) =

1. performance optimization ;

2. overflow fixed;

= 2.1.02017-07-30 =

1. performance optimization ;

2. always fill the local queue ;

[*]Index

Previously on Scalable-REScalable-RE: 一个实验性的单边加速算法Scalable-RE 源码ArchivesScalable-RE 参数设定TODOAboutReference

Yankee 发表于 2017-7-5 22:51:00

本帖最后由 Yankee 于 2017-7-30 22:45 编辑

关于自适应优化:

       Scalable-RE目前可供用户指定的参数如下——

      bbr_bw_rtts:最大带宽坚持窗口,设为 N 则基于 N 个窗口内采集到的最大带宽设定发送速率。默认为 15 。

Yankee 发表于 2017-7-5 17:09:10

本帖最后由 Yankee 于 2017-7-5 19:20 编辑

       [*]Scalable-RE遵照Dual BSD/GPL许可证开源。

       [*]与Scalable近似,Scalable-RE收敛性 (Convergence) 不佳,在多个流共存时的公平性有待改进。

       [*]Scalable-RE的稳定性、普适性及公平性未经大规模实践证实,应仅作为BBR与Akamai FastTCP等商业方案效果不佳时的最后选项。部署到生产环境前建议谨慎斟酌。

       [*]Scalable-Reactive只是一个简陋的实验性方案,代码中难免存在纰漏,还请各位大牛轻喷。

       [*]Scalable-RE仅供学习参考使用,任何形式的撕逼都不会被接受。

Yankee 发表于 2017-7-9 21:17:42

本帖最后由 Yankee 于 2017-8-9 18:09 编辑

For Debian 8/Ubuntu 16 ONLY.
Linux-headers is required to get compilation done.
This module is supported in kernel version after 4.9 .

(Latest version - 2.2.1)

[*]export MOD=react_rc2
[*]apt-get install make gcc-4.9 -y
[*]wget -O ./tcp_$MOD.c https://gist.github.com/anonymous/27b7ea6e93acdd23b097ab1a399c1287/raw/00c318f613856ed400c556126b851d18369e936b/tcp_react_rc2.c
[*]echo "obj-m:=tcp_$MOD.o" > Makefile
[*]make -C /lib/modules/$(uname -r)/build M=`pwd` modules CC="/usr/bin/gcc-4.9 -Ofast" &&
[*]insmod tcp_$MOD.ko &&
[*]sysctl -w net.ipv4.tcp_congestion_control=$MOD复制代码

(Other optimization - Recommended)

[*]wget -qO- https://gist.github.com/anonymous/63ada7904c29d685575716c2f5302f06/raw/93eb01e62f3a4f22390b2200ddb709987f9ed201/sysctl.conf|sysctl -p -
[*]ulimit -SHn 10240000
[*]echo "$(cat /etc/security/limits.conf | grep -v -E '(soft|hard).*nofile')" > /etc/security/limits.conf
[*]echo -e "*               soft    nofile         10240000\n*               hard    nofile         10240000" >> /etc/security/limits.conf
[*]# setting fair queue
[*]export PATH_EXEC=/etc/init.d/tc-fq.sh
[*]cat>$PATH_EXEC /etc/rc.local
[*]echo -e "\n$PATH_EXEC\nexit 0" >> /etc/rc.local复制代码

Yankee 发表于 2017-7-10 07:25:00

本帖最后由 Yankee 于 2017-7-7 02:21 编辑

      鉴于BAT、CNCache等一干大型IT企业压榨国内骨干网的手法愈加精纯,若不牺牲一点公平性,在业务网络上使用所谓的单边加速措施,未免有些不合国情。

      既然是用于生产环境,锐速之流的国产闭源模块自然是不在考虑内的; 那么G家所开源的拥塞避免算法 (Congestion Avoidance Algorithms,下称CA) ——BBR (Bottleneck Bandwidth and RTT)本应成为兼顾效率与网络公平性的最优解。

      然而赵国的网络环境实在险恶,借用某位大牛的描述便是:
…… 国内的TCP单边加速技术大多数故意都违背了收敛原则,就像我们路上开车一样,随意的变道加塞几乎成了“规矩”,如果你希望与前车保持安全距离,那么必然会有车子塞入那个“安全距离”内……如果你不加塞,就会有人催你加塞,如果你仍然不加塞,你就必须停车,这是典型的劣币驱良币,只因为大家都在做坏事。

      更严重的是,大多数的排队系统是人为设置的,比如各类收费站,检查站,互联网上各种清洗设备,各类DPI设备,各类Fire Wall!

      在这种“恶劣”的环境下,在任何的排队系统中,政治正确的做法就是加塞!TCP单边加速只是其中之一,远非全部。

      避免Buffer bloat,这是正确的做法,bbr,vegas,westwood,甚至cdg背后都有理论支撑并解释“为什么这么做是正确的”,然而从国内实际生产环境上产生的效果上看,这些最终都是被虐的,正确的TCP连接的吞吐量非常低,且RTT抖动到无法使用的地步,反而发现足够简单的Scalable的效果“不符合预期的好”。

      于是立志在网络公平性上超越CUBIC的BBR在国内与锐速之流竞争时便有了天然的劣势,因为BBR在拥塞发生时会backoff,而锐速的拥塞控制甚至是默认关闭的(csvmode="0")!在4.9以前版本的Linux内核中,忽略拥塞控制对单纯的CA而言是不现实的,一旦丢包发生,内核就会强制接管TCP连接并降窗(除非修改内核)。

      感谢G家在4.9版本引入的cong_control(之前只能使用受内核干涉的cong_avoid逻辑)实现了CA对TCP的全局控制,令开源、易于部署、符合socialist value的单边加速方案的诞生成为了可能。

      从上述前提出发,笔者基于Scalable和CAIA Delay-Gradient (CDG) 的框架实现了一个由RTT梯度调控、对TCP进行完全接管的单边加速算法,暂且称之为Scalable-Reactive(下称Scalable-RE); 之所以不归类为CA,只因醉翁之意不在酒。



Yankee 发表于 2017-7-10 03:06:00

本帖最后由 Yankee 于 2017-7-30 22:52 编辑

      Scalable-RE的行为模式有:

1. 基于RTT梯度的拥塞检测

      由react_update_rtt_grad函数实现,当窗口内的RTT梯度提示噪声丢包存在时,将CDG状态置位为CDG_NONFULL ;若信道发生拥塞,则将CDG状态置位为CDG_FULL ;

2. 带宽探测

      由react_set_cwnd函数实现,标准窗口由bbr_target_cwnd指定 ;

      若CDG状态为CDG_NONFULL且时间窗口内的最小RTT未增长,则执行pacing增益以探测瓶颈带宽 ;

3. 拥塞窗口计算

      由react_target_cwnd函数实现,获取当前的带宽时延乘积 (peak threshould) 作为peak threshould,以便将窗口精确控制在最大安全阈值内 ;

4. 拥塞避免

      若CDG状态不为CDG_NONFULL且时间窗口超时,则切换pacing至平稳档位。

      以上模式共同构成一个状态驱动的控制流。

Yankee 发表于 2017-7-5 17:09:06

本帖最后由 Yankee 于 2017-7-6 21:54 编辑

Reference:

   1. http://blog.csdn.net/dog250/article/details/55652190

   2. http://blog.csdn.net/dog250/article/details/54171687

   3. http://elixir.free-electrons.com/linux/latest/source/net/ipv4/tcp_scalable.c

   4. http://www.appexnetworks.com/white-papers/ZetaTCP.pdf

   5. http://caia.swin.edu.au/cv/dahayes/content/networking2011-cdg-preprint.pdf

   6. http://blog.csdn.net/dog250/article/details/53560271

   7. http://elixir.free-electrons.com/linux/latest/source/net/ipv4/tcp_cdg.c

Yankee 发表于 2017-7-5 17:09:07

本帖最后由 Yankee 于 2017-8-3 12:21 编辑

       完整代码已托管于github:

(Latest version - 2.2.1)
https://gist.github.com/anonymous/27b7ea6e93acdd23b097ab1a399c1287/raw/00c318f613856ed400c556126b851d18369e936b/tcp_react_rc2.c

xy2938 发表于 2017-7-5 17:09:08

LZ要铸劣币咯
lol.gif

可乐呀 发表于 2017-7-5 17:09:09

大佬啊大佬啊大佬啊大佬啊
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: Scalable