ITS是什么
ITS(Interrupt Translation Service)是ARM Generic Interrupt Controller v3 (GICv3)架构中的一个硬件模块,主要作用是:
把设备产生的 MSI/MSI-X 中断转换成 GIC 能处理的 LPI 中断。
一句话理解:
MSI (PCIe设备) │ ▼ ITS 翻译 (DeviceID , EventID) │ ▼ LPI │ ▼ CPUITS 本质就是MSI → LPI 的中断翻译引擎。
一、为什么需要 ITS
在传统 GIC(例如 GICv2)中,中断主要是:
| 类型 | 说明 |
|---|---|
| SGI | CPU 之间的软件中断 |
| PPI | CPU 私有外设 |
| SPI | 系统共享外设 |
SPI 最大大约:
≈ 1000 个但现代设备:
- NVMe SSD
- 高速网卡
- GPU
- RDMA
需要几十到几百个 MSI 中断。
例如:
NVMe 64 queue → 64 中断如果系统有很多设备:
SPI 完全不够所以 GICv3 引入:
LPI (Locality-specific Peripheral Interrupt)而ITS 就负责生成这些 LPI。
二、ITS 在系统中的位置
系统结构:
PCIe Device │ MSI write │ PCIe Root Complex │ SoC interconnect (AXI / NoC) │ ITS │ LPI │ Redistributor │ CPUITS 位于GIC 子系统中,通常和:
- Distributor
- Redistributor
一起构成完整 GIC。
三、ITS 的核心功能
ITS 主要做三件事情。
1 中断翻译(Translation)
设备触发 MSI 时:
Address = MSI address Data = MSI data RID = Requester IDITS 将其解释为:
DeviceID = RID EventID = MSI Data然后查表:
(DeviceID , EventID) │ ▼ LPI例如:
DeviceID = 0x0200 EventID = 5 │ ▼ LPI = 82052 中断路由(Routing)
ITS 决定中断送到哪个 CPU。
例如:
NVMe Queue0 → CPU0 NVMe Queue1 → CPU1 NVMe Queue2 → CPU2这样可以:
- 避免锁竞争
- 提升性能
3 中断虚拟化(Virtualization)
ITS 支持:
- SR-IOV
- VM 直通设备
- Guest MSI
在GICv4中甚至可以:
PCIe device → Guest VM interrupt无需 Hypervisor 参与。
四、ITS 的核心数据结构
ITS 主要依赖三个表。
1 Device Table
记录:
DeviceID → Interrupt Table每个设备对应一个中断表。
2 Interrupt Translation Table (ITT)
记录:
EventID → LPI例如:
EventID 0 → LPI 8200 EventID 1 → LPI 8201 EventID 2 → LPI 82023 Collection Table
记录:
LPI → CPU用于决定中断送到哪个 CPU。
五、完整工作流程
假设 NVMe 触发 MSI:
Step1 设备写 MSI
PCIe Device │ MSI write (Address , Data)Step2 ITS 捕获
ITS 得到:
DeviceID = RequesterID EventID = MSI DataStep3 查表
(DeviceID , EventID) │ ▼ LPIStep4 发送中断
ITS │ Redistributor │ CPU六、为什么 ITS 这么重要
因为 ITS 让系统可以支持:
几十万中断而不是传统的:
≈1000 SPI这对以下设备非常关键:
- NVMe
- 100G/200G 网卡
- GPU
- RDMA
七、一句话总结
ITS 的本质就是:
MSI (PCIe) │ (DeviceID , EventID) │ ITS 翻译 │ LPI │ CPU所以:
ITS = MSI → LPI 翻译器