Demystifying PCI Interrupts: Understanding MSI/MSI‑X in Linux
summary
Explains why legacy INTx fails at scale and shows MSI (up to 32 vectors) and MSI‑X with 2048 vectors that let each queue have its own interrupt, and how Linux builds domains to allocate, compose and write per‑vector address/data to the MSI‑X table. Uses a real mana NIC on Azure and Hyper‑V controller, lists concrete diagnostics: proc/interrupts and lspci -vvv, debugfs IRQ files, perf/ftrace and mpstat. Presents fixes that dynamically allocate vectors and rebalance affinity to recover lost throughput.
AI-written summary · about
chapters (17)
- 0:00PCI interrupt handling in Linux
- 1:27Hardware-CPU communication
- 3:11Legacy line-based interrupts
- 6:22Message Signaled Interrupts
- 9:15MSI-X vs MSI
- 11:01Interrupt mechanisms compared
- 14:15Linux MSI-X kernel stack
- 15:41IRQ domain hierarchy
- 18:50MSI interrupt life cycle
- 21:18MSI interrupt setup
- 23:31Debugging MSI-X issues
- 25:21Diagnosing interrupt delivery
- 28:13Measuring interrupt performance
- 30:02MSI-X failure patterns
- 33:53Mana NIC case studies
- 37:46Key takeaways
- 38:48Q&A
related talks
42mProtecting the Linux Kernel from Confidential Computing Threats in Virtual Environments
54mThe Linux Network Stack
21mI/O Virtualization Use Cases and the RISC-V IOMMU Overview
38mInterrupt Security for AMD SEV-SNP
14mSecure AVIC: Securing Interrupt Injection from a 'malicious' Hypervisor
17mSecure Interrupt delivery: Lessons Learned from Alternate Injection Enablement
21mVFIO: Very Frightening I/O? Taming Wild Guests and their PCIe Config-Space Abuse
24mDiscussion: TDISP, VM migration, and paravisors
