enhance io参数设置
一、配置方法:
可以利用sysctl -w或者编辑/etc/sysctl.conf进行配置,配置格式:dev.enhanceio.your_cachename.autoclean_thresholdf,函数eio_sysctl_register_common()针对每个值注册了一个回调函数,通过这些回调函数来修改dmc->sysctl_active.相应参数。
二、参数含义解释:
以cache名字为my_cache为例
dev.enhanceio.my_cache.autoclean_threshold = 1
// 0表示关闭autoclean,否则当nr_ios<=autoclean_threshold才可以进行autoclean,适用于time_based场景
dev.enhanceio.my_cache.control = 0
/*在函数 eio_control_sysctl 根据control的值不同执行相应的操作,其可取如下值
#define CACHE_CONTROL_FLAG_MAX 7
#define CACHE_VERBOSE_OFF 0
#define CACHE_VERBOSE_ON 1
#define CACHE_WRITEBACK_ON 2 /* register write back variables */
#define CACHE_WRITEBACK_OFF 3
#define CACHE_INVALIDATE_ON 4 /* register invalidate variables */
#define CACHE_INVALIDATE_OFF 5
#define CACHE_FAST_REMOVE_ON 6 /* do not write MD when destroying cache */
#define CACHE_FAST_REMOVE_OFF 7
*/
dev.enhanceio.my_cache.do_clean = 0 // clean all cache
dev.enhanceio.my_cache.zero_stats = 0 // 是否清空eio_stats,0不清空,1清空,eio_stats.cached_blocks从不清空
//以下数值为百分比
//整个cache的百分比,high必须大于low,否则不会将set放入clean队列
dev.enhanceio.my_cache.dirty_high_threshold = 100
//真正会清理的个数是nr_dirty - dirty_low_threshold*size/100
dev.enhanceio.my_cache.dirty_low_threshold = 90
//单个set的百分比nr_dirty >= dirty_set_high_threshold*assoc/100
dev.enhanceio.my_cache.dirty_set_high_threshold = 100
//一个set中最多clean的个数cache_sets[set].nr_dirty - dirty_set_low_threshold * dmc->assoc) / 100)
dev.enhanceio.my_cache.dirty_set_low_threshold = 90
// 用于限制enhanceio在运行过程中可使用的最大内存,申请内存前eio_mem_available()会判断是否足够,默认值为75
dev.enhanceio.my_cache.mem_limit_pct = 90
// 清理dirty cache的间隔,用于LRU算法,单位应该是秒,但是不明白为什么会有“time_based_clean_interval * 60”
dev.enhanceio.my_cache.time_based_clean_interval = 1
三、代码中初始化的默认值
eio_cache_create()
{
……
/* Initialize persistent thresholds */
dmc->sysctl_active.dirty_high_threshold = DIRTY_HIGH_THRESH_DEF;//30
dmc->sysctl_active.dirty_low_threshold = DIRTY_LOW_THRESH_DEF;//10
dmc->sysctl_active.dirty_set_high_threshold = DIRTY_SET_HIGH_THRESH_DEF;//100
dmc->sysctl_active.dirty_set_low_threshold = DIRTY_SET_LOW_THRESH_DEF;//30
dmc->sysctl_active.autoclean_threshold = AUTOCLEAN_THRESH_DEF;//128
dmc->sysctl_active.time_based_clean_interval =
TIME_BASED_CLEAN_INTERVAL_DEF(dmc);
……
}
原文:http://blog.csdn.net/wei_gw2012/article/details/79221278