自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 资源 (4)
  • 收藏
  • 关注

原创 本地自旋锁与信号量/多服务台自旋队列-spin wait风格的信号量

周日傍晚,我去家附近的超市(...)买苏打水,准备自制青柠苏打,我感觉我做的比买的那个巴黎水要更爽口。由于天气太热,很多人都去超市避暑去了,超市也不撵人,这仿佛是他们的策略,人过来避暑了,走的时候难免要买些东西的,就跟很多美女在公交地铁上看淘宝消磨时光,然后就下单了...这是多么容易一件事,反之开车的美女网购就少很多。对于超市的避暑者,要比公交车上下单更麻烦些,因为有一个成本问题,这就是排队成本。

2015-07-28 05:39:17 4852

原创 TCP Segment Offload(TSO)的实现原理浅析

早上太燥热,突然想起三周前有人跟我交流了TSO的问题,我也描述了其原理,这个原理说来也是特别简单,无非就是靠网卡硬件来分段,计算checksum,从而解放CPU周期。其实只要说一个就够了,既然靠硬件来分段,那么只能由硬件来计算checksum了,因为你根本就不知道硬件的分段细节,所以你也没法在分段前计算好每一个段的checksum....       TSO的原理几乎每个人都知道,事实上它是怎么实

2015-07-25 11:57:41 12120 3

原创 IP网络,光网络以及轨道交通的高速卸载随想

凌晨3点钟,半夜睡眼朦胧,忽然听到左右两耳嗡嗡,身下的榻榻米垫沙沙作响,以为在梦境,然而睁眼清醒过来,发现并没有看见什么,依然在黑夜,于是确认这不是在在梦。于是开灯,发现一只蟑螂趴在垫子上,两只蚊子却早已不知所踪。旁边睡着小小,我怒抓起蟑螂跑到卫生间好一顿蹂躏,然后本想继续梦里那些个没有完成的各种约,可是却再也睡不着了。       一想到一会儿就要坐528路公交车穿过可恶的沪太路,心里就很是不爽

2015-07-24 05:39:43 5164

原创 基于天然概率的无需人为平衡的skiplist的美之展现

任何事情都无法阻挡我对一种简单之美的由衷惊叹。半夜思索,无法入眠,索性起床看会书,关于中东文明的,可是又看不进去,也许是潮热的原因吧...还不如静下心来写一篇意识流文章,我指的是不用思考的那种,我已经被近东,中东的错综复杂的历史搞的有点烦了,那真是太难了。然而你能想象我指的那个不用思考的东西是一个算法吗?算法不都是很难的吗?真的就是一个算法,也可以说是一个数据结构,这就是skiplist。    

2015-07-22 06:01:51 8105

原创 路由器,防火墙的角色

不要在网络设备中show算法,赶紧让数据包通过,否则扣留。网络设备永远都是数据包要快速离开的地方,赶紧走,越快越好。我说这话可能有点矛盾,快速离开没有可以show的算法怎么能行?!问题是,不该你做的事就别做,你根本就不是一个专业防火墙,干嘛搞什么垃圾iptables!把你自己能做的工作,做好,show完美,其他的交给行家,交给适合的设备。网络通路中的算法不限于本机,整个路径中的每一个节点之间运行的

2015-07-19 22:02:58 4566

原创 硬件处理和软件处理之间的异同与边界

今天给一朋友回复邮件,主要内容是我最近两天的一个DxR Pro++的固化问题,他好像不明白我为什么一直避开查找树,其实我自己的也不明白,只是知道该避开,也就避开了,并且这还不够,同时避开的还有各种其它的查找,排序,hash算法,几乎是一切算法都尽量让我避开了。所以,最终,我的DxR Pro固化设计虽然初步完成(这个设计没有公开,也不准备公开,但是我觉得思想比方法更重要,而这种思想正是我在本文想阐述

2015-07-19 21:50:24 9705 2

原创 硬件路由转发原理浅析-清晨补充

由于昨晚实在太困了,解释问题的时候眼睛就花了,脑子也短路了。早上起来,发现家人都还在睡,就想继续述说昨晚没有说带劲的东西了。我的解释图再次给出我的硬件转发原理图:请注意,没有任何优化,你可以试着用一些小技巧将其进一步的优化,也可以直接用标准的TCAM来映射它。此图里,我详细展示了“最长前缀”逻辑是怎么做的,而在TCAM路由转发表的实例中,往往被画成了黑盒子,叫做“优先级逻辑控制器”,不过,这个逻辑

2015-07-19 08:08:09 9956

原创 硬件路由转发原理浅析

有人问我,对于路由转发,硬件转发表的性能真的要超出软件查表比如Linux系统很多吗?我怎么回答呢?给出数据吗?我没有数据,因为我的本职不是做这一块的。给出理论吗?恐怕我也没那口才。画个图?我发现我系统没有安装画逻辑电路的工具。那怎么办?这个问题的答案我真真在心里,只是难于言表,于是乎,我采用手绘图手机拍照的方式,展示一下硬件转发表的威力,由于没有实际数据,我采用相对比较的方式,让诸位看一下软件转发

2015-07-18 23:41:07 15208 13

原创 一个Linux内核的自旋锁设计-接力嵌套堆栈式自旋锁

锁的开销锁的开销是巨大的,特别是对于多核多处理来讲。       引入多处理,本身就是为了将并行化处理以提高性能,然而由于存在共享临界区,而这个临界区同时只能有一个线程访问(特别是对于写操作),那么本来并行的执行流在这里被串行化了,形象地看,这里好像是宽阔马路上的一个瓶颈,由于串行化是本质上存在的,因此该瓶颈就是不可消除的。问题是线程执行流如何度过这个瓶颈,很显然,它们谁都绕不开,现在问题是是它们

2015-07-17 06:55:24 4717

原创 Linux软防火墙ACL匹配的优化点

首先,请求不要再诬陷Netfilter!虽然它有一些固有性能损耗,但敬请不要将iptables和Netfilter等同,如果你要抓元凶,请直接说iptables,而不要说成Netfilter!       iptables真的是弱爆了!它的ipt_do_table竟然是五大元凶之一,如果规则超过了7000,那么它就是之首(其它的元凶是nf_conntrack函数,它们也是Netfilter的HOO

2015-07-12 23:32:25 5386

原创 Linux内核RCU(Read Copy Update)锁简析-前传

如果你用Linux perf tool的top命令做热点纠察时,你会发现,前10名嫌疑犯里面肯定有好几个都是锁!在进行并行多处理时,不可避免地会遇到锁的问题,这是不可避免的,因为这一直以来也许是保护共享数据的唯一方式,被保护的区域就是临界区。而我们知道,锁的开销是巨大的,因为它不可避免地要么等待,要么让别人等待,然而这并不是开销的本质,开销的本质在于很多锁都采用了“原子操作”这么一个技术,如此一个

2015-07-12 22:53:31 3532

原创 Linux内核RCU(Read Copy Update)锁简析

在很早以前,大概是2009年的时候,写过一篇关于Linux RCU锁的文章《RCU锁在linux内核的演变》,现在我承认,那个时候我虽然懂了RCU锁,但是我没有能力用一种非常简单的描述把Linux的实现给展示出来,有道是你能给别人用你自己的方式非常简洁地描述清楚,你才是真正的精通它,否则,无异于背诵。换个说法,如果你在被面试,在短时间内靠嘴说给面试官,且他还要能听明白,就说明自己真的懂了,这种时候

2015-07-12 10:36:54 10373 4

原创 为什么P2P模式下载的人越多速度越快,为什么P2P伤害机械硬盘

台风来临前的夜晚,有点激动不想睡觉,看了几个电影,日本恐怖片,台风雨夜,非常不错,P2P很流畅,观察IP地址大量也是附近的,江浙沪,难道也都在迎台风看电影?       大家都知道使用P2P模式下载速度会非常快,原理其实也并不难,毕竟P2P没有中心瓶颈,每个节点既是下载方又是上传方,一起接力努力的模型总比C/S模式对中心带宽的争抢要好吧,但是这背后有没有什么理论根据呢?本文就是描述这个理论根据的,

2015-07-11 09:47:06 25844 5

原创 为InfiniBand而哭泣

自古就不乏还没有开始就结束的那种精彩,我称之为殉道者。InfiniBand就是其中之一,虽然它有陨落之势,我依然要为它鼓掌。如果说以太网旨在将主机联系在一起,那么InfiniBand的初衷就是将其肢解,这种基因的不同,注定它们将展开一场大战,当然这是后话。服务器强大了,但是PCI总线太慢了,且其并行化设计根本不适合高速环境,正确的做法是串行化,同时提高时钟频率,因为并行化根本就经不起时钟频率的提高

2015-07-11 00:34:09 10710 3

原创 Linux内核3.11的socket busy poll机制避免睡眠切换

Linux的网络协议栈非常独立,上下通过两个接口分别和用户态以及设备相连,也可以看作是北向和南向接口...北向通过socket接口,南向通过qdisc接口(你可以认为是上层的netdev queue,对于接收接口,NAPI的poll队列则是另一个例子),不管是socket还是qdisc,都是基于队列来管理的,也就是说,三个部分是独立的,socket只能看到读写队列,而看不到协议栈本身,socket

2015-07-08 06:44:14 9606 1

原创 从Linux 2.6.8内核的一个TSO/NAT bug引出的网络问题排查观点(附一个skb的优化点)

梦中没有错与对,梦中没有恨和悔...最好闭上你的嘴,这样才算可爱...我不会说:这不公道,我不能接受。我会用朴素的文字记录点点滴滴,早上4点多起来,一气呵成近期的收获与评价,愤怒与忏悔。四年多前的一个往事大约在2010年的时候,我排查了一个问题。问题描述如下:服务端:Linux Kernel 2.6.8/192.168.188.100客户端:Windows XP/192.168.40.34业务流程

2015-07-08 06:04:17 7965 1

原创 TCP断开时的状态与Linux nf_conntrack

题目有点大了,但是难免有一些愤怒!我们的网关产品目前处在系统测试阶段,不太顺利,是太不顺利!各方面都在懈怠,包括我!我除了懈怠,还在找机会逆袭!顺便蔑视一下测试者,希望产生一种想象,即他发现的问题其实不是问题,而是因为他的无知所导致!就在昨天,机会来了,我便气扬了!       很多人觉得我是下三层网络的专家,对于TCP之类的无权问津,但是我对TCP除了辱骂还是辱骂!因为它太复杂了,作为一个低层的

2015-07-04 10:14:13 7814 1

原创 根据排队论阐述路由器和高速公路的拥堵以及拥堵缓解问题(二)

关于本文相信很多人都在节假日的高速公路上遇到过大拥堵,但是最终拥堵会解除。也有人在质疑路由器队列的长度,以为最终路由器会拒绝服务。我曾经在10年前天真地以为高速公路的设计者和路由器交换机的设计者工作是多么的轻松。然而现在,当我知道更多后,发现事实并不如此。需要更多的权衡和博弈,不仅仅是技术方面的,还涉及到了心理学,社会学,经济学。       因此本文旨在用最简单的描述分析一下排队理论对高速公路以

2015-07-04 08:34:40 8866

原创 Linux转发性能评估与优化-转发瓶颈分析与解决方案(补遗)

补遗关于网络接收的软中断负载均衡,已经有了成熟的方案,但是该方案并不特别适合数据包转发,它对服务器的小包处理非常好,这就是RPS。我针对RPS做了一个patch,提升了其转发效率。下面是我转载的我自己的原文。线速问题很多人对这个线速概念存在误解。认为所谓线速能力就是路由器/交换机就像一根网线一样。而这,是不可能的。应该考虑到的一个概念就是延迟。数据包进入路由器或者交换机,存在一个核心延迟操作,这就

2015-07-04 08:29:54 5119 1

原创 根据排队论阐述路由器和高速公路的拥堵以及拥堵缓解问题

关于本文相信很多人都在节假日的高速公路上遇到过大拥堵,但是最终拥堵会解除。也有人在质疑路由器队列的长度,以为最终路由器会拒绝服务。我曾经在10年前天真地以为高速公路的设计者和路由器交换机的设计者工作是多么的轻松。然而现在,当我知道更多后,发现事实并不如此。需要更多的权衡和博弈,不仅仅是技术方面的,还涉及到了心理学,社会学,经济学。       因此本文旨在用最简单的描述分析一下排队理论对高速公路以

2015-07-04 08:11:16 6798

原创 Linux内核软RPS实现网络接收软中断的负载均衡分发

例行的Linux软中断分发机制与问题Linux的中断分为上下两半部,一般而言(事实确实也是如此),被中断的CPU执行中断处理函数,并在在本CPU上触发软中断(下半部),等硬中断处理返回后,软中断随即开中断在本CPU运行,或者wake up本CPU上的软中断内核线程来处理在硬中断中pending的软中断。       换句话说,Linux和同一个中断向量相关的中断上半部和软中断都是在同一个CPU上执

2015-07-01 06:40:04 12886 6

一个iptables的stateless NAT模块实现

如果你在寻找Linux上配置诸如Cisco设备上的static双向NAT的方法,这个或许就是你想要的; what?你觉得它完不成PAT?是的,它不行。但是想做PAT为何不使用现有的iptables实现呢?它可以自动为你解决元组唯一性问题。不要从概念上分析,事实上,static双向NAT是完全对称的,一对一的 ,也只有在BOX两边的网络在拓扑级别是完全对等的情形下,这种NAT或许才是有用的,Cisco设备经常处在这样的位置,比如一个很大的stub节点的出口位置,比如两个domain的中间位置... 我将名字取为STATIC-2-WAY-NAT,比较长也比较怪,完全不符合UNIX的小写短名传统,我的想法是:这样可以少写很多的帮助信息,因为名字就是自解释的。

2014-12-27

模块化的nf-HiPAC

原版的nf-hipac需要为内核打patch,且只支持较低版本的内核,构建起来相对比较麻烦。 模块化后的nf-hipac可以直接作为内核可加载模块编译,且适配了高版本的Linux内核。为了移植工作简化,去掉了和iptables模块的联动支持!

2014-11-21

配置文件还有一些other

代码和配置iptables配置文件,还有一些别的东西

2010-04-16

关于linux内核以及其他个人体会的文集

本文集是我用将近两年的时间写成的,大多数文章是关于linux内核的,另外还有一些我自己对计算机的理解,还有一些历史,音乐方面的东西。适合于对linux内核思想感兴趣的阅读,文章偏重于对于思想的理解。

2009-09-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除