KVM/QEMU中kvm_inj_virq事件irq字段含义及对应中断类型查询
解析KVM/QEMU中kvm_inj_virq事件的IRQ编号映射
KVM给虚拟机注入的虚拟IRQ编号没有固定的全局映射,会随虚拟机配置、设备类型(virtio/PCI passthrough)、内核版本变化而不同。以下是精准查找对应关系的方法,以及常见场景的参考:
一、从虚拟机内部查询(最准确)
直接登录目标虚拟机,通过系统文件查看IRQ与设备的绑定:
- 查看所有IRQ的分配情况:
cat /proc/interrupts - 查看指定IRQ对应的设备:
cat /proc/irq/<IRQ_NUM>/device - 查看IRQ的处理程序:
cat /proc/irq/<IRQ_NUM>/handler - 对于virtio设备,用
lspci -v查看,virtio设备多使用MSI-X中断,输出中会显示对应的虚拟IRQ编号。
二、从宿主机QEMU进程获取信息
在宿主机上通过QEMU的监控或进程数据关联IRQ与设备:
- 进入QEMU监控台(默认快捷键
Ctrl+Alt+2),执行info pic命令,可查看虚拟机PIC/APIC管理的IRQ及关联设备。 - 针对virtio设备,执行
info virtio,能看到每个virtio设备对应的中断向量(即虚拟IRQ编号)。 - 用
ps aux | grep qemu找到QEMU进程,结合pstree查看其设备线程,再匹配trace-cmd追踪的时间点,定位具体设备的中断注入。
三、内核与KVM源码的标准参考
x86架构虚拟机的通用虚拟IRQ类型有这些常见对应:
- 本地定时器中断:PIC模式下为IRQ 0,APIC模式下映射为向量32(APIC将前32个向量预留为CPU异常)。
- virtio块设备(磁盘):多使用MSI-X中断,IRQ编号通常从32开始,具体依配置而定。
- virtio网络设备:同样采用MSI-X中断,IRQ编号与磁盘设备不重叠,一般也在32以上。
- PCI passthrough设备:虚拟IRQ编号会映射到宿主机物理IRQ,虚拟机内可通过
lspci查看对应关系。
四、关键注意点
- 传统PIC模式下,虚拟机IRQ 0-15对应经典设备(如IRQ0定时器、IRQ1键盘),但现代虚拟机普遍启用APIC模式,此时虚拟IRQ向量从32开始分配。
- 启用MSI/MSI-X的设备可拥有多个中断向量,对应的IRQ编号会分布在32以上的区间。
内容的提问来源于stack exchange,提问作者TNT Captain
相关产品推荐
相关产品推荐

