Recent Posts
-
2019-05-08
理解 Cgroup
简单的类比Cgroup是Linux内核的一项特性,它可以对进程进行一些系统资源(比如CPU、内存、IO等)限制。为什么要做这样的限制呢? 因为供需关系不平衡!举个例子,假设小明家里有一台台式电脑,爸爸需要用它处理公务,妈妈想用它看电视剧,小明想用它来玩游戏。 于是小明一家人决定,每天爸爸处理一个小时公务,妈妈再看一个小时电视剧,最后小明再玩一个小时游戏。这样一家人都可以得到有限的满足。 如果把上面的人都换成内核中的进程,而将台式电脑换成CPU。那么上面的例子就变成了三个进程都希望获取CPU...
-
2019-04-09
TCP 拥塞控制之基础
TCP 要点有四,一曰有连接,二曰可靠传输,三曰数据按照到达,四曰端到端流量控制。注意, TCP 被设计时只保证这四点,此时它虽然也有些问题,然而很简单,然而更大的问题很快呈现出来,使之不得不考虑和IP网络相关的东西,比如公平性,效率,因此增加了拥塞控制,这样 TCP 就成了现在这个样子。为什么要进行拥塞控制要回答这个问题,首先必须知道什么时候 TCP 会出现拥塞. TCP 作为一个端到端的传输层协议,它并不关心连接双方在物理链路上会经过多少路由器交换机以及报文传输的路径和下一条...
-
2019-04-04
Go中高频问题的FAQ 节选
本文翻译自官方FAQ该链接可能需要科学上网 orz其中一些专有名词为了防止翻译引起的歧义,索性保留英文:)UsageGo程序能和C/C++程序链接在一起吗 ? Do Go programs link with C/C++ programs?可以的,单这并不是很自然的做法,并且需要特别的接口软件。此外,将C与Go链接在一起会丧失原本Go可以提供的安全地内存和栈的管理。有时为了解决一个问题,我们一定要使用C库,但这么做总会引入一些风险,毕竟链接后就不是纯Go程序了,所以千万当心!如果您确实需...
-
2019-03-04
走进 mTCP
mTCP 是一款面向多核系统的用户态网络协议栈内核态协议栈的缺陷互联网的发展,使得用户对网络应用的性能需求越来越高。人们不断挖掘CPU处理能力加强,添加核的数量,但这并没有使得网络设备的吞吐率线性增加,其中一个原因是内核协议栈成为了限制网络性能提升的瓶颈。互斥上锁引起的开销互斥上锁是多核平台性能的第一杀手。现在的服务器端应用为了尽可能的实现高并发,通常都是采用多线程的方式监听客户端对服务端口发起的连接请求。首先,这会造成多个线程之间对accept队列的互斥访问。其次,线程间对文件描述符...
-
2019-01-13
通俗理解IP路由
日常工作环境中,我们习惯于使用ping去测试网络的连通性。如果ping不通,我们往往会去怀疑是不是路由配置错了。路由是什么我们知道,IP地址是网络世界里的门牌号。你可以通过IP地址访问远在天边的网站,那么数据是如何到达网站的呢?靠的就是路径上每个节点的路由。路由,简单的说就是指导IP报文该去哪的指示牌。一般说来,主机会在以下两个时机进行路由查询 收到报文时,查询路由决定是上送本机(LOCAL IN),或者从哪个出接口转发(FORWARD) 本机发送报文时,查询报文出接口 注意,转...