MSI-X(三)
- MSI和MSI-X对比
从INTx过渡到MSI,可以说是完全两套天壤之别的中断上报架构。一个是带外,一个是带内。而MSI-X则是以MSI为基础发展起来的,很多特性很类似。MSI-X某种程度上可以看做的MSI的一个超集。它和MSI一样,可以生成Memory Write事务,来向中断控制器报告中断。
但是,MSI-X定义了一套新的capability structure,并且在Memory空间存储MSI-X中断地址表,可以处理更多的中断,也更灵活,在软件处理上也无法兼容MSI。
下面简单列表对比一下两者的差异:
对比项 | MSI | MSI-X |
Message Address | 存放在MSI相关配置空间 | 存放在BAR空间MSI-X table structure |
Message Data | 存放在MSI相关配置空间 | 存放在BAR空间MSI-X table structure |
Sataus相关 | 存放在MSI相关配置空间 | 存放在BAR空间PBA structure |
每个设备支持的Vector数量 | 32 | 2048 |
中断号连续? | 是 | 否 |
- 举个例子
说了这么多拿网卡举个例子吧。我们的I350网卡位于bus 3,device0,function 0。从配置空间可以看出网卡申请了一个BAR3,这正是MSI-X所使用的BAR3,MSI-X table structure存放在BAR3起始地址+0的位置,PBA structure存在BAR3起始地址+0x2000的位置。
我们来读一下该地址,发现使用的entry的message地址为LAPIC的地址。