JuiceFS 快取預熱詳解

語言: CN / TW / HK

快取預熱是一個比較常見的概念,相信很多小夥伴都有所瞭解。對於 JuiceFS 來說,快取預熱就是將需要操作的資料預先從物件儲存拉取到本地,從而獲得與使用本地儲存類似的效能表現。

快取預熱

JuiceFS 快取預熱是一種主動快取手段,它可以將高頻使用的資料預先快取到本地,從而提升檔案的讀寫效率。

使用 warmup 子命令預熱快取:

juicefs warmup [command options] [PATH ...]

可用選項:

  • --file-f:通過檔案批量指定預熱路徑
  • --threads-p:併發執行緒,預設 50 個執行緒。
  • --background-b:後臺執行

只能預熱已經掛載的檔案系統中的檔案,即預熱的路徑必須在本地掛載點上。

預熱一個目錄

例如,將檔案系統掛載點中的 dataset-1 目錄快取到本地:

juicefs warmup /mnt/jfs/dataset-1

預熱多個目錄或檔案

當需要同時預熱多個目錄或檔案的快取時,可以將所有路徑寫入一個文字檔案。例如,建立一個名為 warm.txt 的文字檔案,每行一個掛載點中的路徑:

/mnt/jfs/dataset-1
/mnt/jfs/dataset-2
/mnt/jfs/pics

通過檔案批量指定預熱路徑:

juicefs warmup -f warm.txt

快取位置

取決於作業系統,JuiceFS 的預設快取路徑如下:

  • Linux/var/jfsCache
  • macOS$HOME/.juicefs/cache
  • Windows%USERPROFILE%\.juicefs\cache

對於 Linux 系統,要注意預設快取路徑要求管理員許可權,普通使用者需要有權使用 sudo 才能設定成功,例如:

sudo juicefs mount redis://127.0.0.1:6379/1 /mnt/myjfs

另外,可以在掛載檔案系統時通過 --cache-dir 選項設定在當前系統可以訪問的任何儲存路徑上。對於沒有訪問 /var 目錄許可權的普通使用者,可以把快取設定在使用者的 HOME 目錄中,例如:

juicefs mount --cache-dir ~/jfscache redis://127.0.0.1:6379/1 /mnt/myjfs

將快取設定在速度更快的 SSD 磁碟可以有效提升效能。

記憶體盤

如果對檔案的讀效能有更高要求,可以把快取設定在記憶體盤上。對於 Linux 系統,通過 df 命令檢視 tmpfs 型別的檔案系統:

$ df -Th | grep tmpfs
檔案系統         型別      容量   已用  可用   已用% 掛載點
tmpfs          tmpfs     362M  2.0M  360M    1% /run
tmpfs          tmpfs     3.8G     0  3.8G    0% /dev/shm
tmpfs          tmpfs     5.0M  4.0K  5.0M    1% /run/lock

其中 /dev/shm 是典型的記憶體盤,可以作為 JuiceFS 的快取路徑使用,它的容量一般是記憶體的一半,可以根據需要手動調整容量,例如,將快取盤的容量調整為 32GB:

sudo mount -o size=32000M -o remount /dev/shm

然後使用該路徑作為快取,掛載檔案系統:

juicefs mount --cache-dir /dev/shm/jfscache redis://127.0.0.1:6379/1 /mnt/myjfs

共享目錄

SMB、NFS 等共享目錄也可以用作 JuiceFS 的快取,對於區域網有多個裝置掛載了相同 JuiceFS 檔案系統的情況,將區域網中的共享目錄作為快取路徑,可以有效緩解多個裝置重複預熱快取的頻寬壓力。

以 SMB/CIFS 共享為例,使用 cifs-utils 包提供的工具掛載區域網中的共享目錄:

sudo mount.cifs //192.168.1.18/public /mnt/jfscache

將共享目錄作為 JuiceFS 快取:

sudo juicefs mount --cache-dir /mnt/jfscache redis://127.0.0.1:6379/1 /mnt/myjfs

多快取目錄

JuiceFS 支援同時設定多個快取目錄,從而解決快取空間不足的問題,使用 : 分割多個路徑,例如:

sudo juicefs mount --cache-dir ~/jfscache:/mnt/jfscache:/dev/shm/jfscache redis://127.0.0.1:6379/1 /mnt/myjfs

設定了多個快取路徑時,客戶端會採用 hash 策略向各個快取路徑中均勻地寫入資料。

Tips

當設定了多個快取目錄時,--cache-size 選項表示所有快取目錄中的資料總大小。建議不同快取目錄的可用空間保持一致,否則可能造成不能充分利用某個快取目錄空間的情況。

例如 --cache-dir/data1:/data2,其中 /data1 的可用空間為 1GiB,/data2 的可用空間為 2GiB,--cache-size 為 3GiB,--free-space-ratio 為 0.1。因為快取的寫入策略是均勻寫入,所以分配給每個快取目錄的最大空間是 3GiB / 2 = 1.5GiB,會造成 /data2 目錄的快取空間最大為 1.5GiB,而不是 2GiB * 0.9 = 1.8GiB

總結

本篇介紹了介紹如何使用 JuiceFS 快取預熱以及快取位置的選擇,該功能能夠有效的增加叢集的利用率,使得程式一開始執行就具有較好的 IO 讀取速度,整體效率上升。

如有幫助的話歡迎關注我們專案 Juicedata/JuiceFS 喲! (0ᴗ0✿)