VirtIO笔记

VirtIO会牵扯到很多的概念,包括virtio-netvhostvhost-user等等,下面简单的对其中一些概念进行记录。

VirtIO

VirtIO是一个开放的通用接口标准,定义了虚机与设备之间通讯的规范。该规范包含了控制平面与数据平面的规范,控制平面用于数据平面的建立与终止,而数据平面则是真实的数据流通通道。

两个平面间有不少差异,数据平面对于性能的要求非常苛刻,而控制平面则需要良好的可扩展性。

virtio规范中,控制平面被实现于qemu进程中,而数据平面则不是。

vhost

将数据平面的实现从qemu进程中脱离出来,可以在内核态或者用户态实现数据平面的协议。

virtio-net

Virtio-net是一个虚拟的以太网卡设备,它与宿主机之间通过virtio协议进行通讯来实现数据交换。

vhost-net

为了提交交换效率,将处理virtioring buffer模块(也称之为数据平面)从用户态的qemu进程中移动到内核中,避免过多的用户态和内核态之间的切换。

在这种实现中,一般都会提到前端和后端的概念。

  • 我们将宿主机的virtio接口称之为后端
  • 我们将虚机的virtio接口称之为前端

对照实际的架构,vhost-net就是运行在宿主机上的后端模块,而virtio-net则是运行在虚机上的前端模块(虚拟网卡)。我们可以在创建虚机的时候开启多队列模式,让虚拟网卡拥有多队列,让不同的队列分配到不同的CPU核心上进行处理。

vhost-user

进一步提升效率,将内核态中的数据平面在用户态的程序中实现。用户态的程序通常借助dpdk来获得直接操作网卡的能力。

共 0 条回复
暂时没有人回复哦,赶紧抢沙发
发表新回复

作者

sryan
today is a good day