技术解析
Hi ,我是 Zorro 。这是我的微博地址,如果你有兴趣,可以来关注我呦。
这是我的博客地址,我会不定期在这里更新文章,如有谬误,欢迎随时指正。
另外,我的其他联系方式:
Email: [email protected]
QQ: 30007147
由于字数限制,你在 V2EX 上直接看到的这个文章并不完整,完整版请移步我的博客。
本文不会涉及一些网络基础知识的讲解以及 iproute2 相关命令的使用的讲解,建议如果想要更好理解本文,之前应该对网络知识、 tc 命令和LARTC的文档有一定了解。如果本文中有什么知识点让不够清楚,可以结合 LARTC 文档一起服用。
想要直接上手配置 cgroup 的网络资源隔离的人,可以直接看本文倒数第二部分:使用 cgroup 限制网络流量。
本文 PDF
今天我们来谈谈:
如果说 Linux 内核的 cgroup 算是个新技术的话,那么它的网络资源隔离部分的实现算是个不折不扣的老技术了。实际上是先有的网络资源的隔离技术,才有的 cgroup 。或者说是先有的网络资源的隔离才有的 2.4 、 2.6 版本的 Linux 内核,而现在的最主流的内核版本应该是 3.10 了(考虑到 android 手机的出货量,你公司那几千几万台服务器真的算是个零头对吧?)。好吧, Linux 早在内核 2.2 版本就已经引入了网络 QoS 的机制,并且网络资源的隔离功能只是其所实现功能的一部分而已。无论如何, cgroup 并没有再重新搞一套网络资源隔离的实现,而是直接使用了 Linux 的 iproute2 的 traffic control ( tc )功能。实际上网络资源隔离的文档真的不用我再多写什么了,我最亲爱的前同事+朋友+导师—— johnbull 同志早已经在 2003 年的非典期间就因为无聊而完成了非常高质量的相关技术文档翻译工作,将这方面最权威的 LARTC ( Linux Advanced Routing & Traffic Control )文档翻译成了中文版。
英文版链接
中文版链接
曾经 chinaunix 的资深版主 johnbull 同志现在在新浪微博工作,所以经常在微博出没,如果对以上文档有兴趣和疑问的人可以直接去找他对质,传送门在此。
其实原则上说,本技术文章已经讲完了,但是为了不让大家有种上当受骗的感觉,我觉得我还是有必要从 cgroup 的角度再来讲讲 tc ,也算是对 TC 近几年发展做一个补充。
tc 命令引入了一系列概念,其中我们最需要先理解的就是队列规则。它的英文名字叫做 queueing discipline ,在 tc 命令中也叫 qdisc ,或者直接简写为 qd 。我们先来看看它,有个感性的认识:
在我的虚拟机的 centos7 中,它是这样的:
[[email protected] Desktop]# tc qd ls
qdisc pfifo_fast 0: dev eno16777736 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1