Bcache块缓存优化记录

由 夏日冰菓 发布

Bcache块缓存使用方式

bcache

试用Bcache半个多月体验来说还是体会不出带来的优势,大多数没用进行读写操作的情况下,查看Bcache缓存量的时候显示是0,也是符合常理,16G的SSD并不大,但是每当看到缓存量是0的时候感觉似乎有多太过于充裕了,是否能把多余的空间来优化使用率,以提高读写性能?默认来说,Bcache只做了写入缓存(写入SSD),写结束之后就进行写入HHD操作,并不会缓存所有内容,所有的读操作直接在HHD进行。不对但是我更希望Bcache能在对写操作进行缓存的同时也兼备读缓存,而不应该是直接在HHD中读。查阅大部分资料后需要做些调整,以达到完美状态。

首先Bcache的cache_mode是writeround,需要改成改成 writeback,提高写入性能

echo writeback > /sys/block/bcache0/bcache/cache_mode

其次在默认情况下,bcache不会缓存所有内容,它会尝试跳过顺序的IO,这里设置为0来缓存所有内容

echo 0 > /sys/block/bcache0/bcache/sequential_cutoff

如果希望Bcache对连续IO有写入有要求,可以将此处设置成需要的数值

调整 backing 设备的连续 IO 阈值,表示 bcache0 设备的连续 IO 大于 4MB 时,大于 4MB 的部分不会走 SSD 设备,也不会缓存到 ssd,而是直接读写 backing 设备。(默认设置是:4M)

echo 4M > /sys/block/bcache0/bcache/sequential_cutoff

关闭Bcache的IO跟踪,减少跟踪的开销

Bcache会跟踪每个IO,如果IO的读写时间超过阈值,直接走Cache设备,如果你的SSD足够强大,可以不跟踪,减少跟踪的开销。

echo 0 > /sys/fs/bcache/<cache set uuid>/congested_read_threshold_us
echo 0 > /sys/fs/bcache/<cache set uuid>/congested_write_threshold_us

关闭旁路的另一个好处是,所有的离散读写都会经过cache设备,从而不会导致cache missing。

默认情况下当读请求超过2ms,写请求超过20ms时,旁路cache设备。

The default is 2000 us (2 milliseconds) for reads, and 20000 for writes

设置writeback_rate_p_term_inverse
writeback_rate_p_term_inverse:这条参数暂时还没搞懂,但是加上去之后可以优化二次读写效率,等搞懂了之后在补充详细说明

echo 180 > /sys/class/block/bcache0/bcache/writeback_rate_p_term_inverse

仅有一条评论

  1. 寻千与千寻
    寻千与千寻 · 2023-06-20 11:25

    这个能用在编译AOSP源码上吗?能提高编译的速度吗?

发表评论