美文网首页
Virtio的基本架构

Virtio的基本架构

作者: 迷死她张 | 来源:发表于2019-06-14 18:19 被阅读0次

    Virtio由前端驱动和后端处理程序构成,前端驱动(front-end,如virtio-blk、virtio-net等)是在Guest中存在的驱动程序模块,而后端处理程序(back-end)是在QEMU中实现的。在这前后端驱动之间,还定义了两层来支持Guest与QEMU之间的通信。其中,"virtio"这一层是虚拟队列接口,它在概念上将前端驱动程序附加到后端处理程序。一个前端驱动程序可以使用0个或多个队列,具体数量取决于需求。例如,virtio-net网络驱动程序使用两个虚拟队列(一个用于接收,另一个用于发送),而virtio-blk块驱动程序仅使用一个虚拟队列。虚拟队列实际上被实现为跨越Guest OS和hypervisor的联系,但它可以通过任意方式实现,前提是Guest OS和virtio后端程序都遵循一定的标准,以相互匹配的方式实现它。

    virtio-queue实现了环形缓冲区(ring buffer),用于保存前端驱动和后端处理程序执行的信息,并且它可以批量的方式保存前端驱动的多次I/O请求,并且交由后端去批量处理,减少虚拟运行环境的模式切换,从而提高Guest与hypervisor信息交换的效率。

    virtio作为一种设备,同样也处在Linux kernel对设备模型的管理之下,virtio使用了virtio pcibus类型的虚拟总线,当命令行传入virtio时,Qemu会根据注册的virtio_net_pci_info进行virtio net设备的初始化,并在Qemu自身模拟的pci bus层加入了virtio net设备的初始化信息。

    当Qemu加载Guest OS后,Guest OS的Bios和Kernel的启动过程中会对Pci设备进行枚举和资源的分配。

    当总线类型注册后,/sys/bus/目录下,创建了一个新的目录virtio,在该目录下同时创建了两个文件夹为devices和drivers。表示创建virtio总线,总线支持设备与驱动devices和drivers目录。

    对PCI设备进行枚举和资源分配中介绍了,对于枚举的设备,关联到总线链表中。函数module_pci_driver(&virtio_pci_driver),调用pci_register_driver,就是对链表的每一个Pci设备进行探测,遍历注册的驱动是否支持该设备,如果支持,调用驱动probe函数,完成启用该Pci设备,同时在virtio总线进行注册设备。

    相关文章

      网友评论

          本文标题:Virtio的基本架构

          本文链接:https://www.haomeiwen.com/subject/qxzpfctx.html