加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

writeback机制源码分析

发布时间:2016-09-19 18:57:32 所属栏目:Linux 来源:站长网
导读:writeback相关数据结构 与writeback相关的数据结构主要有: 1,backing_dev_info,该数据结构描述了backing_dev的所有信息,通常块设备的request queue中会包含
副标题[/!--empirenews.page--]

writeback相关数据结构

与writeback相关的数据结构主要有:

1,backing_dev_info,该数据结构描述了backing_dev的所有信息,通常块设备的request queue中会包含backing_dev对象。

2,bdi_writeback,该数据结构封装了writeback的内核线程以及需要操作的inode队列。

3,wb_writeback_work,该数据结构封装了writeback的工作任务。

各数据结构之间的关系如下图所示:

writeback机制源码分析

下面对各个数据结构做简要介绍。

bdi information

bdi对象在块设备添加的时候需要注册到系统的bdi队列中。对于ext3而言,在mount的时候需要将底层块设备的bdi对象联系到ext3 root_inode中。bdi对象数据结构定义如下:

 

struct backing_dev_info {  
    struct list_head bdi_list;  
    unsigned long ra_pages; /* max readahead in PAGE_CACHE_SIZE units */
    unsigned long state;    /* Always use atomic bitops on this */
    unsigned int capabilities; /* Device capabilities */
    congested_fn *congested_fn; /* Function pointer if device is md/dm */
    void *congested_data;   /* Pointer to aux data for congested func */
     
    char *name;  
     
    struct percpu_counter bdi_stat[NR_BDI_STAT_ITEMS];  
     
    unsigned long bw_time_stamp;    /* last time write bw is updated */
    unsigned long dirtied_stamp;  
    unsigned long written_stamp;    /* pages written at bw_time_stamp */
    unsigned long write_bandwidth;  /* the estimated write bandwidth */
    unsigned long avg_write_bandwidth; /* further smoothed write bw */
     
    /*  
     * The base dirty throttle rate, re-calculated on every 200ms.  
     * All the bdi tasks' dirty rate will be curbed under it.  
     * @dirty_ratelimit tracks the estimated @balanced_dirty_ratelimit  
     * in small steps and is much more smooth/stable than the latter.  
     */
    unsigned long dirty_ratelimit;  
    unsigned long balanced_dirty_ratelimit;  
     
    struct prop_local_percpu completions;  
    int dirty_exceeded;  
     
    unsigned int min_ratio;  
    unsigned int max_ratio, max_prop_frac;  
     
    struct bdi_writeback wb;  /* default writeback info for this bdi,writeback对象 */
    spinlock_t wb_lock;   /* protects work_list */
     
    /* 任务链表 */
    struct list_head work_list;  
     
    struct device *dev;  
    /* 在laptop模式下应用的定时器 */
    struct timer_list laptop_mode_wb_timer;  
     
#ifdef CONFIG_DEBUG_FS  
    struct dentry *debug_dir;  
    struct dentry *debug_stats;  
#endif  
};

在bdi数据结构中定义了一个writeback对象,该对象是对writeback内核线程的描述,并且封装了需要处理的inode队列。在bdi数据结构中有一条work_list,该work队列维护了writeback内核线程需要处理的任务。如果该队列上没有work可以处理,那么writeback内核线程将会睡眠等待。

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读