美文网首页
JuiceFS 缓存预热详解

JuiceFS 缓存预热详解

作者: JuiceFS | 来源:发表于2022-04-19 16:59 被阅读0次

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

    相关文章

      网友评论

          本文标题:JuiceFS 缓存预热详解

          本文链接:https://www.haomeiwen.com/subject/blasertx.html