我知道在virtio中,當訪客嘗試通知主機時,它會寫入設備io地址,這會導致vm退出並被管理程序捕獲。寫操作將發信號給一個eventfd結構體,然後喚醒睡眠的vhost_worker線程以處理virtqueue中的數據包。在virtio中,爲什麼guest通告程序和主機通知程序分別使用ioeventfd和irqfd?
當主機嘗試通知guest虛擬機時,它還使用eventfd觸發中斷注入並需要vm退出。
我的問題是:這兩個過程是否必須如此複雜?爲什麼我們不把一個eventfd結構放入virtio前端和後端之間的共享內存中?然後,如果一個訪客嘗試通知主機,它發信號給eventfd,那麼vhost_worker線程就會喚醒,看起來我們不需要vm-exit。對於來賓通知程序,可以用相同的方式完成。 爲什麼我們不能以這種簡單的方式通知?