我目前正在编写一个用户空间驱动程序来与 Altera PCIe 卡连接。我的目标是尽可能减少最大中断延迟。
我目前正在使用
VFIO_DEVICE_SET_IRQS
ioctl 向 Eventfd 注册 MSI 中断,然后 read
等待它。
如果我的理解是正确的,这将系统调用到内核并等待。当主板发送 MSI 时,APIC 将发出正确的 IRQ 信号,该 IRQ 应跳转到内核代码,并向内核发出信号以安排 userpsace 进程从读取返回。
是否可以配置系统,以便我从用户空间进程中停止 CPU 核心,并且 MSI 由同一 CPU 核心处理,并继续执行或调用“处理程序”?无需进入内核并等待
select
、poll
或 read
。
我认为英特尔发布的中断可能会出现类似的情况,但我不确定如何使用 VFIO 启用它。
有一个邮件列表 [1] 和其他类似的补丁,但我在内核源代码中找不到它们。
[1] https://lore.kernel.org/lkml/[电子邮件受保护]/T/#meba921c9eb430ec8c07d5828e1c9c625671dbd8d
您需要至少有 4.8 的内核版本,并且 QEMU 版本应该像 2.6 一样支持它,然后您还需要启用一些设置,例如在将设备分配给访客模式时在 QEMU 命令行中启用发布选项
示例:
-device vfio-pci,host=01:00.0,x-intx-mmap=true, posted =true
这将为设备创建发布的中断描述符表并将其映射到客户内存
请查看此链接以获取更多信息或参考 https://www.reddit.com/r/VFIO/comments/yd00x1/handling_interrupts_in_vfio/?rdt=40262