我正在研究virtio如何与qemu和kvm一起工作。 我有两个问题。
到目前为止,我理解virtio frond-end驱动程序(在客人中)在vring(virtqueue)和kick qemu中编写IO请求。 然后通知qemu,在vring中转换请求并调用系统调用,如打开,写入,读取,关闭等。
Q1。如何在virtio前端驱动程序和qemu之间共享vring?我从http://www.slideshare.net/zenixls2/052-virtio-introduction-17191942获得了一些使用内存映射的信息。但是,我在源代码中找不到它。请告诉我源代码的位置。
Q2。怎么踢qemu? 我无法理解前端车手如何踢qemu? 我认为qemu的记忆听众会收到并处理这个问题。 但我在源代码中找不到它。
答案 0 :(得分:5)
前端驱动程序通过写入I / O端口启动QEMU(在PCI virtio设备的I / O BAR中;您可以使用lspci找到该地址)。
要在guest虚拟机和virtio设备之间共享内存,QEMU会使用address_space_map和address_space_unmap(或cpu_physical_memory_map和cpu_physical_memory_unmap,而不是取决于QEMU版本)执行“DMA”。