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 讀取速度,整體效率上升。

JuiceFS 社群故事徵集ing!

首屆 JuiceFS 社群徵文活動正在進行中 。希望通過本次活動彙集更多優質內容,幫助各位開發者、使用者更加便捷、高效地使用 JuiceFS,更好地融入開源社群, 點此快來投稿吧! FILCO 鍵盤、冰墩墩、社群周邊等你拿~

:point_down: 掃碼加群 :point_down:

:point_down: 關注「 Juicedata 」,獲取更多技術乾貨   :point_down: