Home > Linux, 工具介绍, 调优 > Flashcache新添加驱逐空闲脏页参数

Flashcache新添加驱逐空闲脏页参数

December 10th, 2011 Leave a comment Go to comments

原创文章,转载请注明: 转载自系统技术非业余研究

本文链接地址: Flashcache新添加驱逐空闲脏页参数

我在之前的博文提过Flashcache的cache是以set为单位管理的,每个set默认2M。 当单个set里面的脏页数量超过dirty_thresh_pct的时候,就会启动背景工作队列来把超过设置的脏页回写到后备磁盘去。 这里有别的同学对flashcache设计文档的翻译.

参看dirty_thresh_pct的文档解释:

dev.flashcache..dirty_thresh_pct = 20
Flashcache will attempt to keep the dirty blocks in each set
under this %. A lower dirty threshold increases disk writes,
and reduces block overwrites, but increases the blocks
available for read caching.

Flashcache之所以这样做的目的是当它在处理用户IO请求需要cache块的时候,保证马上可以拿的出来。因为读写的时候,如果需要的cache块不能满足的话,flashcache选择简单的绕过cache机制,直接走uncache io, 同时启动页面回收,一下子收回超过设置部分的页面,对性能有很大的损失。
特别是顺序写的时候,写一圈,再回绕在写的场合,性能特别差,就是这个原因。

那么如何保持一定量的可用cache块就很重要。通常cache数据都有冷热点,而且和时间很大关系。flashcache对冷热的判断是透过LRU类似的算法来判断的,这个是基于使用频度的维度。但是缺乏时间维度的判断。

新版本的flashcache引入了fallow_delay参数来解决这个问题,如果一个脏页超过fallow_delay秒,默认15分钟,都没有重新被访问到,那么数据就会被回写。 回写后,作为候选页面可以被新的cache重新利用。

参看fallow_delay的文档解释:

Sysctls for writeback mode only :
dev.flashcache..fallow_delay = 900
In seconds. Clean dirty blocks that have been “idle” (not
read or written) for fallow_delay seconds. Default is 15
minutes.
Setting this to 0 disables idle cleaning completely.

但是这样也有不理想的地处,加大了回写的概率,相应的加大了刷盘的数量,增加后备慢速磁盘的负担。 于是它引入另外参数fallow_clean_speed控制每次回刷的强度。

dev.flashcache..fallow_clean_speed = 2
The maximum number of “fallow clean” disk writes per set
per second. Defaults to 2.

用户通过配置这二个参数能够更好的根据业务特点微调flashcache,取得性能和回写量的平衡。

祝玩得开心!

Post Footer automatically generated by wp-posturl plugin for wordpress.

  1. starking
    April 17th, 2014 at 10:04 | #1

    LRU是基于时间的,LFU基于频度的

    [Reply]

  1. No trackbacks yet.