本文主要是介绍qemu network backend的初始化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Network优化:
1、virtio-net:基于virtio框架的虚拟以太网设备
vhost_net优化:内核进程vhost_XXXX
其他优化选项:
数据发送的完整流程
在上面过程中可以看到vhost最核心处就在于将Guest中的virtio用于传输层的vring队列空间通过mapping方式与Host Kernel进行了共享,这样数据就不需要通过多次的跨态拷贝,直接进入了Kernel;通过io event事件机制进行了收发方向的通告,使vhost与Guest达到很好的配合。
而数据在kernel中最终是如何发送出去的呢?
看如下的图就明白了,在vhost的使能时,我们创建了tap,tap设备的用法和前文介绍的一致,通过加入Bridge来实现数据的交换。而vhost中的数据直接使用tap设备在内核中的sock接口进行了发送和接收,这些动作均是在vhost的worker thread中进行的。
相关cod
随着qemu2.1的发布,可以看到,qemu支持了vhost-user。从介绍可以看出,这是把原来vhost-backend从kernel移到了userspace,这和原来virtio架构有什么区别呢?并且这个特性带来了怎样的改进?
virtio
virtio是qemu的半虚拟化驱动,guest使用virtio driver将请求发送给virtio-backend。
+---------+------+--------+----------+--+
| +------+ +----------+ |
| user | | | | |
| space | | | guest | |
| | | | | |
| +----+ qemu | | +-+------+ |
| | | | | | virtio | |
| | | | | | driver | |
| | +------+ +-+---++---+ |
| | | |
| | ^ | |
| v | v |
| | |
+-+-----+-----------------+--+-------+--+
| |
这篇关于qemu network backend的初始化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!