CacheFS 使用说明
FS-Cache是一种内核功能,网络文件系统或其他文件系统可以通过它来缓存数据到本地磁盘空间,减少网络传输的数据,从而提升性能。这在网络速度比较慢时会得到比较好的效果。
FS-Cache 可以被任何希望添加本地缓存的文件系统使用,例如:AFS、NFS、CIFS和Isofs。
FS-Cache 对于客户端文件系统是透明存在的,当这项功能开启的时候,透过缓存请求文件对于客户端是无感知的。

Android 系统添加 CacheFS 步骤
(一) 内核
内核中的主实现模块为:CONFIG_FSCACHE 和 CONFIG_CACHEFILES,但是默认是没有配置到 kernel.img 中的,如果要使用这个功能,需要在内核中添加该配置并重新编译内核。
重新烧录后,应可以看到系统中存在以下目录:
/proc/fs/fscache
/proc/sys/fscache
/sys/kernel/fscache
/sys/module/fscache
/dev/cachefiles
/sys/module/cachefiles
/sys/devices/virtual/misc/cachefiles
/sys/class/misc/cachefiles
(二) 系统
在系统代码中添加Cachefilesd模块,Cachefilesd 是用户层执行程序,可以控制是否开启缓存、可以对缓存进行相关的配置。
源码路径在: http://people.redhat.com/~steved/cachefs/
目前最终的版本是 0.10.10,下载 cachefilesd-0.10.10.tar.bz2 源码打包文件即可。
将cachefilesd-0.10.10.tar.bz2解压缩,我们需要的两个文件为:cachefilesd.c 和 cachefilesd.conf
在 rk3288 代码:vendor/rockchip/common/vpu/ 目录下,建立新目录:cachefilesd/
将上述两个文件考入,然后在此目录下新建 Android.mk 文件。
修改 vendor/rockchip/common/vpu/vpu.mk 文件
在 vendor/rockchip/common/vpu/vpu.mk 文件中 PRODUCT_PACKAGES 变量后添加 cachefilesd
在 vendor/rockchip/common/vpu/vpu.mk 文件中 PRODUCT_COPY_FILES 变量后添加要拷贝的cachefilesd.conf 文件:
vendor/rockchip/common/vpu/cachefilesd/cachefilesd.conf:system/etc/cachefilesd.conf
(三) 开机启动服务
修改 rk/device/rockchip/rk3288 /rk3288_box/init.rc 文件,在其中增加 cachefilesd 服务脚本:
service cachefilesd /system/bin/cachefilesd -n
class main
user root
group root
disabled
然后添加开机启动服务脚本
on property:sys.boot_completed=1
mkdir /cache/fscache 0777 root root
start cachefilesd
其中的目录 /cache/fscache 就是 FS-Cache 用于存放缓存文件的目录,这个目录在配置文件 cachefilesd.conf 中设定的。
cachefilesd.conf
(一) 配置内容示例
dir /cache/fscache
tag mycache
brun 10%
bcull 7%
bstop 3%
frun 10%
fcull 7%
fstop 3%
secctx u:r:init:s0
(二) 配置项说明
dir: 设置缓存文件的根目录。默认目录设置为: /var/cache/fscache。
tag: 指定一个标记到fs缓存,用于区分多个缓存。只有在要使用多个缓存时,才需要这样做。默认值为“cachefiles”。
secctx: 指定LSM安全上下文,内核将执行访问缓存的操作。默认情况下使用cachefilesd 的安全上下文。如果更改目录,则需要使用这些说明来设置新的LSM安全上下文。
brun、bcull、bstop、frun、fcull、fstop:缓存可能偶尔需要剔除以腾出空间。这涉及从缓存中丢弃最近使用的对象。剔除顺序基于数据对象的访问时间。对于不使用的空目录,也会被剔除。这几个配置项可以设置剔除规则。
缓存剔除是根据块的百分比和基础文件系统中可用文件的百分比
brun、frun:如果缓存中的可用空间量和可用文件数高于这两个值,那么就停止剔除。
bcull、fcull:如果缓存中的可用空间量或可用文件数低于这些两个值的任何一个,那么开始剔除。
bstop、fstop:如果缓存中的可用空间量或可用文件数低于这些限值,那么就不再分配新的磁盘空间或文件用于缓存,直到剔除出足够的空间。
这些配置的值必须符合:
0 <= bstop < bcull < brun < 100
0 <= fstop < fcull < frun < 100
mount 示例
在 NFS mount 时增加参数 fsc 就可以让 cache 生效,示例命令如下:
busybox mount -t nfs4 -o fsc,rw,nolock 192.168.0.125:/srv/nfs4 /data/nfs4