IO的中断返回也是相当让人激动的一件事情:

28470  1)               |        handle_irq() {
 28471  1)   0.237 us    |          irq_to_desc();
 28472  1)               |          handle_edge_irq() {
 28473  1)   0.060 us    |            _raw_spin_lock();
 28474  1)               |            ack_apic_edge() {
 28475  1)   0.051 us    |              irq_complete_move();
 28476  1)   0.044 us    |              irq_move_irq();
 28477  1)   1.288 us    |            }
 28478  1)               |            handle_irq_event() {
 28479  1)   0.045 us    |              _raw_spin_unlock();
 28480  1)               |              handle_irq_event_percpu() {
 28481  1)               |                ahci_interrupt [libahci]() {
 28482  1)   0.046 us    |                  _raw_spin_lock();
 28483  1)               |                  ahci_handle_port_interrupt [libahci]() {
 28484  1)               |                    ata_qc_complete_multiple() {        // qc = ata_qc_from_tag(ap, tag); (会得到最终的command)
 28485  1)               |                      ata_qc_complete() {
 28486  1)               |                        __ata_qc_complete() {
 28487  1)   0.321 us    |                          ata_sg_clean();
 28488  1)               |                          ata_scsi_qc_complete() {
 28489  1)               |                            scsi_done() {
 28490  1)               |                              blk_complete_request() {
 28491  1)               |                                __blk_complete_request() {
 28492  1)   0.046 us    |                                  cpus_share_cache();
 28493  1)   0.588 us    |                                }
 28494  1)   0.961 us    |                              }
 28495  1)   1.342 us    |                            }
 28496  1)   0.051 us    |                            ata_qc_free();
 28497  1)   2.146 us    |                          }
 28498  1)   3.

上面是我lenovo笔记本上ATA硬盘中断返回的代码, 其中断处理函数是ata_qc_complete,

发现, 环环相扣的结构体,从中断的scsi指令,我们能追溯到block层封装的request, 然后把这个request放到软中断中去了, 然后该赢中断平安返回,

下面就是软中断处理主场了!

28512  1)               |        irq_exit() {
 28513  1)               |          __do_softirq() {
 28514  1)   0.044 us    |            msecs_to_jiffies();
 28515  1)               |            blk_done_softirq() {
 28516  1)               |              scsi_softirq_done() {
 28517  1)               |                scsi_decide_disposition() {
 28518  1)   0.125 us    |                  scsi_handle_queue_ramp_up();
 28519  1)   0.563 us    |                }
 28520  1)   0.070 us    |                scsi_log_completion();
 28521  1)               |                scsi_finish_command() {
 28522  1)               |                  scsi_device_unbusy() {
 28523  1)   0.044 us    |                    _raw_spin_lock_irqsave();
 28524  1)   0.042 us    |                    _raw_spin_unlock();
 28525  1)   0.049 us    |                    _raw_spin_lock();
 28526  1)   0.059 us    |                    _raw_spin_unlock_irqrestore();
 28527  1)   1.474 us    |                  }
 28528  1)   0.086 us    |                  sd_done();
 28529  1)               |                  scsi_io_completion() {
 28530  1)               |                    blk_end_request() {
 28531  1)               |                      blk_end_bidi_request() {
 28532  1)               |                        blk_update_bidi_request() {
 28533  1)               |                          blk_update_request() {
 28534  1)   0.154 us    |                            blk_account_io_completion();
 28535  1)   0.132 us    |                            bio_advance();
 28536  1)               |                            bio_endio() {

IO调度器(二) IO的中断返回的更多相关文章

  1. IO调度器原理介绍

    IO调度器(IO Scheduler)是操作系统用来决定块设备上IO操作提交顺序的方法.存在的目的有两个,一是提高IO吞吐量,二是降低IO响应时间.然而IO吞吐量和IO响应时间往往是矛盾的,为了尽量平 ...

  2. Linux IO调度器相关算法介绍(转)

    IO调度器(IO Scheduler)是操作系统用来决定块设备上IO操作提交顺序的方法.存在的目的有两个,一是提高IO吞吐量,二是降低IO响应时间.然而IO吞吐量和IO响应时间往往是矛盾的,为了尽量平 ...

  3. Linux IO Scheduler(Linux IO 调度器)

    每个块设备或者块设备的分区,都对应有自身的请求队列(request_queue),而每个请求队列都可以选择一个I/O调度器来协调所递交的request.I/O调度器的基本目的是将请求按照它们对应在块设 ...

  4. Linux IO 调度器

    Linux IO Scheduler(Linux IO 调度器) 每个块设备或者块设备的分区,都对应有自身的请求队列(request_queue),而每个请求队列都可以选择一个I/O调度器来协调所递交 ...

  5. Linux IO Scheduler(Linux IO 调度器)【转】

    每个块设备或者块设备的分区,都对应有自身的请求队列(request_queue),而每个请求队列都可以选择一个I/O调度器来协调所递交的request.I/O调度器的基本目的是将请求按照它们对应在块设 ...

  6. 编写简单的ramdisk(选择IO调度器)

    前言 目前linux中包含anticipatory.cfq.deadline和noop这4个I/O调度器.2.6.18之前的linux默认使用anticipatory,而之后的默认使用cfq.我们在前 ...

  7. IO调度器

    由于对blktrace的好奇,来到了block层.通过阅读block层的代码,自己的几个错误认知被纠正,比如 一) 同步操作时,进程是在驱动中睡觉真实情况是:进程在文件系统睡觉 二) 对同一个数据块的 ...

  8. 如何选择IO调度器

    概述 由于对multi-quque的IO调度算法不太熟悉,为了避免误人子弟,本文暂时只会介绍如何选择single-queue的IO调度算法.等将来对multi-queue有充分认识后再补充. 如果不清 ...

  9. Linux I/O 调度器

    每个块设备或者块设备的分区,都对应有自身的请求队列,  而每个请求队列都可以选择一个I/O调度器来协调所递交的.I/O调度器的基本目的是将请求按照它们对应在块设备上的扇区号进行排列,以减少磁头的移动, ...

随机推荐

  1. sdk的目录结构及其功能

    sdk的目录结构及其功能 add-ons: 这里面保存着附加库,比如GoogleMaps,当然你如果安装OphoneSDK,这里也会有一些类库在里面. build-tools: 各个版本的sdk编译工 ...

  2. 2.3 CMMI2级——项目跟踪和控制(Project Monitoring and Control)

    计划不是用来看的,是用来执行的.PP讲述了如何做计划,PMC讲述的就是如何跟踪计划的执行并在实际情况偏离计划时采取纠正行动. 我们先看看SG1,SG1讲述的是如何根据计划来跟踪计划的执行问题. SG1 ...

  3. SSH新学

    流程:model-->dao-->service-->impService-->action 如果只是操作单个的一个表,比如user表,则都写到user的流程中 如果要操作俩个 ...

  4. FATAL ERROR: Could not find ./bin/my_print_defaults的解决办法

    对mysql数据库初始化过程中,会有如下报错信息: 1 2 3 4 5 6 7 [root@localhost scripts]# ./mysql_install_db --user=mysql FA ...

  5. 简析一下SQL Server里面Fast_Forword 和 SRROLL 的区别

    这次简单说说游标的分类. 先看看通常游标的语法 DECLARE cursor_name CURSOR [ LOCAL :局部游标,仅在当前会话有效 | GLOBAL : 全局游标,全局有效,可以 ] ...

  6. python极客学院爬虫V1

    定向爬取极客学院视频,原本只有年费VIP只能下载,经过分析,只要找个免费体验VIP即可爬取所有视频 涉及的基本技术:python xpath 正则 com+ 通过python调用迅雷从组件,实现自动创 ...

  7. Java api 入门教程 之 JAVA的文件操作

    I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程的一个基本 ...

  8. A coroutine example: Streaming XML parsing using xml_parser

    <?php error_reporting(E_ALL); /* Data can be send to coroutines using `$coroutine->send($data) ...

  9. Linux 解压缩命令

    gzip 文件 压缩文件 gzip -d 文件 解压文件 zcat  查看以结尾为zip 文件 bzip2 压缩文件 bzip2 -d 文件 解压文件 bzcat 查看以结尾为zip2 文件 zip ...

  10. IDEA使用(1)intellIJ idea 配置 svn

    以前开发工具一直用的是Eclipse/MyEclipse,虽然早就听说过Idea而且也尝试用过几次, 说实话一开始使用idea真是很不习惯,不只是快捷键不同:比如项目和模块.服务器(如Tomcat)配 ...