維基百科 - ZFS
簡單來說,ZFS是一種檔案系統,它跟我們所熟悉的Windows檔案系統很不一樣。它沒有磁碟或是分割區的概念,它是以Pool(儲存池)為基準,所有加入Pool的儲存媒體(不論是硬碟、USB隨身碟、磁帶機等等),都能被系統所存取、共享。這麼說還是滿抽象的,舉個列:
假設你有一台Win系統的File Server,其中有一顆500G的硬碟拿來存放高清電影,並分享出來給其他電腦存取。當這顆500G的硬碟滿了,而你想再擴增一顆1TB的硬碟時,你可能有兩種做法:
一、500G的資料不動,新的資料存到1TB那一顆。對系統而言,你存放影片的磁碟就由一個變成兩個,當你要搜尋某個影片時,勢必得在兩個磁碟內來回尋找(尤其是你不記得放在那個磁碟時)。更不用說,1TB也不夠用,要再擴充一顆2TB硬碟時。
二、500G的資料轉存至1TB那一顆,然後讓500G退役或做其他用途。避免了上述管理上的不方便,不過大量資料的轉存很麻煩,當1TB不夠用時,相同的動作得再重覆一次。另外,要處理汰換下來的硬碟也是件麻煩事。
以上的情形若是套用在ZFS的系統上,解決方法很簡單。首先建立一個叫Movie的Pool存放高清影片,當容量不夠時,只要將1TB的硬碟加入Movie這個Pool,容量即刻由500G擴增到1.5TB,系統會自動分配檔案的存放。
上述的也是我目前所碰到的問題,所以當我看到alfonsoh兄這篇 “我的 NAS 檔案伺服器之路-Sun之OpenSolaris” 時,就決定我的下一代File Server要以ZFS為基底來開發,只是這麼多年過去了,次世代檔案伺服器還沒生出來…
當然,ZFS還有許多優良的特性,也有缺點,不過此篇不是要討論這個。此篇想討論的是ZFS的File Server在實作上,到底能提供多大的網路傳輸效能。
測試環境:

測試環境 | Zoey | Sophie |
CPU | Q9400 2.66G | E5400 2.7G |
RAM | 8G | 8G |
OS | Win7 x64 | Solaris Express 11 64bit |
NIC | Intel 82567LM-3 | Intel 82566DM-2 |
HD Read/Write | 123 / 122 | 127 / 126 |
RamDisk R/W | 2329 / 3949 | N/A |
一號機不變,二號機更改作業系統為Solaris Express 11 64bit,Zpool的版本是V31,加掛napp-it套件。
測試一:單一磁碟

硬碟實際讀寫測試:



ZFS系統一樣會將記憶體拿來做檔案快取,而且設計的比Windows系統更聰明些,請看小檔案的「RAM -> Disk」這欄。測試「RAM -> Disk」時,必需先將測試檔案複製到Ramdisk。在「RAM -> Disk」時,雖然它們都是一樣的檔案,Windows系統將把它當作是新的複製;ZFS系統則會直接調用快取裏的檔案。
傳輸數據:



滿慘的,尤其是小檔案的傳輸。從硬碟的讀寫測試來看,瓶頸應該不在硬碟身上,那會是CIFS的效能不佳,導至傳輸效能的低落嗎?順帶一提,所有的測試都是在預設值下執行的。
測試二:HD*2

硬碟實際讀寫測試:



在原有的Pool裏再加入一顆硬碟會怎麼樣?
答案是,它的存取模式會變得類似Raid0,但不等於Raid0,只是類似,所以上面我並沒有標示為Raid0。除了容量立即擴增外,ZFS在寫入資料時並不是”等量”的,它會根據儲存媒體的不同狀況,寫入“變動(Adaptive)”的資料,也就是說兩邊的資料多寡可能會不一樣。因此,它的讀寫效能只會“趨近”於Raid0,但不會等同於Raid0。
傳輸數據:



若說Solaris網路傳輸不佳是卡在CIFS效能低落,那麼硬碟的存取速度,應當不致影響網路傳輸的結果。上圖紅框的部份,網路傳輸速度確實是有增長,後面的測試也證實四項數據中,只有「Zoe <- Sop」的大檔案傳輸有增加,只是增長的幅度多寡而巳,這個結果真難以理解…
測試三:Mirror

硬碟實際讀寫測試:



ZFS的Raid1模式稱之為Mirror,也就是鏡像。它跟傳統的Raid1不太一樣的地方在於,寫入的效能等同Raid1;讀取時會從組成磁碟中同時讀取,因此讀取的效能會接近Raid0。從上面的數據來看,測試軟體的數據確實符合這種特性,不過實測數據就沒那麼漂亮。
另外,ZFS的Mirror不限於只能複數硬碟組成,3顆、5顆都不是問題,很奇怪吧。若是在原有Mirror的Pool裏再加入一組Mirror會怎樣?答案是:會變成Raid 1+0。
傳輸數據:



和上面一樣,只有「Zoe <- Sop」的大檔案傳輸數據有增長,其他基本上不變。
測試四:Raidz

硬碟實際讀寫測試:



ZFS的Raid5模式稱為Raidz,Raid6模式稱為Raidz2,還多了一個Raidz3(允許最多同時故障三顆硬碟),不過建置成本也會很可觀。另外有一點跟傳統Raid5很不一樣的地方,它只要兩顆硬碟就能組成Raidz,神奇吧!
在Raidz底下,除了大檔案存取有增長外,小檔案的存取終於也變快了。
傳輸數據:



雖然本機小檔案的存取變快,卻未能像大檔案那樣對網路傳輸有影響。
測試五:HD*1 iSCSI



傳輸數據:



和Windows系統的iSCSI一樣,對小檔案的傳輸很有幫助。但那讀取是怎麼一回事,是那裏搞錯了嗎?
和Win2008的iSCSI比較:

最後附上一張Pool模式對網路傳輸的影響:

結論:
很明顯的,以Solaris作為File Server,在網路傳輸的效能方面不及Windows系統。效能的瓶頸有兩個:一是大檔案的讀取被限制在60~70MB/s左右,但寫入沒問題;二是小檔案的“讀寫”被限制在5~7MB/s左右,兩邊都有這個情形,不太確定問題出在哪?
是ZFS的讀寫效能不足?
看起來不是,從上面的本機測試來看,ZFS的讀寫是十分優秀的,磁碟讀寫效能足以提供網路傳輸所需。雖然ZFS本機讀取效能佳,卻未能對網路傳輸提供同樣的效能…
那…是CIFS的效能不佳?
似乎也不是,因為若透過快取,網路的傳輸差不多能達到Giga-Lan的上限。
一定有一個因素造成此種情形的發生,影響了網路的傳輸,但這個因素是什麼,目前我還不知道,還有待去觀察、測試…
同場加映:10G檔案傳輸
之前在測試Win7傳輸時發現一個現象,傳輸效能會隨著檔案增大而降低。我很好奇,在Solaris系統上是否有類似的現象??
10G Win7 --> Solaris Express 11

10G Win7 --> Win7

10G Win7 --> Win2008

看起來是沒有這個狀況,且Raidz的效能比Win2008的Raid5要來得好。
To be continue…
網路傳輸測試 測試一:測試基準
網路傳輸測試 測試二:影響網路傳輸的因素
網路傳輸測試 測試三:Soft Raid @ Windows
網路傳輸測試 番外篇:殘酷的現實…
網路傳輸測試 測試五:ZFS 二回戰