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--;
     

  • 相关阅读:
    #Laravel 笔记# 多语言化 App::setLocale() 持久化。
    thinkphp 3.2 发送邮件(Phpmailer)
    深度学习的注意力机制
    图像检索引擎vearch安装与测试使用
    word2vector
    GPU环境搭建
    ImportError: libSM.so.6: cannot open shared object file: No such file or dir
    shell中&&和||的用法
    Linux 远程连接sftp与ftp
    mysql-connector-java各版本及与mysql、JDK版本的对应
  • 原文地址:https://www.cnblogs.com/honpey/p/5789588.html
Copyright © 2011-2022 走看看