不可抵挡的开源软件潮流(二)
时间:2005-04-29 来源:寂寞烈火
稳定性
在Internet上,有很多有关OSS/FS稳定性的争论,不过,我们完全可以通过数字来说明问题。
1.1995年的调查显示,OSS/FS应用程序更加稳定。1995年,Fuzz Revisited的论文(http://www.cs.wisc.edu/~bart/fuzz/fuzz.html)就是通过对给应用程序输入随机的字符来查看其抵抗崩溃和死机的能力。虽然有的研究人员对这种方法不以为然,认为这种方法不能够发现细微的错误,但进行研究的作者指出,这种方法还是可以查出很多在编写程序过程中的错误,并且也是发现软件缺陷的一个好办法。这种方法的测试中,发现OSS/FS有更好的可靠性。在该论文的第2.3.1节中说:“商业系统和Linux间的比较也很有意思。对1995年的7个商业系统的测试中,其平均出错率是23%,而Linux的出错率只有9%,同时GNU的工具程序的出错率只有6%。”虽然这次测试是在1995年做的,但在这些年中,专有软件并没有什幺大的举动。而开发OSS/FS的队伍日益壮大,并且对OSS/FS的测试也更加严格。
2.ZDnet在为期10个月的实验后得出结论:Linux要比Windows NT可靠。在这次实验中,ZDnet比较了Caldera System OpenLinux、Red Hat Linux和微软的Windows NT Server 4.0(SP3)。三个系统使用的都是相同的硬件(单CPU)。测试中,标准的Internet、文件和打印服务等网络请求并行地发给每一个服务器。结果是:NT平均每6个星期崩溃一次,每一次崩溃需要30分钟来修复,也许这听起来还算可以。不过,Linux服务器却从来没有出现过崩溃的情况。
3.据Bloor Research的实验(http://gnet.dhs.org/stories/bloor.php3),Linux要比Windows NT可靠。这个实验让两种操作系统都运行在配置相对都比较低的老奔腾机上。在为期一年的测试中,Linux只因为硬件的故障而崩溃过一次(磁盘问题),花费了4个小时来修改这个问题,其给出的有效可用时间为99.95%。Windows NT崩溃了68次,原因分别是磁盘问题(1次)、内存问题(26次)、文件管理问题(8次)和各种奇怪的问题(33次)。所有这些问题花费了65个小时的时间进行修复,其给出的有效可用时间为99.26%。为什么Linux出现的问题和Windows NT出现的很多问题都与硬件有关呢?可能是运行Windows机器的硬件比较差,也可能是Linux作了很多卓有成效的工作,避免了由于硬件问题导致的错误。而文件管理的错误则是Windows自己的原因,一些奇怪的问题也应该是Windows本身的问题。这次实验的结果很明显:Linux要比Windows可靠得多。
4.Reasoning咨询公司的研究发现,Linux内核中的TCP/IP Internet协议栈缺陷要比其它的专有操作系统的相应协议栈少,并且是最好的嵌入式操作系统。在报告中(http://www.businesswire.com/cgi-bin/f_headline.cgi?bw.021103/230420300),Reasoning比较了6种操作系统的TCP/IP。除Linux内核之外,其它有三个是用于商业用户的操作系统,另外两个用于商业电信设备中。Linux内核一般都被用作为通用目的的操作系统。按理来说,嵌入式操作系统应该具有更好的可靠性,因为在嵌入式市场中,稳定性本来就非常关键。这次研究过程没有受到任何Linux厂商或者Linux竞争对手的委托和影响,因此不可能有任何偏袒。
Reasoning公司使用自动工具来查找代码中的5种缺陷:内存漏洞、释放空指针、失败的存贮单元分配、数组溢出和没用的参数。研究发现,每81852行Linux内核代码行(SLOC)中,有8个缺陷。其所占比率相当于每一千行内核代码(KSLOC)中有0.1个缺陷。相比较而言,另外3个专有操作系统(其中两个是Unix)的缺陷率是0.6-0.7/KSLOC,也就是Linux内核的缺陷率要少于所有参评的通用操作系统。参评的2个嵌入式操作系统的缺陷率是0.1-0.3/KSLOC,因此,Linux内核的缺陷率实际上要好于其它的嵌入式操作系统。
Reasoning公司对此结果的解释是:首先,任何人都可以看开放源代码软件的源代码。对大型开放源代码应用软件,如Linux内核、Apache网络服务器等,无数的人可阅读其源代码,他们可以学习这些代码是如何工作的,也可以做出修改,或者发现错误。因为整个开发过程是开放式的,这些独立的评估人员可以报告他们发现的错误甚至提出合适的修改意见。
当然,这并不是说所有的OSS/FS都有非常高的质量,但它的确证明了OSS/FS完全可以有非常不错的质量。
5.瑞士的Syscontrol AG公司的分析报告指出,平均来看,使用IIS Web服务器软件的站点,其处于非联机状态的时间要比使用Apache软件的站点多出2倍。这个实验进行了3个月的时间,并且测试了瑞士国内100个知名的Web站点,每隔5分钟从4个不同的地方进行检测(这可是一项不小的工程)。表8是各个服务器的停机时间(以小时为单位)。
表8 各种服务器的停机时间(单位:小时)
从3个月的测试结果我们可以看出,Apache拥有最好的表现。事实上,就算是Apache表现最差的那个月,也要比IIS表现最好的那个月还是好。虽然Netscape和Apache之间的比较是无关紧要的,不过,从二者的比较我们可以看出,可以自由获得的OSS/FS(Apache)在可靠性上完全可以和最可靠的专有商业解决方案相媲美。
6.Netcraft也进行了另外一个与上述报告独立的有关正常运行时间的研究,结果表明OSS/FS的表现非常好。Netscraft持续跟踪了50个正常运行时间最长,并且经常被访问的站点。报告(http://www.dwheeler.com/frozen/top.avg.2001aug3.html)发现有92%(46/50)的站点使用的是Apache,一个站点的Web服务器为未知,其它3个不是Apache。而在这三个中,只有1个显示使用的是IIS,而这个服务器还值得怀疑,因为报告显示该服务器的操作系统是BSD。关于这个矛盾的解释是,可能位于前端的BSD系统“遮掩”了IIS Web站点,也可能是Web服务器通过使用错误的类型来迷惑攻击者。在这次调查中,有50%(25/50)使用的操作系统是OSS/FS操作系统,并且只有类Unix的操作系统有最好的正常运行时间。在调查中,所有具有最好运行时间的系统都不是Windows系统。
当然这个方法也有一些缺点,对此Netcraft进行了讨论(http://uptime.netcraft.com/up/accuracy.html)。但至少有一点是可以肯定的,在具有较长正常运行时间的系统中,Unix和Linux在数量上比Windows占有绝对的优势,所以可以充分证明这两个系统的可靠性要比Windows好。
有关Unix与Windows就可靠性的问题,还有很多事实案例,在此就不一一例举。
不管是什幺测试方法,在实际环境中以可靠的方式收集大量的数据是非常重要的。因此,我们看到的很多数据都是比较老的Windows版本和比较老的Linux版本之间的比较。问题的关键是这些比较是公平的,因为它们是同时代的产品。无可辩驳的事实证明,OSS/FS的确具有非常好的可靠性,至少在一些应用环境中是这样的。
性能
一直以来,在同样的硬件上对Linux和微软的Windows进行性能上的比较时,基于不同的假设时,总会得出不同的结果。但不管什么时候,OSS/FS都表现出了极强的竞争力,而在很多环境中,它都是胜者。
性能指标对于假定和环境非常敏感,所以最好的指标是你自己创立的可以满足自己需求的模式。如果不是这样,你也应该采用没有偏见的方法,因为采取有偏见的方法,很容易得到一个不公正的结果。
1.2002年,TPC-C进行的数据库测试发现,基于Linux的系统其运行速度要比基于Windows 2000的系统快。测试使用的硬件系统是HP ProLiant DL580(32位Intel Xeon 900MHz CPU),运行的是Oracel 9i R2 Enterprise,使用的操作系统是Red Hat Linux Advanced Server和微软的Windows 2000 Advanced Server。我们可以从网上查看Linux(http://www.tpc.org/tpcc/results/tpcc_result_detail.asp?id=102091601)和Windows(http://www.tpc.org/tpcc/results/tpcc_result_detail.asp?id=102060501)的测试结果。需要注意的是,在这些测试中,HP并没有对Linux内核做任何优化。
2.PC Magazine在2001年9月做的有关文件服务器性能方面的测试也发现Linux和Samba结合的模式,其性能要远远胜过Windows 2000。测试的结果是Linux的吞吐能力是130MB/秒,而Windows只有78MB/秒(Linux比它快了78%)。
3.2002年4月,PC Magazine又对文件服务器的性能进行测试。这一次,Linux与Samba的结合再次击败了Windows 2000,并且超过了Windows 2000 100%,其可以处理的终端数则超过了4倍。BF集团的IT管理人Jay White认为对于混杂有Windows和Linux服务器的环境中,Samba是最有用的服务器软件之一。他说:“我们的Samba服务器已经持续正常运行了394天。”
4.在Sys Admin杂志的测试中,Linux更是打败了Solaris、Windows 200和FreeBSD(所有测试都是在Intel平台上进行)。在2001年7月的Sys Admin杂志上,名为《谁是最快的运行高性能网络应用程序的操作系统》(http://www.sysadminmag.com/articles/2001/0107/0107a/0107a.htm)的文章指出了上述的测试结果。测试过程中,并没有对任何系统进行优化,只是增加了并发的TCP/IP连接数。这对于测试多线程和异步应用程序是必须的。他们在完全相同的机器上使用了各个操作系统的最新版本。
对于上述结果,FreeBSD的开发人员认为在缺省情况下FreeBSD强调的是稳定性(而不是速度),所以它们认为要获得最佳的性能,需要对其进行一些优化。为此Sys Admin又就优化后的FreeBSD进行了测试(http://www.sysadminmag.com/articles/2001/0108/0108q/0108q.htm)。他们进行的优化是切换到了“异步”挂载模式,这显然可以加快速度(但它同时也增加了在电源出现故障时丢失数据的风险)。这是Linux中缺省情况下使用的模式,并且在FreeBSD中也很容易更改,所以这应该说是非常小也非常合理的更改。不过,FreeBSD的开发人员还做了其它很多的更改,比如,它们增加了17个FreeBSD内核补丁,并且使用了很多经过优化的命令。而其它的操作系统并没有进行这样的优化,所以将优化后的系统和没有优化后的系统进行比较是不公平的。
Sys Admin共进行了两个方面的性能测试:
电子邮件传送服务器发送大量电子邮件时的速度:在100个并发传送时,几个操作系统并没有区别,但是随着数量的增加,各系统在传送速度上开始显示出明显的不同。在500个并发传送时,Linux已经明显超过了除被优化过的FreeBSD之外的所有系统。在1000和1000以下并发连接传送时,经过优化的FreeBSD和Linux的性能非常接近,但当并发连接数在1000-1500个时,优化后的FreeBSD的性能就开始持续下降,而Linux则没有这个问在题。当并发连接数超过3000时,优化后的FreeBSD系统就出现了故障。在并发连接数为1500个时,Linux的传送速度是130万封邮件/小时,Solaris约为100万封,Windows 2000和没有经过优化的FreeBSD则只有90万封。
“磁盘I/O”的测试:就是在同一目录中创建、写入和读取1万个同样大小的文件。在这项测试中,当文件比较小时,Solaris是最慢的,没有经过优化的FreeBSD第二慢,Windows 2000和Linux的速度差不多。在有些时候,优化后的FreeBSD的速度是最快的,比如当文件大小为8k或者16k时。当文件大小增加至64k到128k之间时,各操作系统开始表现时比较大的差异。其从快到慢的顺序依次为Linux、Windows 2000、FreeBSD、Solaris。在文件大小为128k时,FreeBSD比Windows 2000慢16%,比Linux慢39%。将这些不同大小的文件的测试时间进行相加后,Linux为542秒,Windows 2000为613秒,优化后的FreeBSD为630秒,没有优化的FreeBSD为2398秒,Solaris为3990秒。
5.使用TUX的Linux的SPEC值要好于IIS。SPEC(Standard Performance Evaluation Corporation)是一个专门开发公正的测试基准的公司(http://www.spec.org/),该公司开发并且维护着一系列完整的测试基准。我们可以比较Windows和Linux的SPECweb99的结果(测试的是Web服务器的性能)。测试用的机器都来自Dell,Linux使用的是TUX Web服务器,Windows使用的是IIS。它们使用的是同样的硬件。表9是2001年7月13的测试结果(数值越大表示性能越好)。
表9 Web服务器性能测试结果
6.IBM的测试发现Linux在管道(一种I/O机制)应用上性能要优于Windows。管道是一种通用的在各个程序间进行通信的低级机制。IBM的这次测试发现,在Red Hat 7.1(内核为2.4.2)中,管道的I/O峰值约为700MB/秒,对一些非常大的块进行操作时稳定在100MB/秒。与之相比,Windows 2000的峰值为500MB/秒,对非常大的块进行操作时稳定在80MB/秒,而Windows XP专业版的结果最让人失望,其I/O峰值仅为120MB/秒,稳定状态也只为80MB/秒,所有测试使用的是相同的硬件平台,并且都运行在GUI模式中。
而在2002年2月另外一个测试中,对操作系统管理进程和线程的能力进行了测试。使用的系统是Red Hat Linux 7.2、Windows 2000 Advanced Server(Win2K)和Windows XP专业版(WinXP),所有的测试都在一台Thinkpad 600X(内存为320MB)上进行。Linux每秒可管理1万个线程,Windows 2000则只有5000个,Windows XP为6000个。在进程创建方面,Linux每秒可创建330个进行,Windows 2000则可创建200个进程,而Windows XP可创建的进程数还不到160个。
7.eWeek对OSS/FS数据库MySQL的测试发现它可以和专有数据库产品Oracle相媲美。eWeek Labs/PC Labs对一些数据库进行了比较,并于2002年2月25日发布了测试结果(http://www.eweek.com/article2/0,3959,293,00.asp)。对数据库产品进行评测并不是一件容易的事情,因为数据库厂商一般都会在其许可条款中写入“no-benchmarking”的内容,以此来阻止公众对其进行评测比较。事实上,自从1993年10月PC Magazine在相同的硬件上对数据库产品进行了测试以外,eWeek是第二个做这件事情的人,而这其中整整间隔了9年。不过,他们还是冒着风险公布了他们对5个数据库服务器产品的评测结果,这5个产品是:IBM的DB2 7.2(FixPack5)、微软的SQL Server 2000企业版(SP2)、MySQL AB的MySQL 4.0.1 Max、Oracle的Oracle 9i Enterprise Edition 9.0.1.1.1和Sybase公司的ASE(Adaptive Server Enterprise)12.5.0.1。他们的目标是在使用基于Java的应用服务器时,看一看哪一个数据库服务器拥有最好的性能。测试结果发现,Oracle 9i和MySQL具有最好的性能和可扩展性,在大部分情况下,Oracle 9i稍稍领先于MySQL,但Oracle更加昂贵。
测试中,MySQL还表现出了一些非常重要的创新。它的性能表现,主要得力于其“查询缓冲”的功能,而其它的数据库都不包含该功能。此外,在5个被测试的数据库中,只有Oracle 9i和MySQL在运行他们为测试写的应用程序时,8个小时中没有产生出现任何问题,而其它的数据库服务器都出现了很多问题。
在这次测试中,OSS/FS程序在性能上和可靠性上打败了大部分的专有软件对手。虽然Oracle的表现要比它好,但Oracle却非常昂贵。很显然,在选择数据库服务器时,MySQL是一个非常值得考虑的选择。
虽然MySQL AB也有一个与其它产品的评测比较,但由于其并不是一个独立的实验室,所以在此我们对其不予引用(http://www.mysql.com/information/benchmarks.html)。
8.2003年2月,科学家使用Linux打破了Internet传输速率的记录。科学家从加利福尼亚的Sunnyvale以923MB/秒的速率传送了6.7GB没有经过压缩的数据至荷兰的阿姆斯特丹,只花了58秒的时间。这个数据量相当于4个小时DVD品质的电影,其传输速度比典型的家用宽带网快了3500倍。该小组使用的是运行有Debian Linux(阿姆斯特丹)和Red Hat Linux(Sunnyvale)的PC。
上面我们通过数字来说明了OSS/FS在市场份额、稳定性和性能方面的出色表现,下一期我们将重点来看一看OSS/FS在可扩展性、安全性、TCO(总体拥有成本)、用户对OSS/FS不必要的担忧以及OSS/FS在桌面应用等方面的问题。
作者简介
David A. Wheeler是一个计算机安全专家,长期从事与大型的高风险软件系统有关的工作。其主要的代表著作有《Software Inspection:An Indeustry Best Practice》、《Secure Programming for Linux and Unix HOWTO》、《The Lovelace Tutorial》;文章有《More than a Gigabuck: Estimating GNU/Linux’s Size》、《The Most Important Software Innovations》等。如果想对作者本人和其所著作品有更进一步的了解,可以登录他的个人主页:http://www.dwheeler.com。在该主页上,我们可以看到作者近年来发表的大量与软件安全和开放源码有关的文章。