缓存预热是一个比拟常见的概念,置信很多小伙伴都有所理解。对于 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✿)