searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

bcache读写bucket分离优化

2024-06-21 09:38:27
94
0

优化原理

bcache盘在writeback缓存模式下,bucket中既缓存未命中缓存的读数据,又缓存脏数据,在读多写少的场景下,当一个bucket被填满时,可能大部分都是干净的读数据,只有少量的脏数据,干净bucket消耗较快,容易出现写性能降级问题。

为了解决这个问题,我们对bcache的bucket分配方法进行了优化。如下图所示,改进后的分配方法新增加了一个回写活跃bucket查询链表,当有新数据需要缓存时,首先判断是否writeback操作,若是writeback操作则从回写活跃bucket链表中查找符合条件的bucket。若是其他不会产生脏数据的操作(如同步写、未命中缓存的读操作等),则在原来的活跃bucket链表中查找bucket。

效果验证

为了验证读写分离优化的效果,采用4K混合随机读写(70%读 30%写)进行对比测试。为了缩短测试时间每个bcache设备只分配了2GB缓存。

应用读写分离优化之后缓存空间的消耗速度大幅度降低,在同样写入215MiB数据的情况下,未启用优化的只剩下58%的干净缓存,优化后剩余86%的干净缓存。

测试过程中,两块混合盘的读写IOPS以及时延如下所示,说明该优化对性能无影响。

 

0条评论
0 / 1000
万****聪
2文章数
0粉丝数
万****聪
2 文章 | 0 粉丝
万****聪
2文章数
0粉丝数
万****聪
2 文章 | 0 粉丝
原创

bcache读写bucket分离优化

2024-06-21 09:38:27
94
0

优化原理

bcache盘在writeback缓存模式下,bucket中既缓存未命中缓存的读数据,又缓存脏数据,在读多写少的场景下,当一个bucket被填满时,可能大部分都是干净的读数据,只有少量的脏数据,干净bucket消耗较快,容易出现写性能降级问题。

为了解决这个问题,我们对bcache的bucket分配方法进行了优化。如下图所示,改进后的分配方法新增加了一个回写活跃bucket查询链表,当有新数据需要缓存时,首先判断是否writeback操作,若是writeback操作则从回写活跃bucket链表中查找符合条件的bucket。若是其他不会产生脏数据的操作(如同步写、未命中缓存的读操作等),则在原来的活跃bucket链表中查找bucket。

效果验证

为了验证读写分离优化的效果,采用4K混合随机读写(70%读 30%写)进行对比测试。为了缩短测试时间每个bcache设备只分配了2GB缓存。

应用读写分离优化之后缓存空间的消耗速度大幅度降低,在同样写入215MiB数据的情况下,未启用优化的只剩下58%的干净缓存,优化后剩余86%的干净缓存。

测试过程中,两块混合盘的读写IOPS以及时延如下所示,说明该优化对性能无影响。

 

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0