最近想給自己找各種理由少寫點東西:)不過今天這個主題例外。班門弄斧,如有寫的不準確之處還望大家多指正。
ZFS的價值與爭議
提到ZFS檔案系統,由於其功能全面以及最大的優勢——開源(而且是BSD類的CDDL協議,修改不用回饋給社群那種),國內外應該有數不清的儲存公司、使用者都從中獲益。
關於ZFS的介紹我不想用太多筆墨,下面這2張截圖引自南京大學人工微結構科學與技術協同創新中心姚舸老師的ppt。
ZFS最早由Sun公司設計用於Solaris系統,其程式碼質量相當高,在OpenSolaris分支(illumos)和FreeBSD(以FreeNAS為代表)下的穩定性也有目共睹。ZFS後來又移植到Linux上,但至今無法改為LGPL開源協議,Linus大神對此相當不爽也就無法進入Kernel。
在不久前的新聞中,OpenZFS的版本號由0.8升級為2.0,並且合併了Linux和FreeBSD的程式碼。
與Ext4、XFS檔案系統相比,ZFS儘管也是本地單機檔案系統(沒有免費的雙控實現,ZFS有點像是本地檔案系統中的Ceph),但卻集成了軟體RAID——含RAID 0、1、Z1(類似R5)、Z2(類似R6雙校驗盤)、Z3和卷管理器,基於元資料的COW寫任意位置事務模型,自帶Chenksum等保證資料完整性,免費提供高效的快照(幾乎無限數量)和複製,還有讀/寫SSD快取、壓縮/重刪等支援。
ZFS還提供了NAS(包括NFS和Samba)檔案共享協議和iSCSI Target支援,有的高手能把FCTarget也搞定,儼然就是套統一網路儲存系統。對成本敏感的客戶,用ZFS代替儲存陣列和RAID卡提供資料保護的也有一些。
瞭解ZFS,有些名詞概念有必要知道。比如ARC是DRAM記憶體中的Cache,主要用於元資料和資料的讀快取加速,ARC(Adjustable Replacement Cache)這一名詞最早應該是源於IBM高階儲存。L2ARC(可選)通常放在SSD上,相當於ARC之外的二級讀快取。ZIL(ZFS intent log,寫日誌)是支援掉電保護的SSD寫快取,用於加速同步寫的效能。
談到ZFS的不足和爭議,前兩年我就曾想過寫一點,還是不講太多為好吧:)Linux下應用的適應場景和限制後續有時間再分享。對於大家要不要回饋開源社群這一點,可以說沒有答案?我隨便扯一句(大家不要認真):企業首先要生存,然後在同行業競爭沒怎麼“作惡”是不是也算是一種貢獻呢。
關於姚舸老師的ppt,主要的效能測試我放在本文後半部分。下面先看看ZFS新版本和後續設計中的一些增強改進。
這裡有幾份ppt參考資料來自OpenZFS Developer Summit 2020(文末我會分享出來),當然如今OpenZFS 2.0版本已經不是rc了。
接下來的重要特性還有持久化L2ARC等;Sequential resilvering(順序重建加速)我想在下一篇中結合未來的另一個新特性來寫。
L2ARC讀快取的持久化
前面提到過L2ARC一般放在SSD上,儲存介質本身是持久化的,這個就像Optane PM持久記憶體(DIMM)的MemoryMode那樣,並不是硬體ok了就能用上持久化的。
如果有持久化就需要保證Crash一致性,這裡的做法就是在L2ARC buffer中拆入log日誌。
上面是用於儲存buffer header entrie的L2ARC log block示意圖。
L2ARC持久化的價值不言而喻:一旦系統重啟,SSD Cache中的讀快取資料不需要再進行預熱。
針對快速介質的ZIL效能改進
關於SSD寫快取加速這部分原理我就不多寫了,ZIL設計早期還沒有如今的高速NVMe SSD等。有興趣的朋友可以參考具體文件,下面只交待效能對比測試結果:
以上平臺配置的zpool記錄大小是8K(相當於硬RAID的條帶),2個NVMe SSD穿透給Linux虛擬機器用於ZFS的ZIL寫快取。
FIO同步隨機寫測試結果如上圖,改進後ZIL效能提高還是很明顯的,高併發下IOPS從不到9萬提高到12萬以上,4執行緒低併發時甚至提高4倍。
Intel Optane在OpenZFS中的應用及測試
讓我們回到姚舸老師的分享資料。首先是測試平臺,包括Dell PowerEdge R740xd伺服器、HGST(劉委員長家的)JBOD、60塊HDD硬碟、SSD、Optane SSD和持久記憶體等。
Optane Persistent Memory配置為MM+AD模式——95%為記憶體模式(可用於大容量ARC),5% App Direct模擬塊裝置(專門用來放ZIL,因為不需要太大)。
擴充套件閱讀推薦:《Optane(傲騰)、非易失記憶體》專輯
在部分測試中,L2ARC使用NVMe SSD、ZIL使用Optane持久記憶體。
上面列出4種測試環境:(1) 247GB DRAM記憶體做ARC,ZIL放在RAID 5 HDD上,這個肯定成本最低,效能相對最差?(2) L2ARC和ZIL都放在P4510NVMe SSD上;(3) ARC放在1.3TB Optane MM(含DRAM快取)上,L2ARC使用4個P4510SSD,ZIL換成Optane P4800X;(4) 在第3種配置的基礎上,ZIL改放在2個36GB的Optane持久記憶體AD裝置映象上。
由於ZIL寫快取需要考慮SSD介質的寫壽命,這裡假設長期平均寫入速度為100MB/s,五年的總寫入量14.69PB——已經超過8TBP 4510、1.6TB P4610還有100GB小容量Optane P4801X的設計壽命。看來ZIL還是用容量大一點的P4610(或別的品牌同等級SSD)、OptaneP4800X更好。
擴充套件閱讀:《Intel Optane SSD寫壽命翻倍:5年60 DWPD》(最新的Optane P5800X達到了100DWPD)
非同步寫對比結果被我略過了,因為只有同步寫才考驗ZIL。上圖中列出了Ubuntu Linux和核心版本、OpenZFS用的是0.8.3,以及fio測試的引數。
除了SSD ZIL相比單純HDD同步寫的重要效能價值之外,我想說另一點是128K 64程序順序寫頻寬,NVMe SSD和NVMeOptane都達到1300MB/s,而Optane DIMM只有974MB/s。
這一點並不意外,其實在我去年的文章中也寫過,當前Optane持久記憶體(AEP)在模擬塊裝置時的寫效能不見得總是強於SSD,而且現在更牛的Optane P5800X也釋出了。
擴充套件閱讀《效能修正:Intel Optane DC持久化記憶體更多測試》
這裡就能看出ZFS 0.8.3版本ZIL效能方面的限制了,比如4KB隨機寫Optane SSD就沒有比普通NVMe SSD快太多,看來後續的ZIL效能改進值得期待。
順序讀測試,姚舸老師特別加了有一組ARC限制到2GB的對比,除了這個效能較低之外,當ARC配置247GB之後有沒有L2ARC差別就不明顯了。畢竟順序寫要落到zpool儲存池裡的HDD RAID上,3314-3519MB/s這個數字也算還可以吧。
相比只有247GB ARC,配置Optane DIMM加大ARC容量對隨機讀有一些幫助。我想這個還與測試資料集大小有關。
生產環境下的ZFS延遲,Optane DIMM也沒能比NVMe Optane SSD表現更好。在儲存軟體的效率足夠高之前,再快的硬體也無法充分發揮。
最後是對Optane持久記憶體的優勢總結。MM+AD混合模式兼顧讀寫快取確實可以節約ZIL SSD,不過用Optane DIMM做ARC還是比普通NVMe SSD做L2ARC要貴吧。
另外一點,就是當OpenZFS 2.0有了持久化L2ARC之後,我理解Optane DIMM也只有配置為App Direct模式才能像NVMe SSD那樣支援讀快取持久化,雖然效率應該比記憶體模式ARC要低一些。對於這點的取捨,讀者朋友中肯定有比我高見的專家,還有本文中更多的未盡之處,歡迎在下面留言:)
關於ZFS新特性和踩坑經驗,我還規劃了2-3篇,有時間爭取再寫給大家。感謝關注!
參考資料
《英特爾® 傲騰™在儲存中的應用》by南京大學人工微結構科學與技術協同創新中心姚舸
《OpenZFS- State of the Project》
《PersistentL2ARC》
《ZILPerformance Improvements for Fast Media》
擴充套件連結提取碼:ua14
擴充套件閱讀
《ZFS原始碼分析及動態》——作者是另一位大神@casualfish,曾經在百度系統部,如今應該是靈犀的技術總監/合夥人。
(ZFS這個話題的後續幾篇,我還想陸續介紹幾位專家朋友)