PCIe MSI 通过 VFIO 和 IOMMU 直接中断到用户空间

问题描述 投票:0回答:1

我目前正在编写一个用户空间驱动程序来与 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

linux linux-device-driver pci-e iommu vfio
1个回答
0
投票

您需要至少有 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

© www.soinside.com 2019 - 2024. All rights reserved.