知识卡片

bcache用bucket管理SSD缓存

专业/工作 · 551.k

内容

bcache用固态硬盘做硬盘驱动器的缓存层,把缓存设备按固定大小(默认512KB,建议对齐SSD擦除单元)划分成一个个bucket,数据和元数据都以bucket为单位写入,而且采用写时复制——覆盖写不会原地修改,而是写到新的bucket,旧数据留在原bucket里形成”空洞”,需要异步垃圾回收线程识别并合并含较多无效数据的bucket。每个bucket有一个优先级编号实现LRU式替换,命中会提升编号,所有编号又会周期性衰减,让长期不被访问的bucket优先被回收。发散:bucket+写时复制+异步GC这套组合和日志结构存储(LSM树、日志结构文件系统)的思路高度相似——都是”只追加写、靠后台压实清理旧版本”,用写放大换取写路径的简单和顺序化。

参考来源

《Linux开源存储全栈详解从Ceph到容器存储》第3章《Linux存储栈》