JuiceFS v0.17 釋出,通過 1270 項 LTP 測試!

JuiceFS發表於2021-09-27

小夥伴們大家好,JuiceFS v0.17 在國慶小長假來臨之際如期釋出了!這是我們在 2021 年秋季推出的第二個版本,讓我們直奔主題,看看都有哪些新變化吧。

本次更新累計 80+ 提交,共有 9 位來自 JuiceFS 社群的小夥伴在 GitHub 上貢獻程式碼。在這裡,我們向每一位貢獻者表示最誠摯的感謝,同時歡迎螢幕前的你也加入到 JuiceFS 開源社群,貢獻程式碼、文件或討論想法。

通過 LTP 1270 項測試,Linux 系統下相容性更完美

JuiceFS 的最新版本針對 Linux 系統環境做了進一步的優化,改進了 rename 和 setxattr 讀其他引數的支援,順利通過了 LTP 的 1270 項測試。

LTP(Linux Test Project)是一個由 IBM,Cisco 等多家公司聯合開發維護的專案,旨在為開源社群提供一個驗證 Linux 可靠性和穩定性的測試集。LTP 中包含了各種工具來檢驗 Linux 核心和相關特性。

測試結果

Testcase                                           Result     Exit Value
--------                                           ------     ----------
fcntl17                                            FAIL       7
fcntl17_64                                         FAIL       7
getxattr05                                         CONF       32
ioctl_loop05                                       FAIL       4
ioctl_ns07                                         FAIL       1
lseek11                                            CONF       32
open14                                             CONF       32
openat03                                           CONF       32
setxattr03                                         FAIL       6

-----------------------------------------------
Total Tests: 1270
Total Skipped Tests: 4
Total Failures: 5
Kernel Version: 5.4.0-1029-aws
Machine Architecture: x86_64

其中,跳過和失敗的專案主要是由於幾個尚未支援的功能,詳情見此文件

優化儲存臨時資料的效能

針對 Spark 的 shuffle 檔案等臨時資料儲存需求,社群貢獻者祝威廉(@allwefantasy)給 JuiceFS 貢獻了資料延遲上傳功能,它可以讓 JuiceFS 優先將資料寫入到本地快取盤中,如果這些資料在短時間內又被刪除,則無需寫入物件儲存,可以提供接近本地盤的讀寫效能。而當寫入資料很多時,又會自動寫到物件儲存來釋放本地盤空間,再也不用擔心 shuffle 資料把磁碟寫滿了。

這個新功能讓 JuiceFS 可以作為一個彈性本地盤使用,為臨時資料提供無限儲存空間和低延時訪問。

為了進一步提升效能,還新增了一個執行在客戶端記憶體中的後設資料引擎(MemKV)。與其他後設資料引擎一樣,MemKV 的作用也是用來儲存資料相關的元資訊,但它不持久化,客戶端 umount 以後,MemKV 的後設資料就釋放了。MemKV 完全在記憶體中執行,有著絕對的效能優勢,非常適合用作臨時檔案的儲存場景。

TiKV 後設資料引擎在 Hadoop 場景中效能提升 5 倍

JuiceFS Java 客戶端需要頻繁做路徑解析,Redis 引擎通過 Lua 實現了伺服器端的多級路徑解析,而 SQL 和 TiKV 引擎仍然需要多次後設資料請求才能解析一個路徑,尤其是當路徑比較深時對影響有比較大的影響。

為了解決這個問題,本次更新在 JuiceFS Hadoop SDK 客戶端中引入了類似於 Linux 核心的後設資料快取機制,可以分別通過引數控制目錄、檔案和屬性的過期時間。可以通過如下的方式啟用:

<property>
  <name>juicefs.attr-cache</name>
  <value>3</value>
</property>
<property>
  <name>juicefs.entry-cache</name>
  <value>3</value>
</property>
<property>
  <name>juicefs.dir-entry-cache</name>
  <value>3</value>
</property>

以下是對 9 層目錄的後設資料效能測試,可以看到啟用後設資料快取夠大幅提升後設資料操作的效能。(數值代表操作的時延,越小越好。)

image

但需要注意的是,開啟後設資料快取後會影響多客戶端之間的一致性(有限時間視窗的最終一致性),比如一個客戶端刪除了某個檔案後,其他節點可能因為快取未到期,仍然認為檔案存在。因此,一般建議在查詢場景下使用該功能。如果是混合讀寫的場景,建議適當開啟目錄和屬性的快取,而關閉檔案項的快取。

1 分鐘上手效能測試,結果一目瞭然

我們為 JuiceFS 內建的效能測試工具 bench 的結果做了進一步的優化,在簡潔直觀的基礎上,進一步的讓關鍵資料高亮顯示,如果某項效能資料偏離正常區間,會顯示為黃色甚至紅色,建議特別關注下。

image

有關 JuiceFS 新版的更多內容,歡迎訪問 GitHub 專案主頁瞭解詳情:

推薦閱讀:
如何藉助 JuiceFS 為 AI 模型訓練提速 7 倍
如何利用 JuiceFS 的效能工具做分析和調優

相關文章