zoukankan      html  css  js  c++  java
  • IO调度器

    由于对blktrace的好奇,来到了block层.通过阅读block层的代码,自己的几个错误认知被纠正,比如

    一) 同步操作时,进程是在驱动中睡觉真实情况是:进程在文件系统睡觉

    二) 对同一个数据块的读写是在block控制

    真实情况是:对同一数据块的是在文件系统中控制.

    两个周来,对文件系统肃然起敬,文件系统是一个你要花至少一年,才只能读懂其50%的模块,甚至,要想领悟文件系统的精髓,你要读page-cache,要读block层,甚至要理解存储芯片的读/写/擦除特性,真是a long long journey!

    前面对page-cache做了一个大致的分析,基本能够理清其中的脉络,已经达到了效果,所以想往下走,看看block层,block层最重要的是IO调度器,看下IO调度器是怎么回事.

    下面几篇文章就分析deadline-ioscheduler.

     31 struct bvec_iter {
     32     sector_t        bi_sector;  /* device address in 512 byte  sectors */ 下发到设备的首地址
     34     unsigned int        bi_size;    /* residual I/O count */ 下发的数量
     36     unsigned int        bi_idx;     /* current index into bvl_vec */
     38     unsigned int            bi_bvec_done;   /* number of bytes completed in current bvec */
     40 };  

    bio相关函数积累:

    bio_end_sector(bio)

    bio_data_dir(bio)

    bool blk_rq_merge_ok(struct request *rq, struct bio *bio)
    blk_rq_merge_ok 对bio是否能合入rq做了最严格的过滤,

    从block层取出一个request之后, 就开始

     323     q->request_fn_active++;
     324     q->request_fn(q); /* scsi_request_fn */ 这里的request_fn中调用的是scsi_request_fn!
     325     q->request_fn_active--;
     

  • 相关阅读:
    L1-047 装睡 (10分)
    QT 文件的读写,将txt中的数据存储到QVector
    C++Primer第五版 第十二章 动态内存
    C++Primer第五版 第十一章 关联容器
    从《上瘾》到 《不被干扰》
    MySQL模糊查询用法(正则、通配符、内置函数等)
    MySQL-SQL优化总结
    MySQL中特别实用的几种SQL语句
    public、private、protected 和 default
    DO,DTO,VO,POJO详解
  • 原文地址:https://www.cnblogs.com/honpey/p/5789588.html
Copyright © 2011-2022 走看看