乐趣区

关于运维:JuiceFS-缓存预热详解

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

退出移动版