有關FreeBSD的幾點誤區
2024-07-26 00:29: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其實是和日志文件系統用來解決同一類問題的兩種不
同方法,只不過日志文件系統是使用日志的方法來解決依賴關系的順序問題,而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的員工,然而,以他們的資歷
,即使在如此不景氣的今天,再找一份工作也不是特別困難的事情。