关于Bcache维护者李勇直播的一些要点总结

作者介绍:

李勇:现就职于SUSE LABS 存储组,是长期活跃的Linux Kernel 的开发者,是Linux Kernel 主线的bcache 子系统的维护者,先后就职于联想、阿里并从事内核和存储相关研发工作bch什么币

傅治宇:现在就职于联想,主要从事Ceph 以及分布式存储相关架构与研发工作bch什么币

1.bcache是什么bch什么币

bcache是linux内核块设备层的一个软件驱动bch什么币。其作用是使用高速的存储设备为传统的机械硬盘或者低速设备做的缓存,主要缓存热数据。

2.bcache与linux内核的关系

bcache首次合并到 linux内核版本是 3.10内核bch什么币。其作者是 Kent Overstreet,其同时也编写了 bcachefs。 bcache在 linux内核 5.4以以后趋于稳定, linux内核 5.19也修改部分问题。推荐使用 bcache使用 linux内核 5.19。

3.bcache的角色

(1)Bcache 设备: 应用程序直接访问读写的虚拟块设备

(2)Cache 设备: 存储热数据的高速设备

(3)Backing 设备: 传统机械硬盘或低速设备

关于Bcache维护者李勇直播的一些要点总结

来自: 哔哩哔哩的Bcache子系统概况:基本功能、设计原理和数据结构

4.bcache的缓存模式

(1)Writeback(回写策略): 此策略模式下,则所有的数据将先写入缓存盘,然后等待系统将数据回写到后端数据盘中bch什么币

展开全文

(2)Writethrough(写通策略): 此策略模式下bch什么币,数据同时写入缓存盘和后端数据盘,适用于读多写少的场景

(3)Writearound(旁路策略): 选择此策略,数据将直接写入后端磁盘bch什么币

5.bcache的参数

bcache的默认参数配置,能够覆盖 90%的场景即 bcache开箱即用,相关参数无需进行优化bch什么币

6.bcache的数据结构

(1) 数据索引: 用于记录哪些数据被缓存哪些数据没有被缓存,其数据结构采用B+树bch什么币。其大小是最小是512字节。对于的代码级数据结构叫bkey,该结构存在内存中。bkey的插入与删除是写入journal,而非直接持久化到高速缓存设备上面。

(2) 使用journal 用于进行掉电保护数据一致性bch什么币。journal不支持回滚。journal在回写的时候,出现空间不足,会造成死锁。此问题在linux5.19内核存在,linux内核5.19修改。

7.bcache缓存写方式

bcache采用追加写的方式写入高速设备bch什么币,提高半导体存储介质寿命

8.bcache的脏数据的定义

bcache脏数据是指缓存到 Cache设备上面bch什么币,没有写入 Backing设备的数据

9.引用bcache的IO结束特征

一个IO结束是 bkey写入 journal即结束bch什么币

10.bcache垃圾回收

(1) 垃圾回收触发机制:写入量是缓存总容量的1/16 ,就会触发一次垃圾回收bch什么币。此处的缓存认为应该cache 设备。

(2) 垃圾回收扫描整个B+ 树的b key 所引用的存储桶来进行的bch什么币

(3) 垃圾回收主要是回收bkey

(4) 回收的btree bucket会被放到free list

(5) 脏数据被写到backing 设备后bch什么币,才能被垃圾回收回收掉

11.脏数据回写

(1) 脏数据回写由回写线程负责

(2) 回写线程的优先级随着脏数据的数量增多,优先级也会越来越高bch什么币。会影响业务I O,使业务IO 变慢,为回写线程让出带宽,保证回写线程先完成回写,否则会导致c ache 设备满了,垃圾回收无法回收到空闲空间,最终会导致b cache 出现死锁问题。

(3) 回写带宽是动态调整的,主要通过软件模拟的PID( 比例微分积分)控制器,动态根据写入脏数据的量和新产生的脏数据的量作为P ID 控制器的输入来定义回写带宽bch什么币。主要原理是通过控制回写线程的时间间隔来实现的。回写线程不休眠,一直工作,被认为回写带宽是最高的。

(4) 回写线程回写会对B+树加锁

评论