一、virtio spec 是什么?

在云计算如火如荼的今天,我们应该经常可以在云计算平台上看 "virtio" 这个词,它出现在云计算机的各种设备上:

它是怎样的一种存在,在虚拟化的技术领域扮演着一种怎样的角色呢?

virtio 是一种 I/O 半虚拟化解决方案,是一套通用 I/O 设备虚拟化的程序,是对半虚拟化 Hypervisor 中的一组通用 I/O 设备的抽象。

一般来说,我们所说的 virtio 包含三个部分:

  • 虚拟机中的 virtio 网卡驱动

  • 宿主机或者 CIPU 上面的 virtio 设备的实现

  • virtio spec (规范)

前面两个是 virtio 在不同的操作系统及计算机模拟器中具体实现的 driver 和 device,driver 和 device 如何实现并没有严格的规定,基于其所处的环境不同而有所区别,但是 driver 与 device 之间的交互必须严格遵守 virtio spec 的定义。这样才能保证所有的 OS 在不同的 host 上的模拟器里面都可以正常运行。

所以 virtio spec 是 virtio 的灵魂。

virto spec 通过定义一套 virtqueue 机制,实现 guest 和 host 的通信。这套机制可以应用于多种设备(网络设备、块设备等)。所以 virtio spec 发展出了多种设备,基本完成了对于虚拟化场景下各种设备的覆盖。

1.1 那我们为什么选择它呢?

virtio 是一种半虚拟化的技术,如果对于设备进行全虚拟化,hypervisor 就要对于所有的硬件请求指令进行截获,这对于性能的影响是巨大的。

但是实际上 guest 本质上是一个 host 上的进程,它与 hypervisor 进行交互并不用这么麻烦,完全可以基于进程之间的通信方式进行交互。只是这种方式要 guest 进行配合。所以基于此实现的 virtio 可以获得更高的性能。这也就是 virtio 获得广泛支持的原因。

1.2 virtio spec 的历史

2012 最早由 Rusty Russell 起草的并不是一个正式的规范。后续 virtio spec 由 virtio 技术委员会负责,并发布了多个版本。在委员会的主持下,社区的广泛参与下,不断地为 virtio spec 增加新的特性与能力,目前 virtio spec 已经推进到 v1.2 版本。

1.3 virtio spec 1.2 关键时间点

  • 25 Jan 2022 virtio spec 冻结

  • 10 May 2022  - 08 June 2022 Public Review

  • 01 July 2022 virtio v1.2 正式版本完成  html

  • 15 July 2022 virtio v1.2 正式对外宣布发布 announcement

经过半年多的努力,vrtio 1.2 终于正式发布了。

1.4 virtio spec 1.2 新特性

首先 virtio spec  1.2 对更早的版本是完全兼容的,virtio spec 定义的所有特性都是通过 features 进行协商的,所以在实现上可以平滑地进行过渡。并不存在升级之后不同版本之间的不兼容问题。

在设备方面 virtio spec 1.2 新支持了一些设备: virtio-pmem,virtio-fs, virtio-rpmb......

一些主流的设备也支持了一些新的特性,比如 virtio-net 增加了这些新的特性:

  • UDP segmentation offload

  • Receive Side Scaling

  • Per-packet hash reporting

  • Guest hdrlen optimization

  • Link speed and duplex reporting

此外, virtio core 还增加了一些新的基础特性:

  • Per-virtqueue reset

  • Shared memory resources

  • Object resources for inter-device sharing

  • Virtio-pci vendor-specific capabilities

  • Virtio-pci queue_notify_data optimization

总体而言,这次 virtio spec 1.2 的发布带来了很多让人激动的新特性。相信等这些功能正式实现之后,我们会感受到更加现代化的 virtio。同时也是一个驱动各个厂家完善自家 virtio 实现的机会。

二、Per-virtqueue reset

virtio spec 1.2 中的 Per-virtqueue reset 是由阿里云的 Xuan Zhuo <xuanzhuo@linux.alibaba.com>起草的,引入这个特性的目的是解决 virtio-net 不支持队列级别的 reset 操作的问题。这在很多现代化的网卡中是一个比较常见的功能, 是实现很多功能的基础能力, 为了让 virtio-net 支持更多能力, 这个特性的引入是必须的。但是 Per-virtqueue reset 并不只限于 virtio-net 这一种设备,它是一个 virtio 的基础能力,相信其它的 virtio 设备也会慢慢支持这个 feature。

2.1 Per-virtqueue reset 的实现过程

Per-virtqueue reset 由 driver 针对某一个队列发起,基于某一种 transport(比如 PCIe) 通知 device。device 停止使用队列,driver 在 reset 之后可以重新 re-enable 队列。virtio spec 定义了这个过程中详细的交互流程和信息。

以下是 virtio spec 中定义的详细流程:

  • driver 基于 transport 通知 device 某个指定的队列要 reset。

  • device 收到请求之后设置 reset 状态为 1,停止此队列的所有操作,包括中断等,并设置队列的所有的状态到初始值。在 device 完成 reset 操作之前,返回给 driver 的 reset 状态都是 1,直到 reset 操作完成。reset 完成之后 reset 及 enable 的值都要设置成 0。

  • driver 在检查到队列的 reset 状态变成 0 之后,就表示device reset 操作已经完成了。这个时候开始,driver 就可以安全地回收队列占用的相关资源了。

到此 driver 对于队列的 reset 操作就已经完成了。

  • 之后 virtio driver 可选地进行 re-enable 操作,在操作的过程中,driver 可以给 device 新的参数来 re-enable 这个队列。比如新的队列大小。

以上是一个完整的 reset & re-enable 的过程,理论上 re-enable 是可选的。

2.2 Per-virtqueue reset 的意义

对于现代的很多硬件设备来讲,对于队列进行 reset 是一个比较常见的功能,所以这个功能的引入让 virtio 设备更加现代化。早期 virtio 的出现是伴随着高性能的需求而来的,我们原来更加关注它在性能上的基本功能,一些高级功能并不重视。per-virtqueue reset 让 virtio 对于队列的使用更加灵活,譬如我们可以基于 per-vertqueue reset 实现下面两个功能:

1.调整virtio-net 网卡队列的ring size。在 virtio-net 的场景下,基于 per-virtqueue reset 我们可以实现网卡队列 ring size 的调整。目前一般的网卡都支持使用  ethtool -G eth0 rx <new size> tx <new size>来调整队列的大小,但是原来的 virtio-net 一直是不支持这样一个简单的功能的,现在基于 per-virtqueue reset,我们很快就可以在 Linux 下使用这个命令来调整队列的大小。

2.支持AF_XDP,扩展云上应用的边界。除了应用于上述简单的场景之外,我们还可以在更高级的场景应用到这个功能。per-virtqueue reset 也可以视作一种资源的快速回收机制。比如在 virtio-net 的情况下,我们必须要等待收到新的数据包或者硬件完成数据包的发送才能完成对于 buffer 资源的回收。而现在基于 per-virtqueue reset,driver 可以不用被动地等待而是可以主动调用 reset 快速地让 device 释放对于某个队列上的 buffer 资源的占用,实现资源的快速回收。这可以让 virtio-net 支持 AF_XDP 这样的高级功能,实现在 linux 内核框架下的高性能收发包。

更多的应用场景还等待大家的探索。

2.3 实现及进展

以上都是 virtio spec 的定义,Xuan Zhuo作为这个 feature 的起草人,在这个 feature 正式进入 virtio spec 之后,就开始向 Linux kernel 社区开源相关的实现,其它 device 后端实现也都在推进中:

  • virtio core 支持 per-virtqueue reset 功能的 patch set 近期应该可以进入 linux 内核主线,这个 patch set 里面包含 virtio-net 支持 ring size 的实现。

  • virtio-net 支持 AF_XDP 的实现也会近期开源到社区。

  • qemu/vhost-user(DPDK)/vhost-kernel 的后端实现也在推进中 @Kangjie Xu <kangjie.xu@linux.alibaba.com>。

相信大家不久之后就可以在新版本的 Qemu 及 linux kernel 上体验到这个功能了。

三、高性能网络 Virtio SIG

3.1 背景

virtio 作为一个云计算大范围使用的技术,国内的各大云厂家基本都是基于它实现的,但是这么些年我们对它的反馈与参与是非常少的,基本都是拿来主义的状态。最近,我们开始注意到,阿里等国内的云厂家开始积极地参与其中,修复 bug,参与标准制定,推进实现等, 一起推广及做强云基础技术。这对于国内云技术的长远发展是非常好的一件事。希望这样的深度的参与越来越多,共同推进 virtio 的发展。

为了更好地支持更多的特性和优化在龙蜥操作系统的落地,我们在龙蜥社区高性能网络SIG下组建了 virtio 兴趣小组,通过加强社区内各个 virtio 相关的团队及公司之间的合作,增强彼此在这一块的沟通和了解,从而推动 virtio 本身以及其在龙蜥更好的发展。希望后续有更多的社区伙伴来共同参与进来,也欢迎大家积极参与讨论,提问题或需求,大家以一种平等的关系共构建龙蜥社区的 virtio SIG。我们认为这是一个共赢的过程。

3.2 原则

共赢、平等、开源。

3.3 愿景

  • 探索 virtio 标准的更多可能性,推进 virtio 标准实现与落地

  • 促进技术交流

  • 提供技术帮助

  • 为各个伙伴提供需求输入

  • 同步各个伙伴的开发进展

  • 促进各个伙伴之间的合作

四、SIG 成员

丁雪峰(阿里)、衡琪(阿里)、许康捷(阿里)、马江英(Intel  CNDP)、 顾正国(云豹智能)、 张明礼(云豹智能)、 杨涛(云豹智能)、孙传明(云豹智能)、龚有华(云脉芯联)、孟祥宏(云脉芯联)、陈杨(云脉芯联)、钱荣(云脉芯联)。

加入我们

欢迎大家加入高性能网络 Virtio SIG。

SIG 地址链接:

https://openanolis.cn/sig/high-perf-network

—— 完 ——

加入社群

加入微信群:添加社区助理-龙蜥社区小龙(微信:openanolis_assis),备注【龙蜥】与你同在;加入钉钉群:扫描下方钉钉群二维码。欢迎开发者/用户加入龙蜥社区(OpenAnolis)交流,共同推进龙蜥社区的发展,一起打造一个活跃的、健康的开源操作系统生态!

关于龙蜥社区

龙蜥社区(OpenAnolis)由企事业单位、高等院校、科研单位、非营利性组织、个人等在自愿、平等、开源、协作的基础上组成的非盈利性开源社区。龙蜥社区成立于 2020 年 9 月,旨在构建一个开源、中立、开放的Linux 上游发行版社区及创新平台。

龙蜥社区成立的短期目标是开发龙蜥操作系统(Anolis OS)作为 CentOS 停服后的应对方案,构建一个兼容国际 Linux 主流厂商的社区发行版。中长期目标是探索打造一个面向未来的操作系统,建立统一的开源操作系统生态,孵化创新开源项目,繁荣开源生态。

目前,Anolis OS 8.6 已发布,更多龙蜥自研特性,支持 X86_64 、RISC-V、Arm64、LoongArch 架构,完善适配 Intel、兆芯、鲲鹏、龙芯等芯片,并提供全栈国密支持。

欢迎下载:

https://openanolis.cn/download

加入我们,一起打造面向未来的开源操作系统!

https://openanolis.cn

往期精彩推荐

1.如何在 Anolis 8上部署 Nydus 镜像加速方案?

2.龙蜥社区技术委员会召开:新增4名委员、一致决议发布版本及技术治理路线等规划

3.一起畅聊「云+操作系统」!龙蜥社区亮相阿里巴巴开源开放周,完整议程来了

4.如何通过 open-local 玩转容器本地存储?

5.千人互动,18 位业界大咖,2022 开放原子全球开源峰会龙蜥专区总结来了

virtio 1.2 来了!龙蜥社区携手业界打造新版虚拟化 IO 标准相关推荐

  1. 知名云计算厂商云宏加入龙蜥社区,共同打造信息安全坚实“地基”

    近日,云宏信息科技股份有限公司(以下简称"云宏")签署了 CLA(Contribution License Agreement,贡献者许可协议),正式加入龙蜥社区(OpenAnol ...

  2. 知名大数据厂商云宏加入龙蜥社区,共同打造信息安全坚实“地基”

    近日,云宏信息科技股份有限公司(以下简称"云宏")签署了 CLA(Contribution License Agreement,贡献者许可协议),正式加入龙蜥社区(OpenAnol ...

  3. 龙蜥社区理事长展望操作系统 2022:加速驶向快车道,云、XPU和开源成“催化剂”...

    编者按:操作系统诞生至今已有数十年的时间,其整个发展演进历程.后续将如何发展也受到广泛关注.近日,龙蜥社区理事长马涛在 InfoQ 直播分享,从承上启下的操作系统.操作系统的演进路线与趋势.面向未来的 ...

  4. 网迅科技加入龙蜥社区,共筑网络信息安全长城

    近日,网迅科技签署了 CLA(Contribution License Agreement,贡献者许可协议),正式加入龙蜥社区(OpenAnolis). 网迅科技成立于 2014 年,是一家专注集成电 ...

  5. 固态存储厂商忆联加入龙蜥社区,共建开源新生态

    近日,‍深圳忆联信息系统有限公司(以下简称"忆联")签署了 CLA(Contributor License Agreement,贡献者许可协议),正式加入龙蜥社区(OpenAnol ...

  6. 【观察】浪潮信息龙蜥联合实验室:打造下一代操作系统,筑牢基础软件创新根基...

    毫无疑问,在当今世界日益复杂的竞争环境下,随着中国企业数字化转型的加速和自主创新进程的加快,再加上开源和云计算已成为行业发展的大趋势之下,如何在"变局中开新局"?如何解决中国在核心 ...

  7. 龙蜥社区技术委员会主席杨勇:下一代操作系统展望

    在刚刚结束的2022云栖大会龙蜥操作系统峰会上,龙蜥技术委员会主席,阿里云操作系统技术总监杨勇做了<下一代操作系统展望>的主题演讲,以下为演讲实录. 大家上午好!今天由我来汇报一下龙蜥操作 ...

  8. “芯”有灵“蜥”,万人在线!龙蜥社区走进 Intel MeetUp 精彩回顾

    6 月 18 日,龙蜥社区(OpenAnolis) "走进系列" 第 3 期--走进 Intel MeetUp ,于线上开展并圆满结束.本次走进 Intel MeetUp 线上观看 ...

  9. 龙蜥社区成立系统运维SIG,开源sysAK系统运维工具集

    简介:系统运维SIG致力于打造一个集主机管理.配置部署.监控报警.异常诊断.安全审计等一系列功能的自动化运维平台. OpenAnolis 龙蜥社区(以下简称"龙蜥社区")正式成立系 ...

最新文章

  1. 创新是低情商的人做的
  2. C语言 文件操作10--配置文件读写
  3. 计算机启动应用程序的方法,excel的程序_Excel2010中启动应用程序的三种方法
  4. identcurrent mysql_MYSQL库内所有表名及表结构获取
  5. Spring MVC 4.x 知识点
  6. xshell 自动断开解决方法
  7. 二线水温传感器怎么检测_水温传感器出现故障,发动机真的会限矩吗?本文告诉你答案...
  8. 全新企业发卡系统源码/带有代理功能发卡平台源码
  9. 【温故而知新】计算机408之计算机网络速记
  10. python中selenium关于滚动条的循环下拉滚动操作---滚动条操作
  11. 【研究日记】虚拟歌姬自动调教之歌曲音频切割的问题
  12. 有没有好人看看,谢谢谢谢
  13. 微信公众号项目录音上传功能
  14. 程序员数学(16)--二次根式
  15. 线性代数 行列式(二)
  16. LVM中VG PV PP LV的概念
  17. 鸿蒙二部曲之一,网文封神之作,“鸿蒙二部曲”和“斗罗四部曲”你选择站哪边?...
  18. 奇迹mu服务端搭建外网联机教程方案
  19. 基于android的裸眼3d,午诺裸眼3D原理其实并不复杂
  20. 决战燕京城-09 白狗大战蟒蛇

热门文章

  1. yslow_萤火虫的YSlow性能扩展
  2. Appium基础 — Appium Inspector定位工具(二)
  3. 玩计算机游戏的英文,玩电脑游戏英语作文
  4. 【高热FAQ】关于智慧康养物联网加速器 ,你想知道的都在这
  5. 虚拟现实技术在物理光学的应用
  6. 棋牌行业开年第一站,阿里游戏云与你聊安全
  7. Office2007-2010 OpenXML
  8. HDU 1114:Piggy-Bank ← 完全背包问题
  9. 人事管理系统 —— 数据库+可视化
  10. qgis控制滚轮转动地图比例尺的变化幅度