Linux内核中负责回写脏页的线程

Linux内核的flusher线程负责回写脏页,以"flush-设备名"命名。在BDI模块初始化时创建"[sync_supers]"和"[bdi_default]"线程。"[bdi_default]"线程根据需要为每个bdi设备创建flusher线程,如"[flush-8:64]",并调用bdi_writeback_thread()周期性回写脏页。该周期受dirty_writeback_interval控制,可通过sysctl修改。sync()调用会唤醒flusher线程进行全局回写。相关代码位于mm/backing-dev.c和fs/fs-writeback.c。
摘要由CSDN通过智能技术生成

内核版本 3.0 和 3.4.35 (不同内核版本的回写机制不同哦~)

Linux内核里负责回写脏页的线程称为flusher线程,它们以“flush-”+“设备名”来命名,例如”[flush-8:64]”(这里设备名是指用设备号拼接的字符串)。

BDI(即backing device info)模块初始化(default_bdi_init())时会创建”[sync_supers]”和”[bdi_default]”两个线程。其中,“[sync_supers]”线程用来周期性(间隔同flusher线程)地同步系统中所有的superblocks(遍历全局super_blocks链表)。“[bdi_default]”线程则用来在必要时创建、启动和停止flusher线程。

系统中每新增一个bdi设备(例如硬盘)就会通过bdi_register()注册到全局的bdi_list链表中,每个bdi设备都会有自己的flusher线程,在某个设备需要回写脏页时,bdi_default线程就会为其创建”[flush-devname]”线程(bdi_forker_thread())并运行,如”[flush-8:64]”。flusher线程的处理函数为bdi_writeback_thread(),负责周期性地回写脏页,实际回写操作由wb_do_writeback()函数完成(其第二个参数为1会等IO完成才返回,为0则立即返回)。

flusher线程的回写的周期间

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值