zoukankan      html  css  js  c++  java
  • 中断MSI INTA

    转载https://blog.csdn.net/huangkangying/article/details/11178425

    MSI VS INTx(Pin-based interrupt)

            MSI的全称是Message Signaled Interrupt.MSI出现在PCI 2.2和PCIe的规范中,是一种内部中断信号机制。传统的中断都有专门的中断pin,当中断信号产生是,中断PIN电平产生变化(一般是拉低)。INTx就是传统的外部中断触发机制,它使用专门的通道来产生控制信息。然而PCIe并没有多根独立的中断PIN,它使用特殊的信号来模拟中断PIN的置位和复位。MSI允许设备向一段指定的MMIO地址空间写一小段数据,然后chipset以此产生相应的中断给CPU.

    对MSI的误解

            通常有一个对MSI的误解:有人认为device可以直接向cpu发送数据作为中断的一部分。这得看CPU。如果使用的是Client CPU而且PCIe总线经过南桥,这部分写到MMIO的数据是给chipset的,chipset读取这段数据来决定说发送什么样的中断给CPU。Device是没有办法直接给interrupt handler传递更多的信息的。

      但对于Intel的至强sever处理器,处理器中有IIO(Integrated I/O Controller), 如果PCIe的device是直接接在cpu的root port上的,那么MSI会被直接发送到cpu的IIO, IIO又会将MSI转给UBox, 由UBox把MSI发送给目标CPU。

    MSI Capability结构

    MSI Capability一共有四种结构。可以通过读取MSI Capability结构中的Message Control字段来判断当前是四种结构中的哪一种。
     
    MSI结构中的Message Address字段代表的是目的地址,Message Data就是中断时要发送的Data.

     

    相对于PIN-based/out-ofband中断, MSI的好处

    虽然MSI相对比较复杂一点,但它是有不少好处的:

    1.  从电气机械的角度,MSI减少了对interrupt pin个数的需求。从而使得连接头变得更简单,更便宜。

    2.  MSI增加了中断号的数量。传统的PCI中断只允许每个device拥有4个中断,并且由于这些中断都是共享的,大部分device都只有一个中断。MSI允许每个device有1,2,4,8,16或者是32个中断。

    3.  使用MSI也有一点点性能上的优势。使用传统的PIN中断,当中断到来时,程序去读内存获取数据时有可能会产生冲突。其原因device的数据主要通过DMA来传输,而在PIN中断到达时,DMA传输还未能完成,此时cpu不能获取到数据,只能空转。而MSI不会存在这个问题,因为MSI都是发生在DMA传输完成之后的。

    SCI VS SMI

    SCI:System Control Interrupt, 系统控制中断。专门用于ACPI电源管理的一个IRQ,需要OS支持。

    SMI:System Management Interrupt, 系统管理中断,使用系统进入SMM的特殊中断。

    两者区别:

    SMI是CPU级别的,ACPI和非ACPI模式下都可以使用,而SCI是OS级别的,只有在ACPI support的OS中才能见到。比如说DOS下触发的中断肯定不是SCI,但有可能是SMI。

    两者联系:

    两者可以用于电源管理,但SMI不限于电源管理。

    触发过程:

    SMI:  (硬件方式)

    SMI Pinassert -> CPU SMM mode -> BIOS SMI handler

    SMI:(软件方式)

    WriteIO(B2h) -> CPU SMM mode->BIOS SMI handler

    SCI:

    SCI Pinassert->IDT->OS ACPI driver->ASL code(Q Evnent)->?

  • 相关阅读:
    分布式文件系统 ~MogileFS~
    使用HAproxy如何实现web站点的动静分离
    MySQL 服务器变量 数据操作DML-视图
    MySQL 查询缓存
    NGINX 如何防盗链
    Apache 如何反向代理tomcat并且实现Session保持
    Linux 内核编译步骤及配置详解
    NGINX如何反向代理Tomcat并且实现Session保持
    LogStash日志分析系统
    bash编程之 ~制作Mini Linux系统~
  • 原文地址:https://www.cnblogs.com/xiaoxuesheng993/p/9123424.html
Copyright © 2011-2022 走看看