有关FreeBSD的几点误区

原创 2005年02月26日 10:26:00
虽然绝大多数人都知道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其实是和日志文件系统用来解决同一类问题的两种不同方法,只不过日志文件系统是使用日志的方法来解决依赖关系的顺序问题,而softupdate则需要重新排序元数据,softupdate功能上非常类似于元数据日志文件系统。有了softupdate,系统就可以全面支持异步的磁盘读写,提供更好的文件系统性能。

此外,FreeBSD目前还提供了诸如后台磁盘检查,就是说可以在后台执行磁盘检查,而不影响前台执行磁盘访问,这样就使得系统出现故障时更短的时间恢复正常服务。目前FreeBSD系统甚至可以提供包括快照(snapshot)在内的高级文件系统功能。

因此,虽然FreeBSD 下目前没有日志文件系统,但事实上已经提供了类似日志文件系统的功能,因此完全可以满足不同的高端需求。

2. FreeBSD的磁盘读写性能差,不适合大量存储数据的情况

很多来自网上的文章都告诉读者,FreeBSD虽然在其他方面具备一定的优势,但磁盘读写速度差,特别是在使用IDE磁盘的时候。

如果把这个观点放在FreeBSD 2.2.x之前,也许还有些道理,那个时候FreeBSD为了保证文件系统的安全性,是使用同步的方法访问磁盘,显然要比linux等以异步的方法访问磁盘要慢的多。但在FreeBSD 3.x之后,系统已经全面支持softupdate,那么性能的改善就可想而知了。

当然,为了保证数据安全,FreeBSD缺省还关闭一些硬件的性能选项,例如IDE磁盘通常有一个内部的缓冲区,具备在磁盘设备本身对数据进行缓冲的功能,原则上,这个功能是非常危险的,因为它在磁盘内部实现,系统无法告诉它那些数据是元数据,不能缓冲或者必须顺序写入等等,有些高端磁盘通常具备电池,保证磁盘内部的缓冲能在突然掉电的情况下写回磁盘,但普通的磁盘显然没有这个能力。因此,FreeBSD实际上缺省是关闭这样的功能的,并不推荐使用,但是,如果是追求性能的话,打开这些功能也是可以的,只不过就要冒丢失数据的风险了。

很多FreeBSD用户还注意到,安装FreeBSD的时候,磁盘读写性能的确比较慢,尤其是在安装Ports Collection部分的时候。这是因为目前FreeBSD的安装系统还没有立即支持softupdate,没有充分发挥这个性能优势,对于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方面,FreeBSD还是有几个百分点的差距。

对于这一点,首先需要指出的是,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公司,以Linux操作系统本身作为主营业务。即使是BSDI购买了cdrom,BSDI也只是将FreeBSD作为他们的BSD/OS的商业补充,也可能他们有将FreeBSD作为他们的主营业务的愿望,但是他们本身还拥有BSD/OS,并且他们购买cdrom的时候,IT行业已经风光不再,因此,FreeBSD对于BSDI,仍然是作为出版业务而主要存在。

因此,与其作为一个非主营业务存在于IT公司,还不如回到其本身的情况,由一家以出版、媒体为主的公司来负责FreeBSD光盘的出版和制作,这样必然可以减少出版发行光盘的成本,即使从商业上考虑,想BSDI、wind river是无法从FreeBSD光盘制作和发行方面盈利的,但一家专业出版发行公司则完全不同。当前,daemonnews,一个以BSD Unix为主要对象的媒体公司承担了这个任务。

因此,wind river放弃FreeBSD与否,与FreeBSD本身的发展并没有太大的关系,FreeBSD不是依靠商业方式发展的,而是依赖其本身的实力得到认可的一个系统,未来也将继续这样发展下去。也许受影响的只是那几个离开wind river的员工,然而,以他们的资历,即使在如此不景气的今天,再找一份工作也不是特别困难的事情。

java多线程的两点误区

 在使用java线程的时候,特别是初学者总会有几点很常见的误区,下面以以下代码为例:线程类:package threadtest1;public class ReturnThreadInfo exte...
  • overmaker
  • overmaker
  • 2008年02月15日 11:46
  • 32703

几个常见思维误区

有很多人大学毕业后,还是保持学习,这其实挺好的。但进入社会开始工作后,现在的学习跟大学时候的学习肯定是有区别的。最大的区别是,这个时候你所学的要用起来创造价值。 思维方式出问题 考场逻辑:我没有准...
  • luopeng123456789
  • luopeng123456789
  • 2015年10月14日 15:58
  • 523

c++的几点误区

本文摘自c++primer(第五版)
  • g369383427
  • g369383427
  • 2014年07月01日 21:49
  • 197

软件测试的几大误区

我们暂且不去评析软件测试在当今it公司中的地位,只说大家对软件测试的认识。基于我短暂的经验,我总结出软件测试几个最常见的误区,供大家研究:   一大误区:测试简单,对技术要求不高   这是对测试最...
  • xqtesting
  • xqtesting
  • 2014年07月25日 12:37
  • 680

谈谈敏捷开发的误区

今天有人做演讲有关敏捷开发的。就演讲而言,讲得非常好,吐字清晰,语速适当,穿插例子,娓娓道来,将意思表达得非常清楚到位,是个很好的演讲。但就内容而言,我却有很大的异议,当中部分观点我认为是对敏捷开发的...
  • flowingflying
  • flowingflying
  • 2013年01月23日 23:12
  • 2650

做人工智能,先理解好这七大误区!

近几年,大数据、人工智能、AI等词已被媒体大肆宣传,让很多人赶鸭子上架也往这几个方面蹭一蹭,纷纷投入研发,但效果甚微,不禁让人产生疑问。人工智能真的如同媒体宣传那般神奇吗?今天大圣众包小编就为大家分享...
  • dashenghuahua
  • dashenghuahua
  • 2017年01月05日 11:58
  • 612

项目管理十大误区

 随着计算机硬件水平的不断提高,计算机软件的规模和复杂度也随之增加。计算机软件开发从“个人英雄”时代向团队时代迈进,计算机软件项目的管理也从“作坊式”管理向“软件工厂式”管理迈进。这就要求软件开发人员...
  • a313586
  • a313586
  • 2008年04月17日 19:06
  • 278

软件测试的误区

1.规范化软件测试是增加项目成本增加软件测试人员和预留项目测试时间,表面上看是增加了人员成本或延长了项目周期,为此会投入了更多的项目资金。然而我们知道,越早发现软件中存在的问题,开发费用就越低。美国质...
  • chicochen
  • chicochen
  • 2006年08月04日 08:56
  • 1164

有关自动化测试的误区

  有关自动化测试的误区  目前,有些人对自动化测试的认识存在一定的误区,因此有必要对自动化测试树立正确的认识,以防止对其有过高的期望。  1.自动化测试工具是“万能”的  很多人一听到自动化测试,就...
  • bwf_shwangzhanbu
  • bwf_shwangzhanbu
  • 2011年06月01日 13:38
  • 424

【Java】抽象类的几点误区

1.为什么要用抽象类 在类的继承中,有很多域和方法是通用的、基本的、层次较高的。因为他们层次更高,更为通用,所以不会那么具体,即更为抽象。定义为抽象方法就不必急于在父类中实现,而且很可能是根本无法实...
  • u011613729
  • u011613729
  • 2014年01月13日 15:03
  • 789
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:有关FreeBSD的几点误区
举报原因:
原因补充:

(最多只允许输入30个字)