Bcache
Bcache简介
Bcache具有以下特征:
- 一个缓存设备可以作为多个设备的缓存,并且可以在设备运行时动态添加和删除缓存。
- 可以从非正常状态关机中恢复,只有当缓存写入到后端设备才会确认写完成。
- 正确处理写阻塞和刷缓存。
- 支持writethrough、writeback和writearound等写缓存模式。
- 检测并避开顺序IO(可配置阈值,或关闭该选项)。
- 当检测到SSD延迟超过配置边界值,减少到SSD流量(当一个SSD作为多个磁盘缓存时使用)。
- 缓存不命中时预读(默认关闭)。
- 高性能的writeback实现:脏数据通过排序后再刷到磁盘中。如果设置了writeback_percent值,后台的writeback进程利用PD控制器根据脏数据比例平滑地处理脏数据。
- 使用高效率的B+树,硬件设备足够快速的情况下,bcache随机读可以达到1M IOPS。
- 可在生产中稳定的使用。
Bcache的缓存策略
Bcache支持三种缓存策略:writeback(回写策略)、writethrough(写通策略)、writearound(旁路策略)。默认使用writethrough,缓存策略可动态修改。
- writeback:此策略模式下,则所有的数据将先写入缓存盘,然后等待系统将数据回写到后端数据盘中,此策略默认关闭。
- writethrough:此策略模式下,数据同时写入缓存盘和后端数据盘,适用于读多写少的场景,此策略默认打开。
- writearound:选择此策略,数据将直接写入后端磁盘。
常用优化方法
- 设置writeback提高写性能。
echo writeback > /sys/block/bcache0/bcache/cache_mode
- 允许缓存顺序I/O或者顺序I/O阈值。
- 支持缓存顺序IO。
echo 0 > /sys/block/bcache0/bcache/sequential_cutoff
- 调整顺序IO阈值。
echo 4M > /sys/block/bcache0/bcache/sequential_cutoff
上述设置,当顺序IO缓存量超过该阈值后,相应的IO将直接写到后端数据盘上。
- 关闭拥塞控制项。
echo 0 > /sys/fs/bcache/<cache set uuid>/congested_read_threshold_us echo 0 > /sys/fs/bcache/<cache set uuid>/congested_write_threshold_us congested_read_threshold_us #默认为2000us; congested_write_threshold_us #默认为20000us;
更多信息详见bcache主页及手册:
https://bcache.evilpiepirate.org/
https://evilpiepirate.org/git/linux-bcache.git/tree/Documentation/bcache.txt
父主题: 公共特性