免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: sbyond
打印 上一主题 下一主题

如何让 linux 包转发达到 40万pps,尝试中! [复制链接]

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
31 [报告]
发表于 2005-11-17 22:19 |只看该作者
原帖由 platinum 于 2005-11-9 11:31 发表
X86 构架很难做千兆的网络设备,PCI 总线不够大,不知道 PCI-E 的 133 出来以后,再配上 64 位处理器能否实现


PCI-X 是 64bit 133MHz的. 应该能够用的. 但好象一台机器也就支持一个133Mhz的然后就只能是两个 100Mhz的. 再下来就是66Mhz的了.

X86应该是没什么大问题的. CheckPoint还不是多数放在x86上跑了. 只不过要优化一下, 咱那PC可能差一点.

论坛徽章:
0
32 [报告]
发表于 2005-11-18 09:55 |只看该作者
我想这个可能是 LINUX性能的问题,不知楼主用的是什么网卡,驱动是哪的?有时候换个驱动会快很多。现在有一个技术叫零拷贝。还有如果你是按到交换机上。也要看看交换机是否能达到那么高。有些交换机比较慢。建议用3com的。

论坛徽章:
0
33 [报告]
发表于 2005-11-18 10:08 |只看该作者
sorry ,前面提供资料有误,现在更正一下,
最初PCI总线是32bit,33Mhz,这样带宽为133Mbps。
接着因为在服务器领域传输要求Intel把总线位数提高到64,这样又出现了2种PCI总线,分别为64bit/33Mhz和64bit/66Mhz,当然带宽分别翻倍了,为266Mbps和533Mbps,这个比较通常的名称应该是pci-64,但这好像是intel自己做的,没有行业标准。
稍后一段时间,在民用领域,单独开发出了AGP,32bit,66Mhz,这样带宽为266Mbps,再加上后来AGP2.0的2X和4X标准,最高4X的带宽高达1Gbps,但是这个只是为显卡设计的。
同时服务器领域也没闲着,几家厂商联合制定了PCI-X,这个就是真正PCI下一代的工业标准了,其实也没什么新意,就是64bit,133Mhz版本的PCI,那这样带宽就为1Gbps,后来PCI-X 2.0,3.0又分别提升频率,经历过266Mhz,533Mhz,甚至1GMhz,各位自己算带宽吧,我乘法学的不好,这个带宽可以说是非常足够的了,不过这个时候PCI也面临一些问题:一方面是频率提高造成的并行信号串扰,另一方面是共享式总线造成的资源争用,总之也就是说虽然规格上去了,但实际效果可能跑不了这些指标。
然后就是我们目前的明星pci-E了,这个标准应该是和pci-X同时出现的,但是由于当时用不到这么高带宽,并且不像pci-X一样兼容老pci板卡,所以一直没什么发展,直到最近民用领域显卡带宽又不够了,服务器领域对pci-X也觉得不爽了,pci-E才真正显出优势来,目前这个标准应该会替代agp和pci-X,成为民用和服务器两大领域的统一标准。
PCI-E标准的最大特点就是串行总线,和普通pci的区别类似于ide和sata的区别,具体说起来就比较麻烦了,简单来看指标的话,频率为2.5Ghz(这个恐怖,串行的好处,同样因为串行,位宽就没意义了,但是据说是什么8bit/10bit的传输),带宽 pci-E 1X单向传输250MBps,双向也就500了,同时pci-e的倍速最高可达16X,多少就自己乘吧,要注意的是pci-e不存在共享问题,也就是说挂在总线上的任何一个设备都会达到这个速度而不是所有设备带宽的总合。下面引用一篇文章的一段,感兴趣的自己看一下:

  在工作原理上,PCI Express与并行体系的PCI没有任何相似之处,它采用串行方式传输数据,而依靠高频率来获得高性能,因此PCI Express也一度被人称为“串行PCI”。由于串行传输不存在信号干扰,总线频率提升不受阻碍,PCI Express很顺利就达到2.5GHz的超高工作频率。其次,PCI Express采用全双工运作模式,最基本的PCI Express拥有4根传输线路,其中2线用于数据发送,2线用于数据接收,也就是发送数据和接收数据可以同时进行。相比之下,PCI总线和PCI-X总线在一个时钟周期内只能作单向数据传输,效率只有PCI Express的一半;加之PCI Express使用8b/10b编码的内嵌时钟技术,时钟信息被直接写入数据流中,这比PCI总线能更有效节省传输通道,提高传输效率。第三,PCI Express没有沿用传统的共享式结构,它采用点对点工作模式(Peer to Peer,也被简称为P2P),每个PCI Express设备都有自己的专用连接,这样就无需向整条总线申请带宽,避免多个设备争抢带宽的糟糕情形发生,而此种情况在共享架构的PCI系统中司空见惯。

    由于工作频率高达2.5GHz,最基本的PCI Express总线可提供的单向带宽便达到250MBps(2.5Gbps×1 B/8bit×8b/10b=250MBps),再考虑全双工运作,该总线的总带宽达到500MBps—这仅仅是最基本的PCI Express ×1模式。如果使用两个通道捆绑的×2模式,PCI Express便可提供1GBps的有效数据带宽。依此类推,PCI Express ×4、×8和×16模式的有效数据传输速率分别达到2GBps、4GBps和8GBps。这与PCI总线可怜的共享式133MBps速率形成极其鲜明的对比,更何况这些都还是每个PCI Express可独自占用的带宽。


总之写这么多废话,目的就是说明就系统总线来说,承受高带宽,高pps是没问题的。
再上面有人说即使总线没限制,cpu也会成为瓶颈,这话有一定道理,其实关键在于高pps带来的恐怖中断flood,其实对于这么高的中断,i386的apic(高级中断控制)是完全处理的来,瓶颈是在操作系统的中断处理程序上了,这方面问题就由操作系统来解决了,所以不是什么不可能完成的任务,实际上目前也都有很成熟的方案了,比如BSD系统的网卡Polling,Linux也有,具体叫什么我忘记了。
还是那句话,别对i386没信心,也别对目前的PC架构计算机的能力有任何怀疑,事实证明,这样的搭配至少能满足90%的应用需要。

论坛徽章:
0
34 [报告]
发表于 2005-11-18 15:51 |只看该作者
目前,linux作为一种通用的操作系统,
的确跟不上超高速网络流量处理的需求了
不知在这方面有什么linux的改进项目没有?
听说通过精简优化其TCP/IP堆栈可以获得近20%的性能提升,不知有没有这回事?
觉得关键还在系统中断方面,真是成也萧何,败也萧何!
原帖由 colddawn 于 2005-11-18 10:08 发表
sorry ,前面提供资料有误,现在更正一下,
最初PCI总线是32bit,33Mhz,这样带宽为133Mbps。
接着因为在服务器领域传输要求Intel把总线位数提高到64,这样又出现了2种PCI总线,分别为64bit/33Mhz和64bit/66Mhz ...

论坛徽章:
0
35 [报告]
发表于 2005-11-21 09:15 |只看该作者
原帖由 caibird3rd 于 2005-11-18 15:51 发表
目前,linux作为一种通用的操作系统,
的确跟不上超高速网络流量处理的需求了
不知在这方面有什么linux的改进项目没有?
听说通过精简优化其TCP/IP堆栈可以获得近20%的性能提升,不知有没有这回事?
觉得关键 ...



优化协议栈的工作确实有人在搞,性能提升20%的说法只是听说,没见有实际证据,至于linux不能应付搞网络流量处理的问题,请问您是从哪里得来的?有没有实际数据?所谓高速网络高到什么程度?高流量还是高pps?

论坛徽章:
0
36 [报告]
发表于 2005-11-21 10:28 |只看该作者
pci-e现在可以比pci-X达到跟快的速度了,现在ic设计里,并行的发展已经达到一个瓶颈,因为频率的提高,分布和泛生也随之更复杂,所以设计同样性能的一个PCB,使用PCI-E比X会容易的多,并且现在Synopsys和Cadence对于PCI-e的IPcore的公布,新的主板使用E代替X的会越来越多,X的线真的太多了,串扰太难搞了,最少要6层板才搞的定,E就好搞到多,几个蛇部就过去了。其实从时序分析上看不出X比E的优点在那,可能还是在产品链上把。

论坛徽章:
0
37 [报告]
发表于 2005-11-21 16:04 |只看该作者
原帖由 colddawn 于 2005-11-21 09:15 发表



优化协议栈的工作确实有人在搞,性能提升20%的说法只是听说,没见有实际证据,至于linux不能应付搞网络流量处理的问题,请问您是从哪里得来的?有没有实际数据?所谓高速网络高到什么程度?高流量还是高pps?


偶见过许过权威的测试报告,测试过国内很多用linux作的防火墙、安全网关……等一大堆东东,用smartbit来测:
pIII 1G 的CPU,可以达到35%/64bytes左右。freebsd的话,稍好一点,不过也仅是“稍”;离线速差得太远了。
————————————————————
这个还只是100M,如果1000M的话,更是惨……即使是双至强的CPU。

偶某高校的朋友用四至强的服务器,达到了1000M线速……不过成本也太……

——————————
性能不佳,有硬件的原因,也有软件的原因。不过就目前Linux的这种定位、目前这种网络堆栈架构来看,短时间要提高,是不太现实的。
所以,只能希望通过硬件来提升,只是通用X86架构,同样,定位也不是专门针对此的,所以……
关于X86的这点,偶同志从CPU的角度,有一篇精典论述:
http://www.skynet.org.cn/viewthread.php?tid=11&fpage=1

听说,ixp1200以上,powerNP高频的CPU可以达到线速。也看过一些硬件厂商产品发布会现场演示,的确如此,不过本人没有亲自试过,不敢肯定……

论坛徽章:
0
38 [报告]
发表于 2005-11-22 09:16 |只看该作者
原帖由 独孤九贱 于 2005-11-21 16:04 发表


偶见过许过权威的测试报告,测试过国内很多用linux作的防火墙、安全网关……等一大堆东东,用smartbit来测:
pIII 1G 的CPU,可以达到35%/64bytes左右。freebsd的话,稍好一点,不过也仅是“稍”;离线速差得 ...



请给出所谓权威报告的链接?谢谢!
国内很多防火墙是用了linux+iptables再套个外壳实现的,要知道光netfilter架构处理占用的cpu时间就高达30%,如果再加上那个性能风传非常差的conntrack的话,这个结果不出奇,这并不能说明是总线瓶颈或者是cpu瓶颈,另一方面,即使是你说的35%的带宽利用率,你有统计过那时中断/s的数量吗?有证据证明是cpu中断处理不过来了吗?
linux的我倒真是没测试过,但是同样是p3 1G,板载pro 100,我装过freebsd,仅仅使用ipfw+bridge做透明防火墙,连内核都没有优化过,轻松达到80M,无延迟,无丢包,100%线速说不上,但90M的时候的丢包率也是基本可以忽略不计。
如果一个1000M包转发的设备都要用4路Xeon,那24口千兆三层交换或者路由器岂不是要大型机?

论坛徽章:
0
39 [报告]
发表于 2005-11-22 09:37 |只看该作者
原帖由 colddawn 于 2005-11-22 09:16 发表



请给出所谓权威报告的链接?谢谢!
国内很多防火墙是用了linux+iptables再套个外壳实现的,要知道光netfilter架构处理占用的cpu时间就高达30%,如果再加上那个性能风传非常差的conntrack的话,这个结果不出 ...


不太同意你的话:

1、我的报告是国家信息安全测评中心测试的,只是关系很多商家的利益,不敢乱贴,sorry!
2、请贴出你的freebsd能到80M讲给出测试环境,以及测试的包的大小,我不太相信p3 1G的CPU,64bytes下能到80M,我现在有好几台freebsd的机器,p4的和至强的,两边用光阵列机来跑,512bytes下才能到100M,64bytes下离你说的数据差得太远,因为没有条件,没有办法拿Smartbit来做测试,不过我想误差应该不会太离谱。
3、目前intel架构的CPU网络数据处理与交换机的CPU等处理有质的差别,不能同一而论……否则大家做什么ASIC,做什么NP,拿一块p3不就完了……
4、至于性能不到,如果跑开软件不谈,光是谈硬件的话,我个人从经验来看,100M环境瓶颈主要在CPU,1000M则是一个综合的因素,目前PC架构在很多方面都无法满足1000M的大流量的处理。而如果要谈软件呢,linux和unix性能之别主要还是“其实是MBuf和skbuf的优劣,这是个老话题。……”

至于为什么我认为100M下边,硬件方面CPU是主要的瓶颈,这是因为
1、实践中,换个CPU,性能可以得到质的提升;
2、在目前的一些贴子中,我始终还是认为我同事说得有道理,把他的原话贴出来:
——————————————————————————————————————————————
目前,很多X86的防火墙厂商都宣称,64bytes小包线速转发,94%……,呵呵,让我们来看看kola关于这个的经典论述<部份地方稍有修改>:

一. 线速
线速转发是对一个网络中转设备的理想要求。但平时大多数人都关注着设备的bps(bits per second,每秒数据的位数),很少人会想到fps(frame per second,每秒数据的帧数)实际上更考验设备的转发能力。
简单的说,bps是指每秒钟有多少字节的数据经过,fps是每秒钟有多少个数据包经过。
以10Mb的网络来说,线速时bps为10M,fps最大值为14880。
那么这个14880是怎么计算出来的呢?
首先我们要知道几个规定:
1. 以太网内最小的数据包的大小为64字节,它包括4字节的CRC,2字节的以太网类型(或长度),6字节的源Mac地址,6字节的目的Mac地址以及46字节的负荷。
2. 以太网帧与帧之间至少要有96位(12字节)的帧间隙(IFP,inter frame gap)以确保区分两个数据包。
3. 每个数据帧开始之间必须要有8字节的Mac地址前导位(MAC preamble)以确保发送方接收方同步数据位。
因此,以太网内最小的数据包实际上是64+12+8=84字节=672位。
于是,10M网络环境下fps的最大值就是
10M位每秒 / 672 位每帧 = 14480 帧每秒。
同理,我们可以算出10M网络环境下fps的最大值为
10M位每秒 / ( ( 1518+12+8 ) * 8 ) 位每帧 = 812 帧每秒
而100M网络环境下这两个值分别为148809和8127。

二. 处理能力
我们已经知道了线速情况下最大的fps值,现在我们看看要达到线速所需要的处理能力。
假设市面上某防火墙的是X86架构的CII 900Mhz 的CPU,即每秒钟可以分成900M个时钟周期。
于是,在100M的网络环境下,处理一个数据帧所允许的最大时钟周期为:
900M 时钟周期每秒 / 148809 帧每秒 = 6048 时钟周期每帧
也就是说,要达到线速转发,900Mhz的CPU平均要在6048个时钟周期内完成对一个数据包的处理。
这只是理想情况,基于x86架构的系统里CPU还要负责各类中断(如系统时钟)的处理,每次中断时都要保存当前的运行状态,切换到中断处理程序,等中断处理完后,再恢复当前状态,切换回原来的处理流程。光是这个切换过程至少都要费上500个时钟周期,还不包括中断处理程序所用的时钟周期。好在这类中断还”不算“频繁,扣除系统这部分开销后,真正分摊到每个数据包的处理时间平均大约还有5500个时钟周期。
虽然Intel P3以上级的CPU如CII在设计指令集时已经将大量常用的指令(如两个寄存器相加/减)优化到可以在一个时钟周期内完成,但做为防火墙,更常用的是读/写内存数据(比如要比较源地址,计算IP的校验和等)这类多时钟周期的指令,所以5500个时钟周期内大约只能执行2000条指令。
对一个数据包的处理,从为这个数据包分配内存起,依次要检查以太网络协议(如果是RFC1042格式的数据包还要跳过LLC头找真正的以太网络协议),检查IP头、校验和(如果是TCP/UDP协议还要计算对应的校验和),DoS防御,状态检测,NAT规则,安全/统计规则,更新ARP/路由表,选择转发网卡,直到最终把这个数据包添加到发送队列中才算完成。
你认为2000条x86的指令能完成这一切吗?

三. 现实数据
2000条指令看起来很多,实际上并不多,举个例子,要完成最简单的 A = A + B 这个算式最优化的指令也要用上两条:
mov eax, [val_B]
add [val_A], eax
未优化的会用上四条:
mov eax, [val_A]
mov ebx, [val_B]
add eax, ebx
mov [val_A], eax
目前的防火墙的开发大多是在Unix/Linux上完成的,以GCC编译器为例,它的优化效果比商业的编译器如VC/BC差了大概20%,也就是说同一段C代码,用商业编译器能编译成100条指令的话,GCC最好的情况下只能编译成120条指令。
实际上,在没有任何包过滤规则或其它配置的情况下,完整的处理一个数据包需要大约14000条指令。
所以,根据上面的计算,目前许多X86架构防火墙(PIII 800)在100M网络环境下的结果是64byte的情况下达到42%的线速转发能力,即62000fps的处理能力。至于100%,95%,90%以上……

论坛徽章:
0
40 [报告]
发表于 2005-11-22 11:13 |只看该作者
1、我的报告是国家信息安全测评中心测试的,只是关系很多商家的利益,不敢乱贴,sorry!

理解!不过这也证明目前市面上的很多国产设备的现状以及国内这个领域的研发状况,不做评价

2、请贴出你的freebsd能到80M讲给出测试环境,以及测试的包的大小,我不太相信p3 1G的CPU,64bytes下能到80M,我现在有好几台freebsd的机器,p4的和至强的,两边用光阵列机来跑,512bytes下才能到100M,64bytes下离你说的数据差得太远,因为没有条件,没有办法拿Smartbit来做测试,不过我想误差应该不会太离谱。

ok,我承认,我用的是P3 1G Xeon MP,PCI-X架构的pro 100网卡,以太网口。
同时我做的是透明网桥,包在2层就bridge走了,因此效率确实是比较好的,同时ipfw这个也是简单高效的代表,因此我相信我这套搭配应改在效率方面有较大的优势。
我测试的方法是发起100Mbps的synflood,这个应该是64bytes吧,如果全速情况下,我的设备能透过84M左右到达对端,也就是能保证80M不丢包。
我认为你测试达不到的原因可能在于你的光阵列,据我所知,光电转换后frame结构会改变的,跟以太网贞又很大区别,而光传输的优势在于高带宽高时延,但pps就不是很好,如果你用这这种设备,2次转换后应该会有折损的,具体细节我不是很了解,这只是推测。另外一个原因是你的设备的网络其他部分占用了较多cpu,例如ip层转发。我的设备在最高流量下cpu占用80%左右,打开网卡polling后降至40%,负载不会超过1,属于可以承受范围

3、目前intel架构的CPU网络数据处理与交换机的CPU等处理有质的差别,不能同一而论……否则大家做什么ASIC,做什么NP,拿一块p3不就完了……

这里我同意,ASIC的架构确实更适合一些,我的意思是目前CPU的指令处理速度应该不止于如此不堪。

4、至于性能不到,如果跑开软件不谈,光是谈硬件的话,我个人从经验来看,100M环境瓶颈主要在CPU,1000M则是一个综合的因素,目前PC架构在很多方面都无法满足1000M的大流量的处理。而如果要谈软件呢,linux和unix性能之别主要还是“其实是MBuf和skbuf的优劣,这是个老话题。……”


CPU确实有很大影响,但是我感觉在做好一定优化的基础上,i386绝对能胜任的。MBuf的问题就不讨论了,讨论那就是班门弄斧了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP