51CTO博客开发
在Linux3.5版本(包括)之前,存在一个路由cache,这个路由cache的初衷是美好的,但是现实往往是令人遗憾的。以下是陈列得出的两个问题:1.面临针对hash算法的ddos问题(描述该问题的文章已经汗牛充栋,不再赘述);2.缓存出口设备是p2p设备的路由项会降低性能。这 些问题本质上是由于路由cache的查找方式和路由表的查找方式互不相容引起的。路由cache必须是精确的元组匹配,因此它必
由于工作地更替,我觉得我将有很长的一段时间在深圳了,因此决定举家从上海搬到深圳,虽然舍不得上海的朋友,同事,以及已经居住了3年的房子,但是还是不得不举家搬迁。从 2015年9月份面试,到2015年11月上旬入职,这期间经历了工作交接,醉酒以及离别,从11月份到2016年春节,一直忙着搬家。其实我的想法是简 单的,上海的房子不租,到深圳租个稍微差一点的房子,只要小小上学方便即可,这样我也就不需要搬太
几年前,我记得写过好几篇关于Linux去除对路由cache支持的文章,路由cache的下课来源于一次对路由子系统的重构,具体原因就不再重复说了,本文将介绍这次重构对Redirect路由以及neighbour子系统的影响。事实上,直到最近3个月我才发现这些影响是如此之大,工作细节不便详述,这里只是对关于开放源代码Linux内核协议栈的一些实现上的知识进行一个汇总,以便今后查阅,如果有谁也因此获益,则
系统中有很多变量用来记录一个单调递增的现实,典型的有两个,一个是TCP的序列号,另一个就是jiffies,但是由于计算机内表示的数字都 是有限无界的,所以任何数字都不能做到完全意义的单调递增,它们只是在绕圈圈,就像钟表一样,值域就是那些有限的数字,周而复始。实际上不管是TCP序列 号还是jiffies,都面临一类问题,就是回绕问题。就像我们看钟表,1点时在11点前呢,还是在11点后呢?其实这个问题
本文题目有点大,但其实我只想描述一些我个人一直比较关注的特性,并且不会太详细,跟往常一样,主要是帮忙理清思路的,不会分析源码。这主要是为了哪一天突然忘了的时候,一目十行扫一眼就能记忆当时的理解,不然写的太细节了,自己都看不懂了。Lockless TCP listener先 从TCP的syncookie说起,如果都能使用syncookie机制该有多好,但是不能,因为它会丢失很多选项协商信息,这些信息
和前面文章的第一部分一样,这些文字是为了帮别人或者自己理清思路的,而不是所谓的源码分析,想分析源码的,还是直接debug源码最好,看任何文档以及书都是下策。因此这类帮人理清思路的文章尽可能的记成流水的方式,尽可能的简单明了。Linux 2.6+内核的wakeup callback机制Linux 内核通过睡眠队列来组织所有等待某个事件的task,而wakeup机制则可以异步唤醒整个睡眠队列上的tas
与网络数据包的发送不同,网络收包是异步的的,因为你不确定谁会在什么时候突然发一个网络包给你,因此这个网络收包逻辑其实包含两件事:1.数据包到来后的通知2.收到通知并从数据包中获取数据这两件事发生在协议栈的两端,即网卡/协议栈边界以及协议栈/应用边界:网卡/协议栈边界:网卡通知数据包到来,中断协议栈收包;协议栈栈/应用边界:协议栈将数据包填充socket队列,通知应用程序有数据可读,应用程序负责接收
上周,在我们进行性能测试的时候,发现了一个问题。我们的服务器上启了一个redis服务端,侦听0.0.0.0的1234端口,同处在本机的另外一个进程会频繁发起到该服务端的短连接,结果导致了两个问题:1.大量的TIME_WAIT状态的连接;2.发起连接的进程的CPU占用率接近100%。这两个结果严重影响了我们网关的性能,在分析具体原因之前,首先做一个提倡,那就是:本机连接本机,首选UNIX域套接字而不
1.O(1)调度器的时间计算公式与CFS调度器Linux 2.6.23之前普遍采用了O(1)调度器,它是一种基于优先级的时间片调度算法,所谓的O(1)只是它的一些精巧的数据结构使然,在不考虑动态补偿/惩 罚的情况下,只要优先级确定,那么时间片就是固定的。2.6.23以后的CFS呢,它是一种基于权重的非时间片调度算法,进程每次执行的时间并不是固定 的,而是根据进程数在一个准固定周期内按照其权重比例
想象一下当初为什么不让多个进程/线程在一个相同的IP地址和端口上侦听,很简单,这是因为TCP/IP模型将一个端口作为一个四层复用解复用的唯一标 识,也就是一个四层地址,正如IP地址属于一个主机一样(属于一块网卡?),一个IP/端口对属于一台主机上一个特定的进程,它只是一个保证唯一性的静态 标识。世界上不同的主机不能有相同的IP地址,一台主机上绑定特定IP地址的不同进程也不能有相同的端口,否则就不知
1.BFS调度器与O(1)调度器O(1)调度器采用二级分类,第一级是CPU,即每一个CPU一个队列,第二级是优先级,每CPU队 列又细分为140个优先级队列。第一级采用负载均衡调度,第二级采用优先级调度。虽然很清晰,但是要加入“小手段”来补偿/惩罚。本质上CFS调度器也一 样,只是采用了红黑树以及新增了一个虚拟时钟层屏蔽了补偿/惩罚操作。BFS调度器同样采用二级队列,第一级是优先级分类,第二级是个
今天外出,资深烟民在机场安检后怎能不找吸烟室...上海虹桥机场,我看到了下面的设施:很 简单,不先进,也许你会说我孤陋寡闻,但我不反驳。这个装置真的让我怦然心动,真的!这种设计不会出自传统中国设计师之手,因为传统设计师希望让自己的设 计很复杂以提高门槛,觉得自己很牛X。这个设计组合了最简单的几个小物件,一把锁,几个打火机,一个固定铁架子,足够了,难道不是吗?很美!  
本文可以作为《Linux转发性能评估与优化(转发瓶颈分析与解决方案)》 的姊妹篇,这两篇文章结合在一起,恰好就是整个Linux内核协议栈的一个优化方案。事实上Linux协议栈本来就是面向两个方向的,一个是转发,更多的 是本地接收。目前大量的服务器采用Linux作为其载体,更加体现了协议栈本地处理相对于转发的重要性,因此本文就这个问题扯两句,欢迎拍砖!0.声明:0).关于来源昨天就答应皮鞋厂老板了,
作为这个系列的第一篇,我先来描述一下slab系统。因为近些天有和同事,朋友讨论过这个主题,而且觉得这个主 题还算比较典型,所以就作为第一篇了。其实按照操作系统理论来讲,进程管理应该更加重要些,按照我自己的兴趣来讲,IO管理以及TCP/IP协议栈会更加 有分量,关于这些内容,我会陆续给出。 Linux内核的slab来自一种很简
提到这个主题,我感到愤怒,我觉得自己被玩了一万次还保持着君子的无谓。其实内心充满了邪火!也许我应该放弃,也许应该看看这个世界,我无法。何时?何地?何人?何事?何苦!何如!何妨!何必!走过,遇见,相知,相恋!相亲,黯淡,相顾,长叹!十年!又有谁知道我的罪?!燃尽的激情让我选择放弃;然而是意义让我重新开始!是什么力量让崩溃来的如此彻底,然而又是什么证据表明苏醒是如此的无疑!心缥缈,人逍遥,悲欢泪,何足
这篇文章有点极端,但也可能迎合某些个人或者组织的意思。这篇文章较短,稍后我会继续写这个话题。心太痛,人太衰。1.协议栈植入芯片如 果你认为协议栈植入芯片是在消耗物资,磨灭成本,那你就错了。TCP/IP/Ethernet协议栈如今已经成了事实上的标准,多少年都没有变过。固化的 东西鉴于电路设计,开模,硅晶片工艺等开销,一般都是越不变的东西才考虑固化,否则你要付出巨大的代价,且不利于保护客户的投资。实
独悲需要忍受,快乐需要分享对Linux协议栈多次perf的结果,我无法忍受conntrack的性能,然而它的功能是如此强大,以至于我无法 对其割舍,我想自己实现一个快速流表,但是我不得不抛弃依赖于conntrack的诸多功能,比如state match,Linux NAT等,诚然,我虽然对NAT也是抱怨太多,但不管怎样,不是还有很多人在用它吗。 &n
周日傍晚,我去家附近的超市(...)买苏打水,准备自制青柠苏打,我感觉我做的比买的那个巴黎水要更爽口。由于天气太热,很多人都去超市避暑去了,超市 也不撵人,这仿佛是他们的策略,人过来避暑了,走的时候难免要买些东西的,就跟很多美女在公交地铁上看淘宝消磨时光,然后就下单了...这是多么容易一件 事,反之开车的美女网购就少很多。对于超市的避暑者,要比公交车上下单更麻烦些,因为有一个成本问题,这就是排队成
早上太燥热,突然想起三周前有人跟我交流了TSO的问题,我也描述了其原理,这个原理说来也是特别简单,无非就是靠网卡硬件来分段,计算 checksum,从而解放CPU周期。其实只要说一个就够了,既然靠硬件来分段,那么只能由硬件来计算checksum了,因为你根本就不知道硬件的分 段细节,所以你也没法在分段前计算好每一个段的checksum.... &nbs
凌晨3点钟,半夜睡眼朦胧,忽然听到左右两耳嗡嗡,身下的榻榻米垫沙沙作响,以为在梦境,然而睁眼清醒过来,发现并没有看见什么,依然在黑夜, 于是确认这不是在在梦。于是开灯,发现一只蟑螂趴在垫子上,两只蚊子却早已不知所踪。旁边睡着小小,我怒抓起蟑螂跑到卫生间好一顿蹂躏,然后本想继续梦里 那些个没有完成的各种约,可是却再也睡不着了。
任何事情都无法阻挡我对一种简单之美的由衷惊叹。半夜思索,无法入眠,索性起床看会书,关于中东文明的,可是又看不进去,也许是潮热的原因 吧...还不如静下心来写一篇意识流文章,我指的是不用思考的那种,我已经被近东,中东的错综复杂的历史搞的有点烦了,那真是太难了。然而你能想象我指的 那个不用思考的东西是一个算法吗?算法不都是很难的吗?真的就是一个算法,也可以说是一个数据结构,这就是skiplist。&n
不要在网络设备中show算法,赶紧让数据包通过,否则扣留。网络设备永远都是数据包要快速离开的地方,赶紧走,越快越好。我说这话可 能有点矛盾,快速离开没有可以show的算法怎么能行?!问题是,不该你做的事就别做,你根本就不是一个专业防火墙,干嘛搞什么垃圾iptables!把 你自己能做的工作,做好,show完美,其他的交给行家,交给适合的设备。网络通路中的算法不限于本机,整个路径中的每一个节点之间运
今天给一朋友回复邮件,主要内容是我最近两天的一个DxR Pro++的固化问题,他好像不明白我为什么一直避开查找树,其实我自己的也不明白,只是知道该避开,也就避开了,并且这还不够,同时避开的还有各种其它 的查找,排序,hash算法,几乎是一切算法都尽量让我避开了。所以,最终,我的DxR Pro固化设计虽然初步完成(这个设计没有公开,也不准备公开,但是我觉得思想比方法更重要,而这种思想正是我在本文想
宋朝是中华第一次被彻底毁灭的一个朝代,接下来的时代,中华被一次次毁灭,被外族毁灭!知道为什么吗? 宋之前,汉唐自不必说,就算五胡乱华时期,中国实行的是贵族股份制,国家有武将的一杯羹,他们不是为了工资而战斗,而是为了分红,为了荣耀而流血,因此在五胡乱华最血腥的年代,中国北方全面沦陷后虽在南方偏安一隅,但起码保全了下来!宋之后(包括我们现在的people's republic of
由于昨晚实在太困了,解释问题的时候眼睛就花了,脑子也短路了。早上起来,发现家人都还在睡,就想继续述说昨晚没有说带劲的东西了。我的解释图再次给出我的硬件转发原理图:请 注意,没有任何优化,你可以试着用一些小技巧将其进一步的优化,也可以直接用标准的TCAM来映射它。此图里,我详细展示了“最长前缀”逻辑是怎么做的, 而在TCAM路由转发表的实例中,往往被画成了黑盒子,叫做“优先级逻辑控制器”,不过,这个
有人问我,对于路由转发,硬件转发表的性能真的要超出软件查表比如Linux系统很多吗?我怎么回答呢?给出数据吗?我没有数据,因为我的本职不 是做这一块的。给出理论吗?恐怕我也没那口才。画个图?我发现我系统没有安装画逻辑电路的工具。那怎么办?这个问题的答案我真真在心里,只是难于言表,于 是乎,我采用手绘图手机拍照的方式,展示一下硬件转发表的威力,由于没有实际数据,我采用相对比较的方式,让诸位看一下软件
锁的开销锁的开销是巨大的,特别是对于多核多处理来讲。 引入多处理,本身就是为了将并行化处理以提高性能,然而由于存在共享临界区,而这个临界区同时只能有一个线程访问(特别是对于写操作),那么本来并行的执 行流在这里被串行化了,形象地看,这里好像是宽阔马路上的一个瓶颈,由于串行化是本质上存在的,因此该瓶颈就是不可消除的。问题是线程
首先,请求不要再诬陷Netfilter!虽然它有一些固有性能损耗,但敬请不要将iptables和Netfilter等同,如果你要抓元凶,请直接说iptables,而不要说成Netfilter! iptables真的是弱爆了!它的ipt_do_table竟然是五大元凶之一,如果规则超过了7000,那么它就是之首(其它的元凶是
如果你用Linux perf tool的top命令做热点纠察时,你会发现,前10名嫌疑犯里面肯定有好几个都是锁!在进行并行多处理时,不可 避免地会遇到锁的问题,这是不可避免的,因为这一直以来也许是保护共享数据的唯一方式,被保护的区域就是临界区。而我们知道,锁的开销是巨大的,因为它不 可避免地要么等待,要么让别人等待,然而这并不是开销的本质,开销的本质在于很多锁都采用了“原子操作”这么一个技术,如此
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号