中移(苏州)软件技术有限公司面试问题与解答(4)—— virtio所创建的设备1

news2024/11/15 2:02:31

接前一篇文章:中移(苏州)软件技术有限公司面试问题与解答(0)—— 面试感悟与问题记录

本文参考以下文章:

VirtIO实现原理——PCI基础

VirtIO实现原理——virtblk设备初始化

特此致谢!

本文对于中移(苏州)软件技术有限公司面试问题中的“(1)virtio会创建哪些设备?”进行解答与解析。

要弄清楚并回答这个问题,首先得从virtio这个“根”上讲起。

传统的设备模拟中,虚拟机内部设备驱动完全不知道自己处在虚拟化环境中。对于网络和存储等设备,I/O操作会完整地走完“虚拟机内核栈->QEMU->宿主机内核栈”这一过程,会产生很多的VM Exit和VM Entry,因此性能很差。

以e1000网卡为例,在传统的全模拟方案下,虚拟机操作系统内核中的网卡驱动还是跟具体的硬件设备相同。也就是说,QEMU模拟的是e1000的网卡,虚拟机操作系统还是通过传统的方式进行收发包。e1000以及其它模拟设备网卡的驱动在进行收发包的时候,会有很多次的写网卡寄存器或IO端口的操作,这会导致大量的VM Exit,使得网卡的性能比较差。

virtio方案则是旨在提高性能的一种优化方案。在该方案中,虚拟机能够感知到自己处于虚拟化环境,并且会加载相应的virtio总线驱动virtio设备驱动

半虚拟化的基本原理如下图所示:

主要包括两部分的内容:一个是VMM创建出模拟的设备,即后端设备;另一个是虚拟机操作系统内部安装好该模拟设备的驱动,即前端驱动。在半虚拟化环境下,设备和驱动都是新的、专门用来适应虚拟化环境的。虚拟机中的设备驱动(前端驱动)与QEMU中的虚拟网卡设备(后端设备)定义一套自己的协议来进行数据传输,通过自己约定的接口,可以很方便地进行通信。virtio即是这样一种利用半虚拟化技术提供I/O性能的框架。

到这儿,就可以初步知道题目的意思了,所谓“virtio会创建哪些设备”主要指的是virtio后端设备都有哪些。具体的设备接下来就会讲到,这里先别着急,且容我慢慢道来。

先来介绍一下virtio框架,如下图所示:

virtio是一种前后端架构,包括前端驱动(Front-End Driver)后端设备(Back-End Device)、以及自身定义的传输协议。通过传输协议,virtio不仅可以用于QEMU/KVM方案,也可以用于其它的虚拟化方案。如虚拟机可以不必是QEMU,也可以是其它类型的虚拟机。后端不一定要在QEMU中实现,也可以在内核中实现(这实际上就是vhost方案)。接下来对这三个组件做简单介绍。

  • 前端驱动(Front-End Driver)

前端驱动为虚拟机内部的virtio模拟设备对应的驱动,每一种前端设备都需要有对应的驱动才能正常运行前端驱动的主要作用是接收用户态的请求;然后按照传输协议将这些请求进行封装;之后再写I/O端口;发送一个通知到QEMU的后端设备

  • 后端设备(Back-End Device)

后端设备则是在Host(QEMU)中,用来接收前端驱动发过来的I/O请求;然后从接受的数据中,按照传输协议的格式进行解析。对于网卡等需要实际物理设备交互的请求,后端驱动会对物理设备进行操作,从而完成请求;并且会通过中断机制通知前端驱动

  • virtio队列

virtio前端和后端驱动的数据传输通过virtio队列(virtio queue,virtqueue)完成一个设备会注册若干个virtio队列每个队列负责处理不同的数据传输,有的是控制层面的队列,有的是数据层面的队列。virtqueue是通过vring实现的。vring是虚拟机和QEMU之间共享的一段环形缓冲区。当虚拟机需要发送请求到QEMU的时候,就准备好数据,将数据描述放到vring中,写一个I/O端口然后QEMU就能够从vring中读取数据信息,进而从内存中读出数据。QEMU完成请求之后,也将数据结构存放在vring中,前端驱动也就可以从vring中得到数据了。vring的基本原理如下图所示:

vring包含三个部分

  • 第一部分是描述符表(Descriptor Table),用来描述I/O请求的传输数据信息,包括地址、长度等信息;
  • 第二部分是可用的vring(Available Vring),这是前端驱动设置的表示后端设备可用的描述符表中的索引
  • 第三部分是已经使用的vring(Used Vring),这是后端设备在使用完描述符表后设置的索引,这样前端驱动可以知道哪些描述符已经被用了。

至此,对于问题“virtio会创建哪些设备?”就有了初步答案。这个问题会转换为virtio后端设备都有哪些?根据上图可知,分为两大类设备virtio PCI控制设备virtio设备。具体来说,就是virtio-pci设备和具体的virtio设备,包括:

1af4:1041  network device (modern)
1af4:1042  block device (modern)
1af4:1043  console device (modern)
1af4:1044  entropy generator device (modern)
1af4:1045  balloon device (modern)
1af4:1048  SCSI host bus adapter device (modern)
1af4:1049  9p filesystem device (modern)
1af4:1050  virtio gpu device (modern)
1af4:1052  virtio input device (modern)

legacy:
#define PCI_DEVICE_ID_VIRTIO_NET         0x1000
#define PCI_DEVICE_ID_VIRTIO_BLOCK       0x1001
#define PCI_DEVICE_ID_VIRTIO_BALLOON     0x1002
#define PCI_DEVICE_ID_VIRTIO_CONSOLE     0x1003
#define PCI_DEVICE_ID_VIRTIO_SCSI        0x1004
#define PCI_DEVICE_ID_VIRTIO_RNG         0x1005
#define PCI_DEVICE_ID_VIRTIO_9P          0x1009
#define PCI_DEVICE_ID_VIRTIO_VSOCK       0x1012
#define PCI_DEVICE_ID_VIRTIO_PMEM        0x1013
#define PCI_DEVICE_ID_VIRTIO_IOMMU       0x1014
#define PCI_DEVICE_ID_VIRTIO_MEM         0x1015

下一回对于细节进行讲解,在初步回答此面试问题的基础上,深入回答此问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1411763.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React复习记录

1、Outlet的作用 <Outlet /> 是一种在 React 路由器中使用的特殊组件&#xff0c;它用于渲染当前路由的子路由。在一些情况下&#xff0c;我们可能只想渲染子路由&#xff0c;而不需要使用上下文传递任何参数。这种情况下&#xff0c;可以直接使用 <Outlet /> 组件…

java servlet果蔬产业监管系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web果蔬产业监管系统是一套完善的java web信息管理系统 serlvetdaobean mvc 模式开发 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主 要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5…

Maven(上):Maven介绍、安装配置及工程构建

1. Maven介绍 Maven 是一款为 Java 项目管理构建、依赖管理的工具&#xff08;软件&#xff09;&#xff0c;使用 Maven 可以自动化构建、测试、打包和发布项目&#xff0c;大大提高了开发效率和质量。 Maven就是一个软件&#xff0c;掌握安装、配置、以及基本功能 &#xff…

国密算法:定义、应用与重要性

国密算法是指由中国国家密码管理局发布的密码算法标准&#xff0c;旨在保障国家信息安全。目前&#xff0c;国家密码管理局已发布了一系列国产商用密码标准算法&#xff0c;包括SM1&#xff08;SCB2&#xff09;、SM2、SM3、SM4、SM7、SM9以及祖冲之密码算法&#xff08;ZUC)等…

MIT_线性代数笔记:线性代数常用计算公式

目录 1.矩阵的加法和数乘2.矩阵的乘法3.转置 Transposes 相关运算 1.矩阵的加法和数乘 2.矩阵的乘法 1)标准方法&#xff08;行乘以列&#xff09; 矩阵乘法的标准计算方法是通过矩阵 A 第 i 行的行向量和矩阵 B 第 j 列的列向量点积得到 cij。即我们常说的点积&#xff0c;也…

用Excel辅助做数独

做数独游戏的时候&#xff0c;画在纸上很容易弄花眼&#xff0c;所以我考虑用Excel辅助做一个。 界面如下&#xff1a; 按下初始化表格区域按钮&#xff0c;会在所有单元格中填充“123456789”。如下图&#xff1a; 当某个单元格删除得只剩一个数字时&#xff0c;会将同一行、…

安利一款抢票软件堪称“业界良心”,全网好评!

马上就到了春运了&#xff0c;有不少网友反映12306买票太难了。 有粉丝在后台留言问有没有抢票软件&#xff1f; 知名公司开发的抢票软件&#xff0c;需要助力、需要用钱买加速包&#xff0c;这对于需要白嫖的朋友来说无疑是“雪上加霜”&#xff01; 这里从解决实际问题的角度…

RocketMQ源码安装

RocketMQ源码安装 1.官方下载地址 http://rocketmq.apache.org/dowloading/releases/ 2.环境要求 1.Linux64位系统 2.JDK1.8(64位) 3.Maven 3.2.x以上 3.IntelliJ IDEA导入 导入后执行Maven命令install mvn install -Dmaven.test.skiptrue 4.调试RocketMQ源码 4.1启动…

5JS语句

表达式在JavaScript中是短语&#xff0c;那么语句&#xff08;statement&#xff09;就是JavaScript整句或命令。 表达式计算出一个值&#xff0c;但语句用来执行以使某件事发生。诸如赋值和函数调用这些有副作用的表达式&#xff0c;是可以作为单独的语句的&#xff0c;这种把…

gitlab设置/修改克隆clone地址端口

最近由于公司要停测试库云服务器? 什么?要停测试库服务器??? 是的! 你没听错。 真是醉了,多大的集团,为了省钱,也真是拼了, 作为开发人员,没有测试服务器,犹如断臂之人。 所以,在之前搭建环境的时候都没有写文档,今天算是弥补上,以后都可以作为参考了, …

vue3 根据点击位置,实现一个用户头像弹框定位

vue3 根据点击位置&#xff0c;实现一个用户头像弹框定位 需求背景 最近在做直播后台&#xff0c;涉及到对用户的一些操作&#xff0c;比如关注/取关/禁言/踢出直播间。多个地方都要用&#xff0c;需要封装一个弹框组件 效果图 实现过程分析 根据点击元素&#xff0c;获取元…

在游戏里开公司!基于ERNIE SDK的多智能体游戏应用

在虚拟世界有一座神奇的办公室&#xff0c;当你输入你的创业方向&#xff0c;办公室的智慧打工人们将团结合作&#xff0c;为你的项目勤劳奔走&#xff0c;并在过程中&#xff0c;把日报周报都写好&#xff0c;让你随时掌握项目进度和最终成果&#xff01;该项目基于ERNIE SDK开…

频率的高低与辐射强度有关系吗?

频率的高低和辐射强度之间存在一定的关系。 一般而言&#xff0c;频率越高&#xff0c;辐射强度越大&#xff0c;即电磁辐射的能量越大。这是因为电磁波的能量与其频率成正比。在电磁波谱中&#xff0c;如X光和伽玛射线具有高频率和强辐射强度&#xff0c;可以破坏构成人体组织…

Python静态web服务器实战

准备html页面&#xff0c;包含两个页面(index.html, index2.html)和一个404(404html)页面&#xff0c;目录示意&#xff1a; 1.返回固定页面 with open("website/index.html","r") as file: import socket# # 返回固定的页面 website/index.html if __na…

怎么将word转换成pdf?一步到位,轻松搞定!

怎么将word转换成pdf&#xff1f;在数字时代&#xff0c;我们经常需要将文档转换为PDF格式&#xff0c;以便在不同的设备和平台上共享和查看。然而&#xff0c;许多人对如何将Word转换成PDF感到困惑。本文将为你详细介绍将Word转换成PDF的步骤&#xff0c;让你轻松掌握这一技能…

php+Layui开发的网站信息探针查询源码

信息探针是一款基于layui开发的专业查询好友个人信息的程序。 自定义设置探针页面&#xff0c;探针功能&#xff0c;QQ分享&#xff0c;通知邮箱等功能。 生成页面链接好友点击会出现好友ip 位置信息&#xff0c;手机型号ua头浏览器等信息 gps需要注册百度地图开发者才可以使用…

【RabbitMQ】延迟队列之死信交换机

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《RabbitMQ实战》。&#x1f3af;&#x1f3af; &am…

代码随想录算法训练营第31天(贪心算法01 | ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和

贪心算法01 理论基础455.分发饼干解题思路 376. 摆动序列解题思路拓展 53. 最大子序和解题思路常见误区注意点 贪心算法其实就是没有什么规律可言&#xff0c;所以大家了解贪心算法 就了解它没有规律的本质就够了。 不用花心思去研究其规律&#xff0c; 没有思路就立刻看题解。…

mysql入门到精通002--基础篇

1、基础篇课程内容 2、MySQL概述 2.1 数据库相关概念 2.1.1、数据库 存储数据的仓库 2.1.2、SQL 操作关系型数据库的一套标准语言&#xff0c;定义了一套关系型数据库的统一标准。 2.1.3、关系型数据库管理系统 2.2 mysql数据库 2.2.1 安装与使用 下载地址&#xff1a;…

婴幼儿营养之道:新生儿补充磷脂酰丝氨酸的关键

引言&#xff1a; 磷脂酰丝氨酸是一种对于新生儿神经系统发育和整体健康至关重要的成分。在新生儿成长的早期阶段&#xff0c;科学合理的补充磷脂酰丝氨酸有助于促进大脑和神经系统的发育&#xff0c;为宝宝的智力和身体健康奠定坚实基础。本文将深入探讨磷脂酰丝氨酸的作用、…