快取預熱是一個比較常見的概念,相信很多小夥伴都有所瞭解。對於 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✿)