歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> BSD >> 有關FreeBSD的幾點誤區

有關FreeBSD的幾點誤區

日期:2017/2/28 11:22:01   编辑:BSD


雖然絕大多數人都知道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的這種情況,可能結論就不是這樣簡單了。
然而,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的員工,然而,以他們的資歷,即使在如此不景氣的今天,再找一份工作也不是困難的事情。
Copyright © Linux教程網 All Rights Reserved