王波
虽然绝大多数人都知道FreeBSD的优势在于稳定性高,网络性能好,但对于FreeBSD其他 的一些技术特性,在认识上仍然存在着一些偏差。
1.FreeBSD不具备日志文件系统,因此不适合用作高要求的应用目的
首先需要指出的是,日志文件系统最早也是在BSD上开发的,称为LFS。在FreeBSD中本来 是支持它的,但后来由于版本升级的原因,它的代码由于缺乏维护而被暂时抛弃,至今 还可以在FreeBSD的源代码中可以找到LFS的一些遗迹。目前,LFS还存在于NetBSD中继续 开发,如果有特别的需求,它完全可以再回到FreeBSD系统中。 然而,FreeBSD开发者没有急于将LFS移植回FreeBSD是有道理的,因为FreeBSD系统中已 经增加了一些新的特性,足以提供LFS能提供的最重要的特性。为了解释FreeBSD的这些 特性的本质,我们需要讨论一下文件系统。 由于文件系统的读写性能对于整个系统的性能来讲,是一个非常重要的指标,因此系统 设计者就设法尽可能的提高文件系统的性能。这样,人们就设计了磁盘访问缓冲来达到 这个目的,这样,使用缓冲的读写方法就称为异步(async)访问方法,相应的不采用缓 冲的磁盘读写方法就称为同步(sync)访问方法。 显然,异步方法具有更高的读写性能,但是一旦发生故障的时候,由于有很多数据还保 存在缓冲区中,就导致这一部分数据丢失。然而,如果是简单的部分数据丢失倒还罢了 ,但是某些重要的数据丢失,就导致整个文件系统遭到破坏。为什么会发生这样的情况 呢? 因为,在文件系统中,有两种不同的数据,一种为简单的文件内容数据,这些数据丢失 仅仅导致某个文件出现错误数据,不会影响其他文件的内容。另一种数据则比较重要, 例如文件系统本身的I节点或者目录数据,假如I节点的数据块出现错误,就会导致大量 文件丢失,甚至导致文件系统整个受到破坏。这些对文件系统完整性非常重要的数据被 称为元数据(metadata)。 对于普通的文件系统来讲,并不能在缓冲区中区分出普通数据和元数据,这样就会发生 普通数据的更新比它对应的元数据更新的时间要早,这样一旦发生故障,文件系统的破 坏是不可避免的。对于日志文件系统来讲,由于日志是顺序发生的,因而缓冲区向磁盘 写的顺序也是顺序的,这样,元数据的更新总是顺序的在数据更新之前被保存,这样就 使得即使发生故障,元数据也不会发生特别严重的错误,某些元数据的错误只能导致部 分文件丢失,而不会影响整个文件系统。 由于日志文件系统的这个顺序特性,使得系统不会因为故障出现严重的错误,而且在出 现错误时,还具备更短的文件系统修复时间(fsck),系统修复时间对于存储量非常大 的文件系统非常重要。这样一旦出现错误,系统重新启动并恢复提供服务的时间也很短 暂。 对于FreeBSD系统来讲,则沿着另一个类似的方式来解决这个问题。由于FreeBSD更关心 系统的稳定性、可靠性,FreeBSD系统并不推荐使用异步的方法来访问磁盘,但是这样磁 盘性能就比较差。为了解决这个问题,FreeBSD改善了文件系统,将普通数据和元数据分 开,这样就可以对普通数据进行缓冲,而对元数据不进行缓冲,这样的方法就可以大大 改善文件系统性能,并且对文件系统的安全性也没有太大的影响。 然而即使如此,文件系统的性能比起全部异步的方法还有一些差距,如何达到全部异步 访问的目的呢?FreeBSD研究者提出了softupdate的方法,softupdate的主要目的是将元 数据的改变按照它们之间的依赖关系,元数据对普通数据的依赖关系进行重新排序,保 证元数据的更新按照安全的数据顺序更新,这样即使出现故障,也如同日志文件系统类 似,只会出现最终改变的一些文件错误或丢失,而不会出现严重错误。 从这个本质角度出发,softupdate其实是和日志文件系统用来解决同一类问题的两种不 同方法,只不过日志文件系统是使用日志的方法来解决依赖关系的顺序问题,而softup date则需要重新排序元数据,softupdate功能上非常类似于元数据日志文件系统。有了 softupdate,系统就可以全面支持异步的磁盘读写,提供更好的文件系统性能。 此外,FreeBSD目前还提供了诸如后台磁盘检查,就是说可以在后台执行磁盘检查,而不 影响前台执行磁盘访问,这样就使得系统出现故障时更短的时间恢复正常服务。目前Fr eeBSD系统甚至可以提供包括快照(snapshot)在内的高级文件系统功能。 因此,虽然FreeBSD 下目前没有日志文件系统,但事实上已经提供了类似日志文件系统 的功能,因此完全可以满足不同的高端需求。
2. FreeBSD的磁盘读写性能差,不适合大量存储数据的情况
很多来自网上的文章都告诉读者,FreeBSD虽然在其他方面具备一定的优势,但磁盘读写 速度差,特别是在使用IDE磁盘的时候。 如果把这个观点放在FreeBSD 2.2.x之前,也许还有些道理,那个时候FreeBSD为了保证 文件系统的安全性,是使用同步的方法访问磁盘,显然要比Linux等以异步的方法访问磁 盘要慢的多。但在FreeBSD 3.x之后,系统已经全面支持softupdate,那么性能的改善就 可想而知了。 当然,为了保证数据安全,FreeBSD缺省还关闭一些硬件的性能选项,例如IDE磁盘通常 有一个内部的缓冲区,具备在磁盘设备本身对数据进行缓冲的功能,原则上,这个功能 是非常危险的,因为它在磁盘内部实现,系统无法告诉它那些数据是元数据,不能缓冲 或者必须顺序写入等等,有些高端磁盘通常具备电池,保证磁盘内部的缓冲能在突然掉 电的情况下写回磁盘,但普通的磁盘显然没有这个能力。因此,FreeBSD实际上缺省是关 闭这样的功能的,并不推荐使用,但是,如果是追求性能的话,打开这些功能也是可以 的,只不过就要冒丢失数据的风险了。 很多FreeBSD用户还注意到,安装FreeBSD的时候,磁盘读写性能的确比较慢,尤其是在 安装Ports Collection部分的时候。这是因为目前FreeBSD的安装系统还没有立即支持s oftupdate,没有充分发挥这个性能优势,对于Ports Collection这个包含大量小文件, 需要巨大数量的I节点元数据改变的磁盘访问需要,速度慢一些是正常的。未来的安装系 统将缺省支持softupdate,安装速度会得到改善。 安装系统的磁盘访问慢还有一个更深层次的原因,就是安装系统的打包方式与普通方式 不同,例如一个多级子目录aa/bb/cc/dd,普通的打包数据方法是先打包aa,接着是aa/ bb,aa/bb/cc,最后是aa/bb/cc/dd,这样在解开的时候就顺序进行,但安装系统的打包 方式却与此相反,那么,这样再解开的时候就需要额外的处理,子目录层次越多,需要 的额外磁盘访问就越多。FreeBSD系统采用这种打包方法,主要是确保升级时的文件展开 的正确性,虽然使用正常的打包顺序在绝大多数情况下也不会有问题。 即便如此,在最新一次FreeBSD和Linux的对比测试中(FreeBSD 4.3对Linux 2.4.10), 使用同样的硬件并进行优化之后,FreeBSD在提供静态HTML方面要比Linux差几个百分点 ,而在提供动态CGI方面要比Linux高几个百分点。原则上,这就表明在磁盘I/O方面,F reeBSD还是有几个百分点的差距。 对于这一点,首先需要指出的是,FreeBSD的softupdate异步方式,和Linux的ext2fs的 普通异步方式是不同的,所实现的功能差异很大。 第二点,我想这个对比测试也展示了FreeBSD和Linux在内存管理方面的策略上的差异。 众所周知,FreeBSD和Linux都是采用的将虚拟内存页面和磁盘缓冲区统一管理的方式, 根据需要,将物理内存动态的分配给磁盘缓冲或者用作虚拟内存页面。这样的统一管理 方式,就使得系统可以使用不同的分配策略,是缓冲优先,还是虚拟内存优先? 显然,FreeBSD要倾向于后者,这就使得Linux在内存足够大,需要缓冲的磁盘内容相对 小的时候,文件系统的访问性能会比较好。而FreeBSD在进程数量较多的重负载情况下, 仍然会高效的提供服务。这个也就能够解释一个朋友曾经给我的一个他自己使用apache 的类似测试结果,在他的测试中,Linux在重负载的条件下很容易达到100%的处理器占用 ,而FreeBSD虽然略有百分之几的差距,但是处理器占用却一直位于50%以下。我的这位 朋友希望我能告诉他如何挤压出处理器的的剩余处理能力,达到更高的性能,但我得说 ,这就涉及到内存管理的细节了,要做到这一点并不简单。事实上,保留一定的处理器 空余,能够使得系统进程切换更平滑,服务更稳定,要知道,性能并不是唯一的因素。
以我的看法,除了测试在缓冲区中能找到数据的情况,也要测试不能找到数据的情况, 才更符合真实的服务世界,正常的磁盘访问测试通常包括顺序读、顺序写、随机读、随 机写等多种情况。例如可以使用数千个随机选择的URL,而不是一个固定的URL来执行随 机读测试,或许结果就会有所不同的吧!
3.由于wind river已经解聘了一些制作FreeBSD发行的员工,因此FreeBSD前景不妙
就在最近,原本制作FreeBSD正式发行版本的wind river将他们负责制作FreeBSD发行光 盘的员工解聘,并且声明未来不再负责FreeBSD的光盘发行和技术支持。因此,一些朋友 和我聊天的时候,就笑谈FreeBSD前景不妙。 如果仅仅是看这一件事情,或许可以得到这样的结论,但是如果我们注意到wind river 与FreeBSD的关系,以及他们其实是刚刚购买了BSDI的这种情况,可能结论就不是这样简 单了。 事实上,最早FreeBSD的发行版本是由cdrom.com来负责制作光盘和发行的,cdrom是一家 出版制作公司,而不是一个严格意义的IT公司。后来BSDI,制作BSD/OS的公司,购买了 cdrom,因而也拥有了FreeBSD的制作和发行部门,直到wind river公司购买了BSDI。现 在可以看到,作为一个方向为嵌入式系统的公司,wind river仅仅需要BSD/OS来填补其 产品系列的空白,在目前IT行业普遍不景气的条件下,wind river没有兴趣在非主营的 出版领域做工作,作为一个商业企业这是非常正常,也非常正确的策略。 然而,wind river放弃FreeBSD的意义和某个linux公司放弃linux的意义显然是截然不同 的。因为FreeBSD一直是以一种出版业务的形式在cdrom出现的,而不象Linux公司,以L inux操作系统本身作为主营业务。即使是BSDI购买了cdrom,BSDI也只是将FreeBSD作为 他们的BSD/OS的商业补充,也可能他们有将FreeBSD作为他们的主营业务的愿望,但是他 们本身还拥有BSD/OS,并且他们购买cdrom的时候,IT行业已经风光不再,因此,FreeB SD对于BSDI,仍然是作为出版业务而主要存在。 因此,与其作为一个非主营业务存在于IT公司,还不如回到其本身的情况,由一家以出 版、媒体为主的公司来负责FreeBSD光盘的出版和制作,这样必然可以减少出版发行光盘 的成本,即使从商业上考虑,想BSDI、wind river是无法从FreeBSD光盘制作和发行方面 盈利的,但一家专业出版发行公司则完全不同。当前,daemonnews,一个以BSD Unix为 主要对象的媒体公司承担了这个任务。 因此,wind river放弃FreeBSD与否,与FreeBSD本身的发展并没有太大的关系,FreeBS D不是依靠商业方式发展的,而是依赖其本身的实力得到认可的一个系统,未来也将继续 这样发展下去。也许受影响的只是那几个离开wind river的员工,然而,以他们的资历 ,即使在如此不景气的今天,再找一份工作也不是特别困难的事情。 |