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:

BLOCK IO之PLUG/UNPLUG相关推荐

  1. BLOCK层代码分析(8)IO下发之plug/unplug机制

    前面bio bounce过程,bio的切分和合并,request的获取是为IO请求下发做准备工作.当这些准备工作完成后,才进入到真正的IO下发过程.之前在前面章节中介绍过,IO下发基本上有三条路径:经 ...

  2. Block块设备层Plug和Unplug机制

    一. 基本原理 Linux块设备层使用了Plug/Unplug的机制来提升IO吞吐量,基本原理为:当IO请求(一般时将文件数据以BIO的格式提交,以submit_bio函数)提交时,不是直接提交给块设 ...

  3. Linux Kernel 3.10内核源码分析--块设备层request plug/unplug机制

    一.基本原理 Linux块设备层使用了plug/unplug(蓄流/泄流)的机制来提升IO吞吐量.基本原理为:当IO请求提交时,不知直接提交给底层驱动,而是先将其放入一个队列中(相当于水池),待一定时 ...

  4. 块设备层request plug/unplug机制

    转载至博客:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=14528823&id=4778396 一.基本原理 Lin ...

  5. block io生命历程

    作为存储业务的一个重要组成部分,block IO是非易失存储的唯一路径,它的生命历程每个阶段都直接关乎我们手机的性能.功耗.甚至寿命.本文试图通过block IO的产生.调度.下发.返回的4个阶段,阐 ...

  6. block IO层框架分析2

    1. 内核层文件读写的函数调用关系 sys _read vfs_read do_sync_read f_op->aio_read generic_file_aio_read do_generic ...

  7. linux flush 文件,Linux文件系统学习:io的plug过程-blk_flush_plug_list的情况

    在上篇文章中我们看到 if (plug) { if (!request_count) trace_block_plug(q); else { if (request_count >= BLK_M ...

  8. oracle plug/unplug pdb

    alter pluggable database pdb3 unplug into '/u01/app/oracle/plug-pdb/pdb3.pdb'; 将数据文件和描述文件压缩到这个文件 alt ...

  9. Oracle 12c R1 Plug/Unplug 迁移PDB实验(1): 插拔 RAC PDB到 Non-RAC PDB

    实验目标: 将RAC环境的PDB插拔后迁移到非RAC环境 实验环境: 数据库:Oracle 12c R1 操作系统:Oracle Linux 7.3 实验步骤: 1.源端环境准备 为本次实验克隆一个P ...

最新文章

  1. 关于二叉树的层次遍历的花样(c++实现)
  2. sql 子查询(mysql)
  3. 值大于为此列指定的允许精度_电能质量测试精度会受到哪些因素影响?如何解决?...
  4. 第十三期:你所了解的javascript?
  5. oracle 存储过程设置回滚点,(转)oracle 存储过程事宜使用断点回滚 -savepoint
  6. OkHttp透明压缩,收获性能10倍,外加故障一枚
  7. jquery和easui学习总结_jQuery EasyUI总结
  8. 【DevCloud · 敏捷智库】两种你必须了解的常见敏捷估算方法
  9. C#学习体会(一)特性和反射
  10. 智能会议系统(2)---Android 2.3 APIs SIP-based VoIP
  11. 考不上本科就是低智商?用python爬3000条数据狠打脸
  12. 是时候了,我们需要前端架构师
  13. SolidBuilder 2019 64位破解版+安装教程
  14. 2021-2027全球与中国兽医临床试验业务市场现状及未来发展趋势
  15. 利用Python实现某度贴吧签到脚本「云函数模拟客户端」
  16. 教你添加百度分享按钮
  17. 使用itextpdf实现横板PDF文件与竖版PDF文件的相互转换
  18. 软件开发技术联盟 - 图书系列资源
  19. 【清华集训2014】玛里苟斯(数学 线性基)
  20. 12 DB操作 Hibernate Panache

热门文章

  1. spring mvc 中Timestamp 日期的转换
  2. CocosCreator零基础制作游戏《极限跳跃》
  3. Vue事件修饰符的理解
  4. 文章:LIME:Why Should I Trust You?
  5. 66破解网整站源码/66破解网带数据源码/Thinkphp+layui版
  6. 已有Win10基础上安装Ubuntu双系统(含BIOS操作)
  7. linux常用错误assemble,Assemble
  8. tmall.product.spec.get( 根据产品规格的Id号获取当个的规格信息 )
  9. 信息可视化的经典案例:伦敦地铁线路图
  10. CVPR 2018摘要:第五部分​