zzt0605 发表于 2010-1-2 01:31:43

IBM网站上关于Linux 软路由性能测试及分析【强文,分析的比较透彻,申请加精】

本帖最后由 zzt0605 于 2010-1-2 01:40 编辑

原文 https://www.ibm.com/developerworks/cn/linux/l-cn-linuxrouter/
级别: 初级

姚 炯 (yaojiongcn@yahoo.com.cn), 网络工程师, 杭州师范大学理学院


2008 年 11 月 20 日

本文介绍了 Linux 软路由的工作原理,并使用普通 PC 计算机作为硬件设备,在实际网络环境中测试和讨论了 Linux 软路由的性能。实验证明,在百兆以太网络环境中, Linux 软路由的数据报转发速度取决于网络卡的实际速度,并随着软路由系统的应用层服务的增加而降低。该结果为 Linux 软路由的应用和普及提供依据。
0、引言

随着开源软件的发展,越来越多的人开始了解、使用和研究 Linux。目前 Linux 环境下的软路由设计和应用案例已有很多;但是对于实际网络环境中 Linux 软路由的负载性能一直缺乏相关的实测和讨论。本文从 Linux 软路由的框架和实验两部分进行讨论,并给出结论。


1、Netfilter 框架

Netfilter 框架上是整个 Linux 软路由运作的体系,是 Linux2.4 内核处理数据报的流水操作系统。它能够运做在 IPv4、IPv6 及 Decnet 等网络栈中。Netfilter 框架的概念的提出及主要实现者是 Rusty Russell。

Netfilter 框架如图所示:


Figure xxx. Requires a heading


(1)Netfilter 为每种网络协议定义一套钩子函数,其中为 IPv4 定义了以下5个钩子函数:

NF_IP_PRE_ROUTING.

NF_IP_LOCAL_IN

NF_IP_FORWARD

NF_IP_POST_ROUTING

NF_IP_LOCAL_OUT

(2)这些钩子函数在 Linux 内核的模块中注册,并与之挂接。当数据报流入框架的网络层时,内核模块在框架的钩子函数处接收数据报,并对它进行检查、转发、丢弃或指示 Netfilter 将该数据报通过传入用户空间队列。

(3)如果该数据报被传递给用户空间,将在应用层被异步处理。该层的用户进程(Local Process)在对数据报进行更加精细的检查,修改和装配之后,通过钩子函数把它重新递交给网络层。

Netfilter 框架的数据报分流结构使它极大地降低了数据报转发的延迟,提高了数据报控制的精度;在节省系统开销,提高数据报的处理效率上超越了工作在 Windows 平台的路由软件。


2、Iptables 指令系统

如果 Netfilter 框架是一个数据报流水线,那么我们就需要有能控制流水线作业的指令系统,这个指令系统在 Linux2.4 内核及以上版本中被称为 Iptables。Iptables 的指令由表和规则组成,它直接控制着钩函数和 Linux 内核模块完成数据报的过滤、转发和修改工作。

(1)数据报过滤(Packet Filter): Iptables 中 filter 表格负责检查数据报,并根据规则决定放行或丢弃资料报,它工作在 Netfilter 框架的 Local Process 中。

(2)网络地址转换(NAT:Network Address Translation):Iptables 中的 NAT 表格实现对需要转发的数据报的源地址和目的地址的转换。NAT 表格不同于 filter 表,它只将新连接的第一个数据报遍历表格,而随后的资料报将根据第一个数据报的结果进行同样的转换处理。这使得 NAT 表能在网络层上高速的转发数据报。

(3)数据报处理(Packet Mangling):Iptables 中的 mangle 表格可以实现对数据报的修改或给资料报附上一些额外数据。随着 Iptables 的升级,这个操作将越来越精确。



3、测试代码和计算机配置

Linux 软路由的硬设备采用普通 PC 计算机,计算机的其中一块网络卡(eth0)设置为内网网关,IP 地址为10.1.10.1;另一块网络卡(eth1)设置为外网 IP ,IP 地址为211.155.226.121

3.1、Iptables 代码

iptables –F
iptables -t nat –F
iptables -t mangle –F



##清空原有 Iptables 规则。

echo "1" > /proc/sys/net/ipv4/ip_forward



##打开 Linux 内核数据报转发功能

iptables -t nat -A POSTROUTING -s 10.1.10.0/24 -j SNAT --to 211.155.226.121



##把原地址为局域网内的数据报通过 Linux 软路由转发出去

#log-level:debug,info,notice,warn/warning,err/error,crit,alert,emerg/panic
iptables -A FORWARD -p tcp -m limit --limit 6/minute --limit-burst 1 -j LOG\
--log-level debug --log-prefix "NAT:"



##开启日志记录功能

iptables -t nat -A PREROUTING -d 211.155.226.121 -p tcp --dport 80 \
-j DNAT --to 10.1.10.2:80



##映像 HTTP 协议80端口

modprobe ip_nat_ftp
iptables -t nat -A PREROUTING -d 211.155.226.121 -p tcp --dport 21 \
-j DNAT --to 10.1.10.3:21



##映射 FTP 端口

3.2、计算机配置


表1.硬件配置
设备型号实际带宽约
100M 网络卡×2DLink DFE-530TX10.7 MBps
32位33MHz PCI总线MSI865PE60.0 MBps
7200rpm 硬盘SAMSUNG SP0812C39.3 MBps
400MHz 内存威刚512M DDR400405.8 MHz
800MHz System BusPentium4 2.4c811.5 MHz

带宽估算

网络卡和硬盘实际带宽利用 IIS 服务的网络和本地回路分别传输文件得出。

CPU、内存频率采用 CPU-Z软件测试得出平均值。

普通 PC 计算机的 PCI 总线带宽约为 60MBps。


由表1可知,网络卡的实际数据传输速度为 10.7MBps,若使用两块 PCI 网络卡则带宽需 2×10.7MBps =21.4MBps,小于 32 位 33MHz PCI 总线带宽 60MBps;而计算机 CPU 、内存传输速度远远大于 PCI 总线和网络卡数据传输速度,因此理论上软路由数据报转发速度取决于网络卡速度。




4、测试结果

软路由稳定运行10天后系统性能:
内核空间 CPU 占用率(sy)为 0.3%,空闲 CPU(id)为 99.7%
系统占用物理内存稳定在 198M(系统启动时占用物理内存 74M)
5Min 内 TCP 连接数最大值为 4120
网络卡eth0平均数据流量 2.77MBps,网络卡 eth1 平均数据流量 2.45MBps,网络负载较轻
通过网关传输文件实测平均速度约为 7.64MBps,最高速度 10.8MBps,较好的符合了表 1 中的实际带宽。这个数值约为网络卡理论速度的 86.4%(网络卡理论速度为12.5 MBps)
开启并使用 VPN 和 DHCP 服务 10 天后,测试系统性能:
内核空间 CPU 占用率(sy)为 0.7%
系统占用物理内存稳定在 297M
5Min 内 TCP 连接数最大值为 4108
网络卡 eth0 平均数据流量 2.81MBps,网络卡 eth1 平均数据流量 2.52MBps,网络负载较轻
通过网关传输文件实测平均速度约为 7.57MBps;最高速度即 10.21MBps。这个数值约为网络卡理论速度的 81.68%
加载 Linux 软路由防火墙策略,测试系统性能:
内核空间 CPU 占用率 0.9%
系统占用物理内存提升为在 301M
通过网关传输文件实测平均速度约为 7.31MBps,最高速度 9.64MBps。这个数值约为网络卡理论速度的 77.1%


5、带宽和并发连接数讨论

5.1、带宽的分配和计算

由测试结果可知,Linux 软路由 CPU 占用率极低,内存稳定。而网络传输平均速度 7.64MBps+2.77MBps=10.41MBps,最高速度 10.8MBps,较好符合表1中的网络卡的实际速度 10.7MBps。因此,百兆的网络中软路由数据报转发速度取决于网络卡速度。在网络繁忙时期,软路由的网络卡负载会很重,损耗几率也大大增加。实际使用中,某些网络卡在高负载下往往容易坏。

如果软路由为纯 NAT 应用,由于 NAT 表工作在网络层,理论上应比应用层服务 IIS 测出的网络卡实际速度要高,估计可以接近或达到网络卡理论速度的 90%,即 11.25MBps 带宽。但如果在软路由中配置高级应用服务,如 VPN,DHCP,HTTP 等和复杂防火墙策略;那么就会占用掉有限的网络卡资源,降低软路由数据报转发速度。根据高级应用服务的数量、开销等实际情况差异,Linux 软路由实际数据报转发速度大约为网络卡理论速度的 70%-90%。

假如纯 NAT 总带宽约为 11.25MBps,某时刻有200台机器共享网络,那么平均每台机器可分到带宽 57.6Kbytes/sec,实际带宽由软路由根据每台 PC 计算机的 TCP 连接数量动态分配。57.6Kbytes/sec 是一个比较理想的数值,因为这样的速度可以保留充足的带宽以预防 P2P 软件的增多和蠕虫病毒突发所带来的冲击。

5.2、局域网并发连接数计算

在 Linux 中运行“cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max”命令可得到 ip_conntrack_max 值,该参数标志着 Linux 软路由可承受的TCP最大并发连接数,它随着计算机物理内存增加而增加,256M 内存时为 16384个;512M 为 32696;1G 为 65392…

在局域网任意 PC 计算机上运行“netstat –s”可得到该计算机的当前 TCP 连接数。当一台 PC 计算机仅为浏览网页,聊天和单线程下载檔等应用,实际 TCP 连接数量不会大于 20 个。当它运行 P2P 软件时,根据实际使用情况,TCP 连接数约为200~400个。以200台 PC 计算机共享网络为例,正常情况下有15%的 PC 计算机正在使用 P2P 软件,则并发 TCP 连接可能会达到 400×30+170×20=12190个。该数量随 P2P 软件使用数量和对外 WEB、FTP 网站流量情况而有所变化。

6、结论

软路由的 CPU、内存处理速度已经远远超过网络卡和 PCI 总线速度;在百兆以太网中软路由数据报转发速度仅决定于网络卡的线速度。笔者曾用赛扬450MHZ 的 CPU,256M 的旧机器架构,软路由在数据包转发性能上完全没有损失。因此 Linux 软路由完全可以采用更低主频率的内存和 CPU 的旧机器来架构。

软路由数据报转发速度与机器应用情况相关,在软路由上运行较多的高级应用服务会占据有限的网络卡资源,降低数据报转发速度。若采用文中的测试代码和计算机配置,Linux 软路由能带200~300台 PC 计算机,该数量因实际网络情况稍有不同。




参考资料

http://www.netfilter.org 介绍了 Netfilter 框架的发展历史和运作原理。


http://iptables-tutorial.frozentux.net 提供了 Iptables 的详细教程。


在 developerWorks Linux 专区 中可以找到为 Linux 开发人员准备的更多参考资料(包括为 Linux 新手准备的 new to Linux),还可以查阅 最受欢迎的文章和教程。


在 developerWorks 上查阅所有 Linux 技巧 和 Linux 教程。



关于作者



姚炯,网络工程师,工作于浙大网新软件产业集团,目前在杭州师范大学理学院攻读硕士学位。

盛郏滕 发表于 2010-5-5 21:10:29

顶顶更健康!!
http://luoliao.tian-s.info/
http://liaotianshi.tian-s.info/
http://jiqingliaotianshi.tian-s.info/
http://luoliaowang.tian-s.info/
http://siwa.tian-s.info/
http://meinvluoliao.tian-s.info/
http://jiqingshipinwangzhan.tian-s.info/
http://luotiwangzhan.tian-s.info/
http://luoliaowangzhan.tian-s.info/
http://shipinluoliao.tian-s.info/
http://chat.tian-s.info/

needback 发表于 2010-5-11 20:25:49

强文要顶~~ 同楼上,顶顶更健康!

wugalang88 发表于 2010-5-22 19:31:09

顶一下
页: [1]
查看完整版本: IBM网站上关于Linux 软路由性能测试及分析【强文,分析的比较透彻,申请加精】