ipset高大上性能果断将nf-HiPac逼下课

netfilter,sourceforge,github上有一个凄凉的项目,那就是nf-hipac,这个曾经给Linux
firewall设计带来希望的项目早在2005年就停止了更新和维护,而我本人则是在2007年才被曹老师带上道的...知道hipac则是2012年
的事,曾经在2.6.13上编译成功,获得了声称的所谓高性能,后来我的工作大部分都在2.6.32上进行,由于2.6.32引入大量2.6.13上没有
的机制,也由于版本间隔太多,内核API不兼容,hipac移植到2.6.32上费了不少劲,消耗了好几个本来应该干点别的的夜晚。

事实上,曾经,我对hipac是很认可,理由之一就是我发现它是“用规则来匹配数据包”的,而不是像iptables那样“用数据包来匹配规则”的,毫无
疑问,Cisco和华为等厂商的硬件设备几乎都是使用这种方式来匹配ACL的,当我发现Linux上的hipac可以使用软件来实现类似机制时,当然会兴
奋一阵子的。另外一个理由则是,我一直都比较认可多个match的并行匹配,这样可以很好的利用多个CPU核心,现在我认为我的这第二个理由完全是胡
扯!cache missing,DCA,DMA且不多说,光是调度开销就已经抵销掉了并行匹配的优势,如果没有专门的硬件来进行matching
offload,就不要在软件层面用CPU去做这种转瞬即逝的事情,换句话说,那就是match匹配的粒度太小了,大炮不是用来打蚊子的,CPU是流水化
作业的,没有规划好流水线的执行流是不适合CPU来执行的。
      
喜欢hipac就只剩下了第一个理由!当我试用了ipset之后,发现hipac真的是个鸡肋项目,并且完全违背了UNIX的原则!怎么说呢?要知道如果
我需要禁掉10000个IP地址,用iptables的-s,-d的话,就需要10000条规则,来了一个数据包就需要顺序匹配这10000条规则,注
意,是一个一个比对。能不能反过来,让这10000个IP自己发现它们是否包括这个数据包的IP地址呢?这就需要将这10000个IP地址作为一个整体来
对待,hipac项目实现的要旨就是这样,内部会将这10000个IP地址组织成一个便于高效查找的数据结构,而不是像iptables那样逐条匹配。然
而ipset更适合做这件事,而且更符合UNIX的原则。
       如果我们用诸如hipac的方案,我会这样添加10000个IP地址规则(我使用了iptables的语法):
hipac -s ip1 -j DROP
...
hipac -s ip10000 -j DROP

写法上和iptables一样,只是内部将这些IP地址组织成了树或者hash表,如果既要匹配源又要匹配目标的话,每条规则只需要稍微复杂一点:
hipac -s ip1 or -d ip1 -j DROP
...
hipac -s ip10000 or -d ip10000 -j DROP

显然,一条规则包含了两个匹配,完成了两件事。如果我用ipset的话,则是完全分开了所有的事情:
ipset create srcset hash:ip
ipset create dstset hash:ip
ipset add srcset ip1
...
ipset add srcset ip10000
ipset add dstset ip1
...
ipset add dstset ip10000
iptables -A FORWARD -m set --match-set srcset src -j DROP
iptables -A FORWARD -m set --match-set dstset dst -j DROP


然用的是iptables,最后我贴出性能测试的结果后就会发现,iptables本身并不是性能瓶颈,如果说10000条规则确实降低了性能,那么错误
在于你添加了10000条规则。完全可以将iptables作为一个机制而不是策略,你需要优化的是match而不是iptables框架本身。

以下是我的性能测试结果,注意这是一个相对值而不是绝对值,因为我是在虚拟机上跑的。因此我就不贴硬件配置了。另外,我用的是UDP,这样只能从丢包上看性能了,摆脱了TCP的流量控制算法的不同而带来的结果不同。

1.裸跑,没有iptables,没有ipset

2.使用ipset,添加超级多的IP地址

3.使用iptables,添加10000条左右iptables

这个结果足以让nf-hipac下课了。另外我觉得,nf-hipac下课也有它自己的原因,它从来没有做到内核模块化和用户程序即编译即使用,为内核打patch,重新编译等就会吓退很多有心者。
       最近关于iptables的工作并不在其本身的性能优化,而是代码感观上的优化,比如nftables项目等。

时间: 2024-11-02 23:25:25

ipset高大上性能果断将nf-HiPac逼下课的相关文章

ThinkPHP 3.2 性能优化,实现高性能API开发

需求分析 目前的业务全站使用ThinkPHP 3.2.3,前台.后台.Cli.Api等.目前的业务API访问量数千万,后端7台PHP 5.6,平均CPU使用率20%. 测试数据 真实业务 php5.6:500 QPS php7.0:850 QPS 真实业务中减少一次Mysql查询业务或者减少一次Redis读写 php5.6:800 QPS php7.0:1250 QPS 目前优化的结果: ThinkPHP可以完整的跑在缓存中: 在不需要mysql查询时,不建立mysql连接: 不读写redis时

SqlServer性能检测和优化工具使用详细

原文:SqlServer性能检测和优化工具使用详细 工具概要 如果你的数据库应用系统中,存在有大量表,视图,索引,触发器,函数,存储过程,sql语句等等,又性能低下,而苦逼的你又要对其优化,那么你该怎么办?哥教你,首先你要知道问题出在哪里?如果想知道问题出在哪里,并且找到他,咱们可以借助本文中要讲述的性能检测工具--sql server profiler(处在sql安装文件--性能工具--sql server profiler) 如果知道啦问题出现在哪里,如果你又是绝世高手,当然可以直中要害,写

SqlServer性能检测和优化工具使用详细(转)

转载链接:http://www.cnblogs.com/knowledgesea/p/3683505.html 工具概要 如果你的数据库应用系统中,存在有大量表,视图,索引,触发器,函数,存储过程,sql语句等等,又性能低下,而苦逼的你又要对其优化,那么你该怎么办?哥教你,首先你要知道问题出在哪里?如果想知道问题出在哪里,并且找到他,咱们可以借助本文中要讲述的性能检测工具--sql server profiler(处在sql安装文件--性能工具--sql server profiler) 如果知

用ipset配置linux防火墙

iptables是在linux内核里配置防火墙规则的用户空间工具,它实际上是netfilter框架的一部分.可能因为iptables是netfilter框架里最常见的部分,所以这个框架通常被称为iptables,iptables是linux从2.4版本引入的防火墙解决方案. ipset是iptables的扩展,它允许你创建 匹配整个地址sets(地址集合) 的规则.而不像普通的iptables链是线性的存储和过滤,ip集合存储在带索引的数据结构中,这种结构即时集合比较大也可以进行高效的查找. 除

利用redis replication实现redis服务器热迁移

利用redis replication实现redis服务器热迁移 文章开头我先声明:标题过于高大上,主要是为了装逼. 某个月黑风高的夜晚,一只运维攻城狮和一只PHP程序猿在促膝长谈,只见PHP程序猿双眼目光呆滞的盯着眼前屏幕上的一坨坨代码状文本,突然问出一句:"这个你会搞吗?"语气中透着一股程序猿的傲娇与对运维这一行业的轻蔑.攻城狮显然感觉到了空气中的那一缕杀气,但为了不给这个行业丢脸,攻城狮还是傲娇的仰头,冷冷的说:"我瞅瞅!" 问题是这样的,程序员他们公司最近要

OSChina 周五乱弹 —— 小投资高风险大回报

周五,不知不觉,感觉这周过的太快,也许是有愚人节的缘故.但是从季节上来讲,这周过得很慢,贯穿了一年四季!听说北方下大雪,倒春寒,俺们这边热成狗,偶尔还降降温,看着要下雨又不下雨的姿势,觉得老天在春天也是挺羞射的... @我讨厌很长很拉风名字 :初到上海的时候,一天下班晚,在等公交车,遇见一个女神级别的MM,于是上前搭讪:"姐,等车啊?",女神说:"等生意." 她的回复令我一生难忘! @Nanke :初到深圳的时候,一天下班晚,在上沙村,看见一个女神级别的MM,于是路

慢慢产品经理路,第一步真是太难了。

11月1日,正式迈入产品经理这行. 听起来高大上,其实是个苦逼无比的工作."经理",呵呵.目前来说就是个总管,啥都要管,鸡毛蒜皮的事,只要和产品有关,就是你的事儿. 过去4年,做网站运营,而且也做出了一定的成绩,当上了主管,人生中第一份工作,个人觉得做到这样样的成绩,还是挺好的.薪资不错,虽然销售压力大,但是因为已经有一定的规模了,也还好.最后辞职的原因,是因为公司比较小,而且私企,老板,你们都懂的,出于未来职业规划考虑,辞职了.哈哈,结果在辞职以后,就出去旅游浪了一个月.于是..就懒

Neutron 理解 (8): Neutron 是如何实现虚机防火墙的 [How Neutron Implements Security Group]

学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GRE/VxLAN 虚拟网络 (4)Neutron OVS OpenFlow 流表 和 L2 Population (5)Neutron DHCP Agent (6)Neutron L3 Agent (7)Neutron LBaas (8)Neutron Security Group (9)Neutro

学习CSS3动画(animation)

CSS3就是出了不少高大上的功能,3D效果.动画.多列等等.今天写篇文章记录怎么一下怎么用CSS3写一个动画. 丑话还得说前头,IE9以及以下版本不支持CSS3动画(如真要实现可以考虑用js,不过估计效果也不太好).chrome和safafi建议加上前缀-webkit-以向前兼容老版本.   今天简单的做一个动画. 首先,先简单画一个div,然后添上背景图片. <body> <div class="demo"> 我是demo </div> </