2014年3月20日 星期四

[ZFS] 效能調校觀念 (ZIL、ARC、L2ARC)

要調校 ZFS storage 的效能,首先必須知道的就是 ZIL、ARC、L2ARC 這三個重要的機制,以下說明一下這三個機制的特性:

ZIL

因為 ZFS 在寫入的特性是 copy-on-write,因此若是要將 storage 用在大量 sync write 的情境下(例如:ESXi over NFS),要在大量的 IO 下兼顧效率與穩定性,SLC SSD 將會是較好的選擇。
且因為 ZIL 不需要太大容量,因此選擇小容量且高速的 SLC SSD 可以在大量 sync write 的情況下提升不少效能(國外論壇推薦 ZeusRAM)。
【重要】ZIL 要儘量選用耐用的裝置(或是不要設定 ZIL),因為 ZIL 掛掉可能也會造成 zpool 的損毀。(這問題在 ZFS v28 之後似乎已經解決,可參考此討論串)

ARC (Adaptive Replacement Cache)

ARC 是存在於記憶體中的超快速暫存區,大小約為系統總記憶體容量減去 1GB,假設系統共安裝了 32GB 的記憶體,ARC 的容量約為 31(32 - 1)GB。
這表示若是安裝了 32 GB 的記憶體在 server 上,ZFS system 則會使用約 31GB 作為 ARC 暫存讀取資料用。
想當然爾,系統記憶體越大,ARC 空間自然就越大,read performance 自然就會提升。

L2ARC (Second Level Adaptive Replacement Cache)

由於 RAM 價格的關係,ARC 的容量無法無限制的提升,因此 L2ARC 就被用來做為第二部份的 read cache 之用,因此適合使用速度快且符合經濟效益的裝置,以目前的狀況來說 SSD 是最佳選擇。(雖然速度比記憶體慢,但卻比一般硬碟快上許多)
由於此區掛了不會讓 zpool 中的資料損毀,選擇大容量且速度快的 MLC SSD 就可以了,建議容量是 ARC 容量(假設 31GB RAM)的 5 倍以下(150GB SSD),因為 L2ARC 的資料還是需要存放 index 資訊於 ARC 中,所以 L2ARC 容量過大也不會有太顯著的效果,當然選企業級的 SSD 穩定性肯定是更好,推薦 Intel DC S3500/S3700 系列(容量越大速度越快......)。
若是上述例子,做成 80GB SSD striped,效能應該會比單顆 160GB 更好。

ARC + L2ARC = 減少硬碟實際存取次數

當 ZFS 收到  read request 時,會做以下動作:
  1. 到 ARC 尋找資料,找到則 response
  2. ARC 沒有資料,到 L2ARC 尋找資料,找到則 response
  3. ARC 與 L2ARC 都沒有,到 Hard Disk 尋找資料,找到則 response
因此可以得知,若是 ARC & L2ARC 可以 cache 越多常用資料,容量大但速度慢的硬碟存取資料機會相對就會少了許多,資料大多都從 memory & SSD 回傳,自然可以大幅提升 ZFS 的讀取效能。

其他注意事項

  1. 在 ZFS layout 設定中,選擇兩個裝置 for ZIL,ZFS 會將其視為 miror,但 L2ARC 則不會視為 mirror。(實際上也真的不需要....)
  2. L2ARC 可以選用便宜的 MLC SSD,但 ZIL 最好選用 SLC SSD,因為 SLC SSD 較耐用且穩定(速度沒比較快)。
  3. 若是要打造全 SSD 的 ZFS filesystem,L2ARC 也就不需要了.....
  4. 若是要將 ZFS 用於虛擬化環境中,透過 template 產生大量 VM,讓每個 VM 擁有許多共同的資料;在存取時就會被視為常用資料存於 ARC or L2ARC 中,如此一來讀取效率可大幅提升。

參考資料

1 則留言: