linux内核IO模块plug/unplug机制

    PLUG/UNPLUG即蓄流/泄流,蓄流的目的是为了提高bio在elevator queue合并和排序的机会,以提高 IO效率。

    PLUG/UNPLUG对应blk_start_plug()和blk_finish_plug()两个函数,blk_start_plug()很简单,仅仅做了初始化:

plug主要是在blk_queue_bio()里完成,bio先尝试merge,merge try的顺序是先plug list然后elevator queue,因为对于文件里一段连续的数据在磁盘上分配的多个块很可能是相邻或相近的;当bio不能merge时就分配一个request并加入plug list。当plug list里的request超过BLK_MAX_REQUEST_COUNT时会提前进行泄流:

当一次用户读写请求的bio plug完之后,会调用blk_finish_plug()进行unplug:将plug list里的request再次尝试与elevator queue进行merge,不能merge再添加到elevator queue;plug list处理完之后再将elevator queue的request往块设备分发(queue_unplugged())。

当进程因等待某个资源而切换出运行队列时(schedule()或io_schedule()),会提前unplug:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值