gpt4 book ai didi

linux - virtio中guest notifier和host notifier为什么分别使用ioeventfd和irqfd?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:05 39 4
gpt4 key购买 nike

我知道在 virtio 中,当 guest 尝试通知主机时,它会写入设备 io 地址,这会导致 vm-exit 并被管理程序捕获。写入操作将向 eventfd 结构发出信号,然后唤醒休眠的 vhost_worker 线程以处理 virtqueue 中的数据包。

当主机尝试通知客机时,它也使用 eventfd 触发中断注入(inject)并需要 vm-exit。

我的问题是:这两个过程有必要这么复杂吗?我们为什么不把一个 eventfd 结构放到 virtio 前端和后端之间的共享内存中。然后如果guest试图通知host,它向eventfd发出信号,然后vhost_worker线程被唤醒,这似乎我们不需要vm-exit。对于访客通知者,可以用同样的方式完成。为什么我们不能以这种简单的方式通知?

最佳答案

My question is: does these two process have to be so complicated?

简短回答:因为虚拟机很复杂。 :)

Why don't we just put a eventfd struct into the shared memory between virtio front-end and back-end.

顺便说一句,eventfd 不是结构。它只是一个整数,就像任何其他文件描述符一样。

Then if a guest try to notify the host, it signals to the eventfd…

它不能那样做。写入 eventfd 需要 guest 内核在主机系统上进行系统调用,这不是它能够做的事情。类似地,主机无法向 guest 内核创建的 eventfd 发送信号,因为该 eventfd 在主机系统上不存在。

请记住,客户系统可能没有运行 Linux 内核! virtio 接口(interface)不是特定于内核的;它旨在适用于任何虚拟化操作系统。

关于linux - virtio中guest notifier和host notifier为什么分别使用ioeventfd和irqfd?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46418131/

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