OK,跑ZFS的機子不能太癈,但是給它好一點的設備又覺得有點浪費,覺得一台還不錯的機子放在那,結果只單純地當台NAS,似乎有點可惜。於是開始思考,是否有其他的方案能利用到整台機器的效能。
目前可行的方案是把機子設定為Esxi主機,將跑ZFS的系統做為Esxi底下的一台虛擬機器,專門提供檔案的儲存服務;除此之外,我們還能新增數台虛擬機器,不管是要測試、轉檔還是掛網,端看你的需求。這樣,就能把機子的利用率提昇到最大。
這個想法看似不錯,不過,既然是虛擬,效能上就絕對比不上實機運作。這麼說吧,實體轉虛擬所造成的效能損失,是「嗯,有損失,但考慮到整個便利性,還可以接受。」;還是「噢…這個差距太大了,我不能接受。」。在建置整個系統之前,這就是我們要評估的地方,因此這一篇就是為此而生的。
測試環境:

測試環境 | Zoey | Sophie |
CPU | Q9400 2.66G | E5400 2.7G |
RAM | 8G | 4G |
OS | Win7 x64 | Solaris Express 11@ESXi |
NIC | Intel 82567LM-3 | Intel 82566DM-2 |
HD Read/Write | 123 / 122 | 106 / 106 |
說明:將Solaris Express 11安裝到Esxi底下,成為Esxi主機轄下的一台虛擬機器。所有的硬體設備皆為虛擬的,其中影響比較大的是硬碟,I/O通常是虛擬化的罩門所在。Esxi在處理磁碟這部份時,要先將儲存裝置新增Storage至Datastores裏,而儲存裝置的來源分成兩類,一是Disk/LUN(硬碟、iSCSI、SAN),系統會將Strorage格式化為VMFS;另一類則是Network File System(NFS)。

Esxi新增VM時,再從Datastores裏的Storage分配空間做為VM的硬碟,而硬碟又分成三種格式:

Thick Lazy:分配一塊固定的空間,但不做初始化(Zero)。當第一次寫入資料到未用過的硬碟空間時才做初始化,因此硬碟空間在第一次寫入時會有效能上的損失。
Thick Eager:分配一塊固定的空間,並在一開始就將所有的硬碟空間做好初始化的動作。
Thin:硬碟的實際大小隨著使用量而增加,但不能超過創建硬碟時的大小。硬碟空間未初始化,隨著資料的增加,一邊做初始化的動作。
以上說了這麼多,都是因為這個硬碟空間初始化的動作。在第一次寫入資料的同時,做初始化的動作會產生磁碟效能上的損失,進而對整個傳輸的測試產生影響。因此我們在這邊所使用的是Thick Eager Zeroed,先對硬碟空間做初始化,再來測試轉為VM後,整體的傳輸效能變化有多少。
測試一:Solaris Express 11@Esxi 單一磁碟
先看硬碟的讀寫效能由實體磁碟轉為VMFS後,差距有多少?
實體磁碟:ST250G*1

VMFS磁碟:VMFS 30G*1


看起來差距沒有很大,不過這部份的測試,我是用系統內的Benchmark去跑的,沒有手動實測,這個數值參考就好。要提醒的是,若使用Thick Eager型態的磁碟,Esxi會先做初始化的動作,這需要一段時間,必需等到初始化完成,VM才能開機運作。因此,我只切割30G的空間來做測試,初始化大約要6分鐘左右。另外,為了加快測試的腳步,以下的實驗我只測試磁碟對磁碟的部份。
網路傳輸數據:



很有意思的是,之前在測試ZFS的傳輸效能時(請參考這篇),透過網路傳輸,寫入與讀取的效能並不一致,單顆磁碟寫入約90MB/s,但讀取卻只有60MB/s左右,寫入大於讀取,且有一段不小的差距。奇怪的是,這個情形只有在網路傳輸時出現,本機磁碟存取並沒有問題。那時我做了許多測試來尋找可能的原因,還是不得而解,不曉得為什麼讀取的傳輸被限制住了…
沒想到在這一輪的測試裏,讓我滿訝異的。ZFS大檔案的讀取正常,發揮了它該有的水準。我原本想說會不會那裏弄錯了,於是重做一遍,結果一樣,大檔案的讀取差不多可以到90MB/s左右,與寫入相當。
難道說,ZFS在VM底下跑得比實體主機還快?
很可惜並不是。我之後做了另一項測試,配置實體磁碟給Solaris的VM,重Run一遍,讀取的效能又從原本的90MB/s,掉回至60MB/s左右。也就是說,讀取效能的差異並不是因為虛擬化。同樣的VM,透過網路讀取時,使用VMFS磁碟比實體磁碟要來得快。
在這邊要特別說明的是:
1. 實體主機本機存取的部份,ZFS的測試數據正常。
2. 實體主機網路存取的部份,除了大檔案的讀取異常外,其他三項數據均在合理的範圍內。
3. 即使虛擬化,除了大檔案的網路讀取外,其他測試數據也是按照一定比例衰退,還滿合理的。
從這項測試來看,ZFS大檔案網路讀取的低落,並不是ZFS做不到,而是被限制住了。傷腦筋的是,這個因素是什麼,我到現在還是沒有辨法判定…
我也做了Thin Provision型態的VMFS磁碟測試。
本機存取:

網路傳輸數據:



可以看得出來,在寫入資料時,初始化的動作對本機存取的影響還好,但對網路寫入的傳輸效能下降非常多。初始化只有在硬碟空間第一次寫入資料時會動作,理論上你再次寫入資料到巳刪除而空出來的硬碟空間時,就不會有初始化的問題,但這並不適合ZFS。原因在於ZFS使用COW(乳牛?)技術來存取資料,當資料需要更新或異動時,並不會直接覆蓋既有的區塊,而是會找一個未使用的空間來存放,以維持資料的完整性。所以,即使你把舊資料刪除,新的資料可能還是會存放到未初始化的空間,一直到所有的空間都初始化完畢。可想而知,效能不會太好看,這也就是說為什麼ZFS不適合Thin及Thick Lazy型態的磁碟。
從上方紅框的數據來看,1st及2nd分別是2個大小相同但不一樣的檔案,3rd則是將2nd的檔案以刪除或覆蓋的方式再傳輸一次,以獲得Cache對傳輸的影響。3rd若是寫入同樣的空間,因2nd時巳初始化過,傳輸數據應該很漂亮才對。實際上,3rd確實是寫入未初始化的空間,才會出現這樣的數據。
測試二:Solaris Express 11@Esxi Stripe
實體磁碟:ST250G*2 Stripe

VMFS磁碟:VMFS 30G*2 Stripe


這兩個VMFS磁碟分別建立在不同的硬碟上,避免同一硬碟造成效能的影響。
網路傳輸數據:



之前在實體主機下測試時,ZFS的網路讀取會隨著的Pool的型態而略增。例如單顆磁碟網路讀取效能為64MB/s,換成Stripe時會增長到77MB/s;但在VM模式底下,不管是單顆磁碟還是Stripe,網路讀取效能都維持在88MB/s左右,沒有什麼變動,或許這才是它本來該有的狀況。
測試三:Solaris Express 11@Esxi 鏡像
實體磁碟:ST250G*2 Mirror

VMFS磁碟:VMFS 30G*2 Mirror


網路傳輸數據:



測試四:Solaris Express 11@Esxi Raidz
實體磁碟:ST250G*3 Raidz

VMFS磁碟:VMFS 30G*3 Raidz


網路傳輸數據:



測試五:Solaris Express 11@Esxi iSCSI
VMFS磁碟:VMFS 30G*1 -> iSCSI 20G



網路傳輸數據:



此處大檔案的網路讀取並未像前面那樣恢復該有的水準,真的是很奇怪…
附上Pool模式對網路傳輸的影響:

對照實體主機

測試七:Solaris Express 11@Esxi Single@Mapping
實體磁碟:ST250G@Mapping*1


Esxi在新增Storage時,預設是使用VMFS磁碟,它會將原本的硬碟清空,重新格式化為VMFS磁碟。不過有一個方法可以Mapping實體磁碟為vmdk,讓VM可以直接存取實體硬碟,也不會破壞原有硬碟裏的檔案。這邊可以看到,Mapping實體磁碟的效能是比VMFS磁碟要來的好的,效能等同於在實體主機上運行。
網路傳輸數據:



這就是讓人不解的地方了,大檔案的網路讀取又掉回跟實體主機一樣的效能。照理來說,VMFS不會比實體磁碟來得快,本機硬碟的存取測試也證明這一點。但網路讀取的傳輸,VMFS就是比實體磁碟來得快,這個速度才是ZFS應該有的效能。可是一換到實體磁碟上,網路讀取的效能馬上Down下來;如果其他三項數據也跟著Down,這還可以理解。偏偏只有讀取這部份的數據不一樣,實在是搞不懂…
結論:
Solaris Express 11轉為VM後,若使用標準配置VMFS磁碟,本機存取效能上低於實體硬碟,這是可以理解的。依Raid模式的不同,其中寫入約1%~8%不等;而讀取的效能差距較大,約16%~17%。一般來說,讀取的效能會大於寫入,這邊剛好相反,不曉得是否為VMFS的限制?
在網路傳輸的部份:
1. 大檔案寫入的效能損失不大,即使Raidz損失約15%,都還在可以接受的範圍。
2. 大檔案讀取的效能超越實體主機,讓我不禁想到這才是它應該有的實力。實體主機約60MB/s的網路讀取速率,個人覺得慢了一點,不太滿意;但若是像VM一樣能跑到85MB/s,那就沒什麼好挑剔的了。
3. 小檔案的效能損失,以比例來看還滿大的,約2~3成,不過實際上並沒有這麼明顯的感受。且做為NAS用途,儲存小檔案的機率不高,應該都是以大檔案居多,因此這項數值個人並不是很Care,僅作為參考。