赞
踩
资料直通车:Linux内核源码技术学习路线+视频教程内核源码
先来看一下网卡的架构图(以Intel的82540为例):
我们主要关心它的数据流,所以,看看它的工作原理吧:
在网卡数据流图中,我们也基本看到了网卡驱动的影子,驱动与网卡之间是异步通信:
全虚拟化方案,通过软件来模拟网卡,Qemu+KVM的方案如下图:
所以,让我们大声喊出本文的主角吧!
在进入主题前,先思考几个问题:
网卡的工作过程是一个生产者消费者模型,但是在前文中可以看出,在全虚拟化状态下存在一些弊端,一个更好的生产者消费者模型应该遵循以下原则:
基于上述原则,我们来看看从特殊到一般的过程:
所以,在virtio的方案下,网卡的虚拟化看上去就是下边这个样子了:
virtio的数据传递使用scatter-gather list(sg-list):
virtio的核心是virtqueue(VQ)的抽象:
上图说的是数据流方向,那么事件的通知机制如下:
大体的数据流和控制流讲完了,细节实现后续再跟进了。
那么,半虚拟化框架下的网卡虚拟化数据流是啥样的呢?
相信你应该对virtio有个大概的了解了,好了,收工。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。