蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 |
 您目前的位置:首页 > 自由软件 > 技术交流 > 系统管理


    

蓝森林 http://www.lslnet.com 2006年4月6日 20:18


尝试IA架构下的网络处理极限

花了三周时间改进了 BSD 的内核 ,用 SMB 测了一下,双向流,76/64字节包各 50%,转发速率 119万 pps,转发率 >40%
操作系统:FreeBSD 5.4
硬件平台:2 * Xeon 3.2G,2 * 82545EM,PCI-X 133
系统CPU:50%
由于启用了 HT,因此 CPU 最高消耗是 50%,这是一个临时性版本,估计还能再提高,对 IA 架构系统而言,119万次流入和流出,负载估计已经接近极限。请教过一些做硬件的朋友,PCI-X 的输入/输出应该是共享式总线,也就是说同一时刻只能进行读或者写中的一种操作,是单工模式,而 PCI-E 据说是双工的,相对而言可能好一些。
不过这个结果的实际意义不大,因为增加任何一点处理,系统性能可能会大幅下降。

还有另一个优化版本,CPU 消耗 26%,转发率是 95万 pps,在其他板子上好像见过 99万 pps 的测试结果,测过单 CPU 的,好像也能到 90w 以上,这个版本可能比较靠谱。

以上结果都是运行在 ULE 模式下。
关于 ULE 还有个问题请教,不启用 PREEMPTION,无论系统有几个线程在跑,CPU 使用率只能在 50% 左右,难道是 ULE 模式的固有缺陷?

包如何流入/流出?
假设你的网络流速率是1G Bps = 1000M Bps,很不错了吧。
处理器的处理速率是3.2。
同时假设处理器处理网络流时没有停顿,也就是说不用等待网络,硬件等的I/O操作,数据全速进入处理器,
并且不计算转发开销,也就是数据单纯的“流过”处理器。
那么也只用了1Gps的能力,还有2.2Gps就空闲了。
算算利用率?1/3.2=31%,同时注意到你有两块处理器,那么理论上最优利用率在31%/2 = 15%左右。算上比如网络延迟,网络卡I/O,包转发等7788的开销, 不是和你的优化版本“还有另一个优化版本,CPU 消耗 26%”比较接近吗?


[quote]原帖由 [i]gvim[/i] 于 2006-3-11 10:43 发表
包如何流入/流出?
假设你的网络流速率是1G Bps = 1000M Bps,很不错了吧。
处理器的处理速率是3.2。
同时假设处理器处理网络流时没有停顿,也就是说不用等待网络,硬件等的I/O操作,数据全速进入处理器,
并 ... [/quote]

你可能还是没理解我的意思,网络处理不是一个 bit 就会占用 1 个 CPU 指令周期,就跟在内存复制数据一样,复制 1Mbytes 数据不会占用 1M 个指令周期。在网络处理性能上,做到双向 1Gbps 转发不难,注意:双向 1Gbps 意味着 2G 进加 2G 出,对系统而言也就是 4Gbps。吞吐的瓶颈在 PCI-133 总线,133Mhzx64bit = 8Gbps,对于 4G bps 的吞吐肯定够用。另外一个瓶颈就是报文尺寸,都是 2Gbps,512 字节需要36万次处理,64 字节则需要 288 万次处理,而每次处理过程都需要申请 mbuf、DMA 操作、IO 操作、数据处理等一系列指令,如果 3.2G CPU 每秒处理 288 万次请求,那每个请求占用的指令周期也就只能控制在 1000 左右,而 DMA 操作占用的指令周期估计已经超过这个限制了,所以在 IA 架构下实现 288 万次处理估计不太可能。做到 119 万次已经非常不容易了,同类网卡,Linux 下据说能到 40万 ,优化后好像接近 75 万,用 82571 Server PCI-E dual server adapter 可以达到 148万,没见过 PCIE 的网卡,期待中。
不过 148万的转发意义不大,系统根本处理不过来,除非将来双核普及。不过双核会引发另一个问题,系统总线成为瓶颈。

我说的是Bps中的是Byte不是bit(因为处理器可以处理的最低单位是Byte,这样做免去了一些单位上的换算,同时可以满足实际限定 4Gbps<8Gbps)
B=8*b
而且,我只是说计算理论最优利用率。我也说明了,Byte在处理器中只是简单的"流过" ,不计你需要的xxx次请求处理时间。这是你的实际26%和理论15%的差距的缘由。
另外,千兆网卡需要连接到北桥上,PCI-133是不行地(这个不要问我为什么,Douglas Comer说地:m01:)。


[quote]原帖由 [i]gvim[/i] 于 2006-3-11 12:07 发表
我说的是Bps中的是Byte不是bit(因为处理器可以处理的最低单位是Byte,这样做免去了一些单位上的换算,同时可以满足实际限定 4Gbps<8Gbps)
B=8*b
而且,我只是说计算理论最优利用率。我也说明了,Byte在处理 ... [/quote]

我感觉DMA/内存的数据复制应该不直接通过处理器,通过总线直接完成就可以了,CPU 也许需要等待操作结束。另外,吞吐量不是瓶颈,512字节下,我们可以轻松做到双向 1G 线速转发(也就是 4G 吞吐)。
南北桥你说的对,PCI-X 好像是通过南桥完成的,北桥主要用来处理 AGP 这些更高负载的设备。

IA架构是安腾的服务器??

[quote]原帖由 [i]jk0wg[/i] 于 2006-3-11 19:32 发表
IA架构是安腾的服务器?? [/quote]

Intel Arch ,就是 Intel 的 PC/服务器,不是指安腾

[quote]原帖由 [i]liangyi571[/i] 于 2006-3-11 13:48 发表


我感觉DMA/内存的数据复制应该不直接通过处理器,通过总线直接完成就可以了,CPU 也许需要等待操作结束。另外,吞吐量不是瓶颈,512字节下,我们可以轻松做到双向 1G 线速转发(也就是 4G 吞吐)。
南北桥你 ... [/quote]

是的,哪一家的服务器没有智能I/O?数据的流动当然不需要经过处理器。
我说数据流,只是一个简单信号变换的类似,1GB进来,变换,xG出去。当我不清楚你的具体处理乳“申请 mbuf、DMA 操作、IO 操作、数据处理等一系列指令”时,中间的过程对我们不知情的人来说不过是个输入参数的函数 :)
我觉得26%的利用率是比较优化的,对于50%的利用率。相对于优化过的处理,处理器花费在系统自身的时间就占了大多数,有效利用率为26%/50%,仅有占到了50%。
因此最硬件给定的情况下,
对于系统,非要用ULE的话,可以考虑增加处理器亲和度,或者适当锁定线程在某处理器上等等操作减少系统开销。
对于算法,寻找并行算法替代串行算法。部分的数值算法可以寻找替代的高效算法。

当然,只是我瞎掰的,还需要根据你的实际情况调整。:mrgreen::mrgreen:


回复 3楼 liangyi571 的帖子

请问一下,你说的linux下的75wpps转发率,是不是linux下的极限呢?freebsd下的可以到119wpps以上,是不是说freebsd的相关性能好得多?

[quote]原帖由 [i]gvim[/i] 于 2006-3-12 00:57 发表


是的,哪一家的服务器没有智能I/O?数据的流动当然不需要经过处理器。
我说数据流,只是一个简单信号变换的类似,1GB进来,变换,xG出去。当我不清楚你的具体处理乳“申请 mbuf、DMA 操作、IO 操作、数据处理 ... [/quote]
呵呵,你的建议狠不错,我也在想如何能提高处理器的亲和度,改进并行算法。不过感觉 ULE 还不是狠稳定,不知是不是观望一下好。另外,提高处理器的亲和度也不容易,因为CPU间还是有锁需要同步,因此不可能完全独立。计划尝试中。
欢迎所有技术讨论,谢谢大家的关注。 :D

[quote]原帖由 [i]louiezhu[/i] 于 2006-3-12 20:16 发表
请问一下,你说的linux下的75wpps转发率,是不是linux下的极限呢?freebsd下的可以到119wpps以上,是不是说freebsd的相关性能好得多? [/quote]

不完全是,理论上讲极限是由硬件决定的,所有操作系统都可以优化,只不过我的工作是在 freebsd 下进行的罢了。

[quote]原帖由 [i]liangyi571[/i] 于 2006-3-13 00:14 发表

呵呵,你的建议狠不错,我也在想如何能提高处理器的亲和度,改进并行算法。不过感觉 ULE 还不是狠稳定,不知是不是观望一下好。另外,提高处理器的亲和度也不容易,因为CPU间还是有锁需要同步,因此不可能完全独 ... [/quote]

很想和你讨论,但对BSD不是很熟悉,虽然在网络入门的时候看的是BSD的mbuf实现tcp/ip协议栈源码,但随后就转到Linux下用skbuff实现的tcp/ip协议栈上去了。不知道是不是也存在Linux下的NAPI, softirq,spinlock这类的名词.我是看了你给我的链接跑到这里来的.二是,我自己的平台只是个百兆环境,刚刚又测试了一下,82559网卡在赛扬1.2G时可以达到双向31.58%,也就是93kpps,我也还在尝试优化,如果接近120kpps时,我再移到千兆平台下.IA构架的百兆,千兆都是最高配置时,性能相差大概是8倍.
我在百兆时有个问题一直没有解决掉,在单向测和双向测时,吐吞量虽然都是62M,但对CPU的占用率很不一样。单向时CPU只占到70%左右,双向时CPU就到100%。所以我想可能的原因:单向时的瓶颈在网卡硬件,双向时的瓶颈在CPU处理,不知你是不是也遇到过这样的问题?


[quote]原帖由 [i]liangyi571[/i] 于 2006-3-11 01:41 发表
花了三周时间改进了 BSD 的内核 ,用 SMB 测了一下,双向流,76/64字节包各 50%,转发速率 119万 pps,转发率 >40%
操作系统:FreeBSD 5.4
硬件平台:2 * Xeon 3.2G,2 * 82545EM,PCI-X 133
系统CPU:50%
... [/quote]

为什么要64字节与76字节混测,而不单测64字节呢?
我的82559,赛扬1.2G,百兆平台,64字节双向时是31.58%,128字节是51.39%.256字节是89.90%
另外,你的这个系统是桥还是路由,或者是网卡短接时的性能?


[quote]原帖由 [i]liangyi571[/i] 于 2006-3-11 01:41 发表
花了三周时间改进了 BSD 的内核 ,用 SMB 测了一下,双向流,76/64字节包各 50%,转发速率 119万 pps,转发率 >40%
操作系统:FreeBSD 5.4
硬件平台:2 * Xeon 3.2G,2 * 82545EM,PCI-X 133
系统CPU:50%
... [/quote]

呼呼,修改贴子,不能起来顶的作用,看到还要发新贴才可以。
LZ说加入一点操作就会使性能大幅下降,大概下降多少?

[quote]原帖由 [i]skipjack[/i] 于 2006-3-13 00:40 发表


很想和你讨论,但对BSD不是很熟悉,虽然在网络入门的时候看的是BSD的mbuf实现tcp/ip协议栈源码,但随后就转到Linux下用skbuff实现的tcp/ip协议栈上去了。不知道是不是也存在Linux下的NAPI, softirq,spinlock这类 ... [/quote]

BSD 下,单向和双向差别不是很大(也许用原始驱动有差别)。我改了驱动的一些操作流程,可能减少了这方面的冲突吧。spinlock、softirq 这些东西肯定都有,Polling 机制也有,不过我观察对于 8254x 这组芯片,Polling 是否启用差别不大,无论在CPU上还是在吞吐上,看不出很大差别。

[quote]原帖由 [i]skipjack[/i] 于 2006-3-13 00:46 发表


为什么要64字节与76字节混测,而不单测64字节呢?
我的82559,赛扬1.2G,百兆平台,64字节双向时是31.58%,128字节是51.39%.256字节是89.90%
另外,你的这个系统是桥还是路由,或者是网卡短接时的性能? [/quote]

我测的是桥方式,改进后的效果类似短接。

[quote]原帖由 [i]skipjack[/i] 于 2006-3-13 10:48 发表


呼呼,修改贴子,不能起来顶的作用,看到还要发新贴才可以。
LZ说加入一点操作就会使性能大幅下降,大概下降多少? [/quote]

比如在CPU占用率为26%,转发率为 950kpps时,用一个独立线程去处理网络数据,性能会有急剧下降,好像只有 700kpps,虽然处理过程狠简单。一种可能是由于锁冲突等引起的任务切换比较致命,另一种可能就是CPU的cache,原因待查。

[quote]原帖由 [i]liangyi571[/i] 于 2006-3-13 12:57 发表


BSD 下,单向和双向差别不是很大(也许用原始驱动有差别)。我改了驱动的一些操作流程,可能减少了这方面的冲突吧。spinlock、softirq 这些东西肯定都有,Polling 机制也有,不过我观察对于 8254x 这组芯片, ... [/quote]
这个我也发现了,启不启用polling是没有差别的,改的思路差不多,都是短接的桥。

[quote]原帖由 [i]skipjack[/i] 于 2006-3-13 13:17 发表

这个我也发现了,启不启用polling是没有差别的,改的思路差不多,都是短接的桥。 [/quote]

呵呵,两点之间直线最近

你对 承受的标准是什么   不丢包 不延迟  还是说只要还有数据过 就算是可以承受



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com