ITSInterrupt 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中中断主要是类型说明SGICPU 之间的软件中断PPICPU 私有外设SPI系统共享外设SPI 最大大约≈ 1000 个但现代设备NVMe SSD高速网卡GPURDMA需要几十到几百个 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 子系统中通常和DistributorRedistributor一起构成完整 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 中断路由RoutingITS 决定中断送到哪个 CPU。例如NVMe Queue0 → CPU0 NVMe Queue1 → CPU1 NVMe Queue2 → CPU2这样可以避免锁竞争提升性能3 中断虚拟化VirtualizationITS 支持SR-IOVVM 直通设备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 触发 MSIStep1 设备写 MSIPCIe Device │ MSI write (Address , Data)Step2 ITS 捕获ITS 得到DeviceID RequesterID EventID MSI DataStep3 查表(DeviceID , EventID) │ ▼ LPIStep4 发送中断ITS │ Redistributor │ CPU六、为什么 ITS 这么重要因为 ITS 让系统可以支持几十万中断而不是传统的≈1000 SPI这对以下设备非常关键NVMe100G/200G 网卡GPURDMA七、一句话总结ITS 的本质就是MSI (PCIe) │ (DeviceID , EventID) │ ITS 翻译 │ LPI │ CPU所以ITS MSI → LPI 翻译器