0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

探究I/O虚拟化及Virtio接口技术(下)

jf_78858299 来源:软硬件融合 作者:Chaobowx 2023-04-04 17:03 次阅读

2.2 Virtqueue交互队列

Virtio 1.1引入了Packed Virtqueue的概念,对应的Virtio 1.0的Virtqueue被称为Split Virtqueue。

如图3所示,为Virtio1.0的Split Virtqueue结构。Virtqueue由三部分组成:

  • 描述符表
  • 可用的描述符环
  • 已使用的描述符环
  • Virtio 1.0的Split Virtqueue具有一些缺点:
  • 如果是虚拟化场景软件模拟Virtio设备的话,因为分散的数据结构,导致Cache利用率较低,每次请求都会有很多Cache不命中;
  • 如果是硬件实现的话,每次描述符需要多次设备DMA访问。

图片

图3 Virtio 1.0中的Split Virtqueue

如图4所示,Virtio 1.1引入了Packed Virtqueue的概念。整个描述符只有一个数据结构。这样,如果软件实现Virtio设备模拟的话,可以提升描述符交互的Cache命中率。如果硬件实现的,可以降低设备DMA的访问次数。

图片

图4 Virtio1.1的Packed Virtqueue

2.3 Virtio交互

驱动和设备的交互,符合生产者消费者模型的数据及通知(Notification)的交互行为。驱动把共享队列的队列项准备好,通过写寄存器的方式通知设备。设备收到驱动发送的通知则处理队列项以及相应的数据搬运工作,结束后更新队列状态并通知(设备通知驱动是通过中断)驱动。驱动接收到中断通知时候,把已经使用的队列项释放,并更新队列状态。

一个典型的通用的驱动和设备的交互流程如图5所示。Virtio场景的驱动和设备交互,驱动给设备的通知(Notification)称为Kick,设备给驱动的通知称为Interrupt(中断)。Kick和Interrupt操作是Virtio接口的一部分,在虚拟化场景,Kick和Interrupt需要非常大的CPU切换代价。驱动希望在Kick之前产生尽可能多的待处理缓冲项(一个缓冲项对应一个描述符和描述符指向的数据块);同样的,设备希望处理尽可能多的缓冲项然后再发送一个中断。通过尽量处理更多的缓冲项的方式,来摊薄通知的代价。

这种策略是一种理想状态,因为大多数时候驱动并不知道下一组缓冲项何时带来,因此不得不每一组缓冲项准备好之后就必须要Kick设备。同样的,设备在处理完相应的缓冲项之后,就尽快的发送中断给驱动,以达到尽可能小的延迟。

图片

图5 Virtio驱动和设备交互示意图

如图6所示,在设备模拟的虚拟化场景下,驱动可以暂时禁用中断,设备也可以暂时禁用Kick。通过这样的机制,可以最大限度的减少通知的代价,并且不影响性能和延迟。Virtio 1.1支持两种通知抑制机制,因此共有三种模式:

  • 使能通知模式:完全无抑制,使能通知;
  • 禁用通知模式:如图6所示,可以完全禁止对方发通知给自己;
  • 使能特定的描述符通知模式:告知对方一个特定的描述符,当对方顺序处理到此描述符处理完成时产生通知。

图片

图6 通过前后端禁用抑制通知的Virtio驱动和设备交互

2.4 总结

如图7,Virtio基于分层的设计思想,定义了三层Virtio设备架构:

  • 最下层的总线接口。PCI是最常用的Virtio场景使用的总线,但Virtio协议不仅仅支持PCI,也支持MMIO和Channel IO等。
  • 通用的Virtio交互接口。包括Virtqueue、功能特征位、配置空间等。Virtio交互接口是Virtio最核心的功能,通过Virtio交互接口实现了不同类型设备的标准化。
  • 上层的特定设备接口。在Virtio协议里,定义网络、块、控制台、SCSIGPU等各种不同类型的设备。

图片

图7 分层的Virtio框架图

Virtio的优点体现在:

  • Virtio实现了尽可能多的设计共享。这样,在开发的时候就可以复用很多软件和硬件资源,达到快速开发的目的。
  • Virtio实现了接口的标准化。标准化体现在两个方面:
  • (1)一个是通用的Virtio交互接口,统一了不同的设备类型软硬件交互;
  • (2)另一个是基于Virtio的Virtio-net、Virtio-block等广泛应用于云计算虚拟化场景,Virtio已经成为事实上的标准I/O接口。

而Virtio的缺点,则同样因为Virtio实现了接口的标准化,而忽略了不同设备类型数据传输的特点。因此,在一些大数据量传输的场景,效率比较低下。如果是在类似HPC这样的性能和延迟非常敏感的场景,Virtio就不是一个很好的选择。

**03 **虚拟化卸载

虚拟化卸载指的是计算机虚拟化中消耗CPU资源较多的接口设备模拟、热迁移、虚拟化管理等任务的卸载。

a. 接口设备的卸载

前面我们介绍了网络、远程存储等IO工作任务的卸载,而虚拟化卸载主要指的是跟IO相关的接口设备的卸载,例如网络、存储等接口设备的卸载。IO接口设备的卸载本身上也是IO硬件虚拟化的过程,比如我们通过VT-d技术实现从VM中pass though访问硬件设备,某种程度上也可以认为是把运行在Hypervisor中的模拟设备 “卸载”到了硬件。因此,IO接口设备的卸载本质上和IO设备硬件虚拟化是一件事情。

如图8,为了实现设备接口的标准化、加速IO处理的性能以及潜在的充分利用现有的虚拟化生态(例如更好的支持设备热迁移)等原因,阿里云在神龙芯片里实现了硬件的Virtio接口设备,通过Virtio接口设备支持Virtio-net网络驱动和Virtio-blk存储驱动等,实现了类虚拟化IO设备Virtio的硬件“卸载”。

图片

图8 阿里云神龙芯片网络和存储接口示意图

AWS的NITRO系统支持网络、本地存储和远程存储,NITRO实现了网络接口设备ENA/EFA(AWS自定义接口)的硬件“卸载”以及存储接口设备NVMe(远程存储EBS使用的是NVMe接口,本地存储也是NVMe接口)的卸载。

b. 接口设备卸载后的迁移问题

当把设备“卸载”到硬件,让VM直接访问硬件设备,这使得VM的设备热迁移变的非常有挑战。vDPA(vhost Data Path Acceleration,vhost数据路径加速,其中vhost是Virtio后端设备模拟的轮询方式实现)实现了一种折中的解决方案,如图9所示,vDPA把Virtio分为了控制面和数据面:

  • 控制面。vDPA控制面依然是通过要经过Hypervisor的处理,用于设备和VM之间的配置更改和功能协商,用于建立和终止数据面。
  • 数据面。vDPA数据面包括共享队列以及相应的通知机制,用于在设备和VM之间传输实际的数据。

图片

图9 vDPA框架示意图

使用vDPA一个重要原因是,在热迁移的时候可以很方便的把Virtio数据面的处理切换回传统的Virtio/Vhost后端设备模拟。这样,可以充分利用现有的基于KVM/Qemu对Virtio设备迁移的解决方案来完成设备的迁移。

c. 虚拟化管理的卸载

从软件虚拟化进化到硬件虚拟化的过程,本身就可以看作是一个硬件加速以及硬件卸载的过程。我们逐步的剥离了Hypervisor的功能,比如通过VT-x技术“卸载”了Hypervisor的CPU/内存等的软件模拟,以及通过VT-d以及vDPA等技术“卸载”了设备软件模拟。这些剥离,使得Hypervisor越来越轻量,整个系统的虚拟化开销也越来越少。进一步的,我们可以把虚拟化的管理(例如Linux平台主流的管理程序Libvirt)卸载到硬件中的嵌入式软件运行。

如图10, 我们通过桥接的方式,实现主机软件和硬件中嵌入式软件通信机制。把虚拟化管理等软件任务从主机卸载到嵌入式系统(依然有很小一部分任务无法卸载,如虚拟机资源分配、vCPU调度等)。这样,可以把几乎100%的主机资源提供给用户,使用户虚拟机得到近乎物理机的性能。

图片

图10 虚拟化管理卸载图

通过虚拟化管理卸载到硬件中的嵌入式CPU软件,我们可以做到物理上的业务和管理分离,整个业务主机跟云计算管理网络安全的隔离,只能通过特定的接口访问到Lite Hypervisor,除此之外,不能访问主机的任何资源。这样,即使有潜在的运维操作失误,也无法对业务主机造成影响。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    8611

    浏览量

    151255
  • DPU
    DPU
    +关注

    关注

    0

    文章

    363

    浏览量

    24198
  • i/o
    i/o
    +关注

    关注

    0

    文章

    33

    浏览量

    4594
收藏 人收藏

    评论

    相关推荐

    LabVIEW的I/O接口设备驱动

    虚拟仪器系统的硬件平台由i/o接口设备和计算机构成,为了能使计算机能够对i/o
    发表于 11-18 11:04 1.3w次阅读
    LabVIEW的<b class='flag-5'>I</b>/<b class='flag-5'>O</b><b class='flag-5'>接口</b>设备驱动

    virtio I/O通信流程及设备框架的实现

    virtio 是一种通用的半虚拟I/O 通信协议,提供了一套前后端 I/
    的头像 发表于 03-10 13:37 6544次阅读

    《微机原理与接口技术》教学大纲

    微型计算机原理及接口技术,包括CPU的工作原理与时序,IO端口的地址译码,CPU和外设之间的数据传送方式,中断控制器及中断技术应用,DMA控制器及应用,并行
    发表于 10-11 09:15

    浅析单片机原理及接口技术

    PPT内容这是单片机原理与接口技术课件ppt,包括了微型计算机基础,MCS-51单片机结构与时序,习题课,MCS-51与存储器连接示例,汇编语言程序设计,半导体存储器,中断系统,并行I/O接口
    发表于 09-10 07:27

    微机接口技术实用教程

    微机接口技术实用教程1微机接口技术实用教程第1章 微型计算机接口技术基础 第1章 微型计算机接口技术基础 1.1 接口技术概述 输入/输出(
    发表于 09-13 08:19

    微机原理及接口技术课件(教学)

    微机原理及接口技术课件:微机:IBM PC系列机原理:8088汇编语言程序设计接口:半导体存储器及其接口I/O
    发表于 12-06 22:24 462次下载
    微机原理及<b class='flag-5'>接口技术</b>课件(教学)

    微机原理与接口技术精品课程(课件)

    微机原理与接口技术精品课程(课件):微机:IBM PC系列机原理:8088汇编语言程序设计接口:半导体存储器及其接口 I/O
    发表于 12-06 22:26 170次下载
    微机原理与<b class='flag-5'>接口技术</b>精品课程(课件)

    单片机与接口技术实验教程

    单片机与接口技术实验教程 实验一、P1口实验……………………………………………… 3实验二、简单I/O口扩展实验………………………………… 5实验三
    发表于 04-14 14:31 39次下载

    输入输出设备I/O设备总结

    I/O设备又叫输入输出设备。对于I/O bus 包含数据总线、控制总线、地址总线;每一个I/O
    发表于 11-24 09:28 3645次阅读
    输入输出设备<b class='flag-5'>I</b>/<b class='flag-5'>O</b>设备总结

    系统虚拟技术virtio总体设计思想

    ,主要有计算资源,存储资源和网络资源。所以,系统虚拟技术又可以细分为计算虚拟,存储虚拟
    的头像 发表于 05-07 15:40 4891次阅读
    系统<b class='flag-5'>虚拟</b><b class='flag-5'>化</b><b class='flag-5'>技术</b><b class='flag-5'>virtio</b>总体设计思想

    I/O软件模拟虚拟和类虚拟

    I/O虚拟是SmartNIC/DPU/IPU中最核心的部分,AWS NITRO就是从I/O硬件
    的头像 发表于 10-13 11:09 2646次阅读

    I/O虚拟Virtio接口介绍

    I/O虚拟是计算机虚拟最复杂的部分,因为涉及到CPU、操作系统、Hypervisor以及
    的头像 发表于 10-26 17:21 4256次阅读

    探究I/O虚拟Virtio接口技术(上)

    I/O虚拟是SmartNIC/DPU/IPU中最核心的部分,AWS NITRO就是从I/O硬件
    的头像 发表于 04-04 16:54 3863次阅读
    <b class='flag-5'>探究</b><b class='flag-5'>I</b>/<b class='flag-5'>O</b><b class='flag-5'>虚拟</b><b class='flag-5'>化</b>及<b class='flag-5'>Virtio</b><b class='flag-5'>接口技术</b>(上)

    VirtIO Networking虚拟网络设备实现架构

    VirtIO 由 Rusty Russell 开发,最初是为了支持自己开发的 lguest Hypervisor,其设计目标是在虚拟环境提供与物理设备相近的
    的头像 发表于 05-08 10:48 1173次阅读
    <b class='flag-5'>VirtIO</b> Networking<b class='flag-5'>虚拟</b>网络设备实现架构

    panabit加载virtio网卡驱动

    引言:Panabit网络流量管理系统是一款强大的企业级网络管理软件,它提供了丰富的功能和灵活的配置选项。而virtio网卡作为一种高性能的虚拟网络设备,被广泛应用于各种虚拟平台。本文
    的头像 发表于 11-17 11:13 1202次阅读