TCP BBR试用体验

Kernel 4.9 正式版本的发布带来了一些令人激动的特性以及一些驱动的更新。
其中来自 Google 的 TCP BBR 拥塞控制算法也在这个版本并入了主线。
                                                       ———— 背景

今天和大神聊天的时候知道了TCP BBR这个神奇的控制算法。遗憾自己以前的孤陋寡闻,我对此等神器居然一无所知。为了尽快弥补这个遗憾,我大晚上的搭了一台测试机对TCP BBR进行了测试。
首先需要一台linux 4.9内核版本以上的机器(现在居然已经出到4.10了,不过gregkh已经宣布4.9将是LTS版本),我搜刮了我所有的机器发现居然没有一台的内核达标。于是在Vultr上买了一台新的CentOS来测试。
要在 CentOS 上安装最新的内核版本,我们需要增加一个 ELRepo 源。首先,让我们添加 ELRepo GPG key:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

之后添加 CentOS-7的 源:

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

安装fastestmirror (Vultr的镜像已经自带了,保险起见,可以确定一下)

yum install yum-plugin-fastestmirror

最后,安装 kernel 主线版本

yum --enablerepo=elrepo-kernel install kernel-ml

当然,将 kernel-ml 选为第一启动

grub2-set-default 0

重启后,通过 uname -a 查看内核是否已经切换到最新版

$ uname -a

在确定安装好了4.9以上版本内核之后,我们就可以开启TCP BBR了。

sudo echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
sudo echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

重启后,首先 uname -a 看下内核是否切换,然后执行下面明亮查看内核是否开启 TCP BBR

sudo sysctl net.ipv4.tcp_available_congestion_control
sudo sysctl net.ipv4.tcp_congestion_control

查看 tcp_bbr 模块是否加载

lsmod | grep tcp_bbr

如果已经加载成功,就可以愉快地开始测试了。实测发现TCP BBR确实可以有效提高上行速度,但效果没有网上其他的测评那么拔群,我这里差不多是200%的样子。

发挥所长 改变世界

这几天晚上睡得很晚,幸好总有一个我觉得很厉害的大神一直失眠,于是几乎每天都可以聊到天亮。
他的世界观就像他自己说的,确实很与众不同。在我目前短浅的人生阅历看来,那是彻底而纯粹的精英主义以及理想主义。与大众世界显得格格不入,但也正是因为如此,他也显得熠熠生辉。
我自己觉得我还是以利益为导向的。这里所说的利益可能更加倾向于普世价值,我是需要社会的认同感的,不然我会觉得很孤独。
最近的生活一直很“颓废“,过着黑白颠倒的生活,这可能是缺乏自我控制力吧。按老妈的话说,完全可以把晚上工作的时间移到白天来做的,我也知道这样会好一点,但是白天我就是不想写东西,摔~
学了将近一个月的机器学习了,感觉神经网络真的是一个巨大的宝藏,加上前辈们呕心沥血研发出来的各种工具,简直无往而不利。
这算是把这个月以来的生活回顾了一下,过两天有毕业设计的中期检查,打算检查完回家吃肉去,想想就很美好。

自由落体

那是一个很容易让人陷入其中的应用。
我可以在那里发现许多和我相同的人,仿佛在这个世界上我并不孤单。
但是同时我也知道,那里只是一个虚拟的世界。在现实中依旧没有我们的容身之所。
把虚拟世界带入现实是件恐怖的事情,我得好好调整一下了。

ofo vs mobike — 两大门派横向测评

最近一直在长沙,报了健身房。
由于住的地方离健身房有一段路程,所以就在考虑用哪一种代步工具会比较好。
权衡再三,最后选了自行车代步。反正是去锻炼,路上就当是热身了。
本来是想骑自己的山地车的,但是健身房里不能停车,而且停在外面也不是很安全。所以就打算试试共享单车了。
——————————————————————————————————————–
我一直都觉得共享单车是一个城市发展水平与市民素质整体作用的结果。体验最早也最好的是杭州的小红车,不仅有统一的停车位,而且有专业的管理。就冲这一点,我觉得杭州人民是幸福的。体验最差的要算是深圳的市政公共自行车了,当时腾大旁边有一个自行车泊车位,我一度有想下班以后骑车回家的冲动,结果发现不同区的公共自行车居然不是一家公司经营的,也就是说我把车骑回去了以后根本没法还车,摔~
——————————————————————————————————————–
Continue reading

《编程原本》读书笔记

这一学期确实很清闲。往日最令我头疼的上课任务没有了,但取而代之的是需要自己安排自己的时间了。
打算在这段gap semester里多做一点充实自己的事情。
手边有一本裘老翻译的《编程原本》,正好利用这段时间好好再刷一遍。
这书是12年底买的,当时买了就看了一遍,但确实有很多看不懂的地方。
大一开学的时候,手边也没有什么书,于是就又看了一遍。真心看出新感觉,给人一种豁然开朗的感觉。
想必这次再看,应该也会有所收获的。
程序背后的本原就是数学的各种概念、技术和方法,需要演绎、推导和证明,而绝不是模糊的想法和草率的编码以及蛮力调试。
                                                                                                 ————裘宗燕

三星ADV考试题(Tunnel Construction)

好久没有写东西啦。
因为前两天和同学一起玩的很开心,于是就索性放纵了自己一下下,把写东西的任务暂时抛掷脑后了。
前天花花给我发来了一道新鲜出炉的算法题,奈何我已经好久不写这种东西了,所以一路过程十分曲折。打算记录一下,权当好玩。
题目是图片版的,讲道理看的非常不爽。原文链接在这里:http://www.cnblogs.com/linux0537/p/6163158.html

s = [1, 4, 1, 3, 11]
c1 = 7
r1 = 2
c2 = 2
r2 = 6
ans = float("inf")
for i in range(0, len(s)+1):
    offset = 0
    result = 0
    if len(s) - 2*i > 0: offset = r2*(len(s)-2*i-1)
    if len(s) - 2*i < 0: offset = r1*(2*i-len(s)-1)
    for l in range(0, i): result += c1*s[l]
    for r in range(i,len(s)): result += c2*s[r]
    if (result + offset) < ans: ans = result + offset
print ans

python生成器(generator)

今天心血来潮想刷Leetcode,发现了一道没有AC的Easy题。无脑Gank掉之后突然想起来生成器来做的话,效率可能会高一点,所以趁机也温习了一下生成器。

def fizzBuzz(n):
    for i in range(1, n+1):
        if i % 15 == 0:
            yield "FizzBuzz"
        elif i % 5 == 0:
            yield "Buzz"
        elif i % 3 == 0:
            yield "Fizz"
        else:
            yield str(i)
tt = fizzBuzz(16)
try:
    print(tt.next())
except Exception,e:
    pass