gpt4 book ai didi

arm - 通过VFIO分配设备的中断处理

转载 作者:行者123 更新时间:2023-12-03 03:32:44 30 4
gpt4 key购买 nike

我试图了解如何通过 VFIO 分配给 VM( guest KVM)的设备进行中断处理,但没有得到任何关于它是如何发生的线索?

比方说,我有一个通过 VFIO 直接分配(设备直通)给 guest VM 的设备,并且该特定设备出现了硬件中断?

接下来会发生什么?

最佳答案

主机内核接收来自设备的中断,并将其路由到由 vfio 总线驱动程序、vfio-pci 或 vfio-platform 注册的中断处理程序。该中断处理程序只是将中断中继到用户 (QEMU) 通过 ioctl 配置的 eventfd。当使用 KVM 时,用户可以将来自 vfio 的中断信号 eventfd 直接连接到 KVM 中注入(inject) irqfd 的中断。这可以避免将中断弹回 QEMU 用户空间以注入(inject)到 guest 中,尽管如果 KVM irqfd 支持不可用,则可以选择该路径。

对于电平触发的中断,我们还必须屏蔽主机中的中断,以防止设备在中断由 guest 服务时继续中断主机。因此,我们在发出 eventfd 信号之前屏蔽中断,并使用稍微不同的 KVM irqfd(称为重采样 irqfd),它注册第二个 eventfd-irqfd 对,用于从 KVM 向 vfio 发出取消屏蔽信号。

各种硬件技术增强了这一点,以提高效率。在某些情况下,英特尔 APICv 允许将中断直接注入(inject)客户机,而无需 vmexit。这完全在 KVM 内处理。当接收硬件中断的处理器上运行正确的 vCPU 时,英特尔发布的中断将允许中断完全绕过主机。 ARM IRQ 转发允许客户机管理中断的取消屏蔽,从而避免重新采样 irqfd 开销。

关于arm - 通过VFIO分配设备的中断处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29461518/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com