QEMU和KVM在虚拟机I/O中扮演什么角色?

2024-01-21

我发现 QEMU 和 KVM 之间的界限非常模糊。我发现有人说虚拟机是qemu进程,而另一些人说是kvm进程。究竟是什么? 而QEMU和KVM在虚拟机I/O中扮演什么角色呢?比如一个vm做PIO/MMIO的时候,是qemu还是kvm会把它困住,转成硬件操作。还是双方都有责任?


KVM:Linux 内核中的代码,为用户空间提供友好的接口以使用 CPU 虚拟化。这包括用户空间可以调用“创建 CPU”、“运行 CPU”等的函数。对于完整的虚拟机,您需要有一些可以使用它的用户空间代码。这通常是 QEMU,或者更简单的“kvmtool”;一些大型云提供商有自己的自定义用户空间代码。

QEMU:模拟虚拟硬件,包括磁盘、内存、CPU、串行端口、图形和其他设备。还提供用于执行启动、停止和迁移等操作的机制(UI 和一些可编程接口)。 QEMU 支持多种不同的“加速器”模式来处理 CPU 模拟:

  • TCG:纯仿真——在任何地方都可以工作,但速度很慢
  • KVM:使用 Linux 内核的 KVM API 来允许使用主机 CPU 硬件虚拟化支持运行来宾代码
  • hax:与KVM类似,但使用Intel HAXM代码,可在Windows主机上运行

从实现的角度来看,KVM 和 QEMU 之间的界限非常清晰——KVM 是主机内核的一部分,而 QEMU 是一个单独的用户空间程序。对于用户来说,您通常不必关心边界在哪里,因为这是一个实现细节。

回答有关 MMIO 发生情况的问题:

  • 访客进行 MMIO 访问
  • 这被硬件捕获到主机内核
  • 然后,主机内核 (KVM) 可能会模拟此 MMIO 访问本身,因为出于性能原因,在内核中实现了一些设备。这通常仅适用于中断控制器,也许还适用于 iommu。
  • 否则,KVM 将 MMIO 访问报告回用户空间(即 QEMU、kvmtool 等)
  • 然后,用户空间可以使用其设备模拟代码来处理访问
  • 然后用户空间将结果(例如返回读取的数据)返回给内核
  • 内核根据需要更新vcpu的寄存器状态以完成指令的模拟
  • 然后内核按照以下指令恢复 VM 的执行
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QEMU和KVM在虚拟机I/O中扮演什么角色? 的相关文章

  • 如何通过代理将套接字连接到http服务器?

    最近 我使用 C 语言编写了一个程序 用于连接到本地运行的 HTTP 服务器 从而向该服务器发出请求 这对我来说效果很好 之后 我尝试使用相同的代码连接到网络上的另一台服务器 例如 www google com 但我无法连接并从网络中的代理
  • 如何确保 numpy BLAS 库可用作动态加载库?

    The theano安装文档 http www deeplearning net software theano install html troubleshooting make sure you have a blas library指
  • Yocto“无法运行 qemu:无法初始化 SDL(x11 不 > 可用)”

    所以我在本地构建服务器上安装了 Yocto 因为谁希望大规模构建占用他们的工作区 amirite 主机和服务器是Arch Linux 4 19 44 1 lts 无论如何 我只是从找到的快速构建页面运行示例here https www yo
  • 无法仅在控制台中启动 androidstudio

    你好 我的问题是下一个 我下载了Android Studio如果我去 路径 android studio bin 我执行studio sh 我收到以下错误 No JDK found Please validate either STUDIO
  • 套接字:监听积压并接受

    listen sock backlog 在我看来 参数backlog限制连接数量 这是我的测试代码 server initialize the sockaddr of server server sin family AF INET ser
  • 如何成功使用RDAP协议代替whois

    我对新的 RDAP 协议有点困惑 也不知道何时进一步追求它有意义 在我看来 每个人都同意它是 whois 的继承者 但他们的数据库似乎是空的 在 ubuntu 上我尝试了 rdapper nicinfo 甚至他们的 RESTful API
  • numpy 未定义符号:PyFPE_jbuf

    我正在尝试使用一百万首歌曲数据集 为此我必须安装 python 表 numpy cython hdf5 numexpr 等 昨天我设法安装了我需要的所有内容 在使用 hdf5 遇到一些麻烦之后 我下载了预编译的二进制包并将它们保存在我的 b
  • 如何获取 linux 实用程序 tail 的源代码?

    这个命令确实非常有用 但是我可以在哪里获取源代码以查看内部发生的情况 thanks tail 实用程序是 Linux 上 coreutils 的一部分 源压缩包 ftp ftp gnu org gnu coreutils coreutils
  • 构建 makefile 依赖/继承树

    如果我解释得不好或者问了一些明显的问题 我很抱歉 但我是 Linux 内核的新手 而且有点深入 我们有一个嵌入式 Linux 系统 它附带一个 文档非常糟糕的 SDK 其中包含数百个文件夹stuff 大多数文件夹包含rules make m
  • 伊迪德信息

    重新定义问题 有什么方法可以获取所连接显示器的序列号吗 我想收集显示器的Eid信息 当我使用 logverbose 选项运行 X 时 我可以从 xorg 0 log 文件中获取它 但问题是 如果我切换显示器 拔出当前显示器 然后插入另一个显
  • 无法安装 WWW::Curl::Easy: SZBALINT/WWW-Curl-4.17.tar.gz : make NO

    我正在尝试在我的 Fedora 26 机器上安装 WWW Curl Easy gcc c I usr include D REENTRANT D GNU SOURCE O2 g pipe Wall Werror format securit
  • 如何在CentOS7中更改docker守护进程根目录

    我在 CentOS7 上运行 docker 我想更改我的基本目录 var lib docker to data docker I found this https docs docker com engine reference comma
  • 每个进程每个线程的时间量

    我有一个关于 Windows 和 Linux 中进程和线程的时间量子的问题 我知道操作系统通常为每个线程提供固定的时间量 我知道时间量根据前台或后台线程而变化 也可能根据进程的优先级而变化 每个进程有固定的时间量吗 例如 如果操作系统为每个
  • 适用于 KDE 和 Gnome 的 Gui [重复]

    这个问题在这里已经有答案了 我想为一个现在是 CLI 的应用程序编写一个 gui 它需要在 KDE 和 Gnome DE 中 看起来不错 充分利用用户的外观设置 如果我选择 Qt 或 GTK 我能够做到这一点吗 它们与两个 DE 集成良好吗
  • 归档文件系统或格式

    我正在寻找一种文件类型来存储已退役系统的档案 目前 我们主要使用 tar gz 但从 200GB tar gz 存档中查找并提取几个文件是很麻烦的 因为 tar gz 不支持任何类型的随机访问读取规定 在你明白之前 使用 FUSE 安装 t
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • PHP 致命错误:未找到“MongoClient”类

    我有一个使用 Apache 的网站 代码如下 当我尝试访问它时 我在 error log 中收到错误 PHP Fatal Error Class MongoClient not found 以下是可能错误的设置 但我认为没有错误 php i
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • 嵌入式Linux poll()不断返回

    我有一个特别的问题 当我知道没有什么可读时 民意调查不断返回 因此设置如下 我有 2 个文件描述符 它们构成fd设置民意调查监视 一种用于引脚从高到低的变化 GPIO 另一个用于代理输入 代理输入出现问题 处理的顺序是 启动main函数 然

随机推荐

  • 使“ls”命令将“a”排序在“B”之前(与a->b->A->B)

    我正在尝试找到一种方法以不区分大小写的方式打印 ls 命令的结果 目前 ls 命令的结果是 Apple Boy Chart Dock apples boys charts docks 我想要的是这样的 Apple apples Boy bo
  • Swagger UI 错误地以小写形式显示 XML 请求的属性

    我有一个使用 Swagger 的基本 NET 6 Web API 项目 并且有一个应该接受 JSON 和 XML 的虚拟 HttpPost 端点 据我所知 JSON 的模型绑定不区分大小写 但 XML 则不然 这就是我的问题 在 Progr
  • 如何通过Python从chrome获取URL [重复]

    这个问题在这里已经有答案了 我想分析哪些网站在当前选项卡中打开 即使它也使用 python 3 打开下一个选项卡 请任何人提供链接或任何建议我如何才能得到它 我想将其输入 python 控制台 例如 如果我打开新的网址 它应该打印到控制台
  • Url.Action 如何工作 Asp.net MVC?

    这与我问过的另一个问题有些相关 但我想为什么不单独问它 如果我要在视图中放置类似以下内容 td img src alt td 应该显示这个吗 td img src User mvc DisplayImage id U00915441 alt
  • CSS3 中的滑动动画

    我目前正在开发一个用 HTML 5 CSS3 和 jQuery 编写的移动应用程序框架 对于 屏幕 的标记 我有以下布局 div class page div div class page div 我目前正在使用 jQuery 来检测第一个
  • 使用 pandas xlsxwriter 模块使用条件格式格式化整行

    我正在使用 pandas xlsxwriter 模块创建 Excel 报告 下面是相同的代码片段 number rows len df index df is dataframe writer pd ExcelWriter Report 1
  • Files#delete(Path) 和 File#delete() 之间的区别

    我正在使用带有 java 7 update 6 的 Windows 7 并发现这种奇怪的 至少对我来说 行为 我有两个文件E delete1 txt and E delete2 txt两者都是只读文件 当我尝试删除如下文件时 它会被删除而没
  • 从年月(yyyy-MM)到年月(yyyy-MMMM)[重复]

    这个问题在这里已经有答案了 我有一个变量 YearMonth date 里面站立的地方 2016 07 例如 我希望它仍然是 YearMonth 但是 2016 july 注意 没有 分隔符 或者更好的是 2016 luglio 即意大利语
  • 我可以使用 firebase 作为 flutter 桌面应用程序的后端吗?如果是这样怎么办?

    我正在使用 flutter 构建一个桌面应用程序 我可以使用 firebase 作为后端吗 如果是这样怎么办 如果您查看 Firebase 文档可用的插件 https firebase google com docs flutter set
  • 将支持 bean 作为参数传递给 Facelet include

    我有一个可以在不同应用程序中使用的 Facelet 我不是要复制它 而是重复使用它 我需要传递将管理视图的支持 bean 作为参数 因为某些逻辑可能会根据使用它的应用程序而有所不同 我不想使用复合组件 而只是包含 Facelet 并指定哪个
  • Dojo,如何在 DIV 上执行 onclick 事件

    互联网上有一个淡出示例 http docs dojocampus org dojo fadeOut t tundra http docs dojocampus org dojo fadeOut t tundra 但我想做一些不同的事情 我希
  • 返回 PHP 多维数组中最后一个数组的元素

    如何在 PHP 中动态显示最后一个数组中的元素 例如 Array 0 gt Array id gt 6 user id gt 8 category path gt Sport 1 gt Array id gt 8 user id gt 8
  • syscall_thread_switch iOS 8.3 竞赛 - CocoaLumberjack bug?如何调试这个?

    我在我的应用程序中遇到了竞争条件 每当我暂停调试时 所有或除 1 个线程之外的所有线程都会卡在 syscall thread switch 上 它在模拟器上重现得更频繁 在 iPad Air 上也是如此 CocoaLumberjack 的
  • 从 Hibernate 4.3.6 迁移到 Hibernate 5

    我有一个旧项目 我使用 Java API 中的 Date 我想将其更改为新的 Java 8 Date APILocalDateTime 我读到 Hibernate 5 之前的版本不支持新的 Java 8 Date API 我决定从 Hibe
  • 原生 Vim 随机数脚本

    我知道有多种方法可以获取随机数 例如从 shell 中 然而 我在 Android 手机上运行 vim 几乎没有编译 而且 它不必是严格随机的 关键是 在 Vim 中获取一系列相当好的随机数的有趣 简洁 快速 即使用 vim 原生函数 或简
  • MS Access 2010 运行时 - 连续形式中缺少鼠标右键单击上下文菜单

    我在 MS Access 2003 中编写了一个应用程序 我可以使用 Access 2010 运行该应用程序 但是当我仅使用 MS Access 2010 运行时打开同一个 2003 应用程序时 我无法再以连续形式使用鼠标右键单击 因为我可
  • 向下转型最佳实践 (C++)

    静态代码分析工具往往会大量谈论 将基类向下转换为派生类 我还发现了一些编码标准指南 其中提到不要这样做 所以我想知道什么是最佳实践方法 这是我的用例 我有一个 Base 接口 DerivedA DerivedB 类 然后是一个包含 Base
  • 如何在codeigniter中使用pdo?

    据我所知 PDO 支持最近已添加到 codeigniter 但我找不到任何有关如何实际使用它的文档或教程 谁能告诉我如何使用它 您可以编辑 application config database php并启用 PDO 驱动程序 db def
  • Java中Float的最大值?

    下列question https stackoverflow com questions 3884793 minimum values and double min value in java表示 Double 的最小值是 Double M
  • QEMU和KVM在虚拟机I/O中扮演什么角色?

    我发现 QEMU 和 KVM 之间的界限非常模糊 我发现有人说虚拟机是qemu进程 而另一些人说是kvm进程 究竟是什么 而QEMU和KVM在虚拟机I O中扮演什么角色呢 比如一个vm做PIO MMIO的时候 是qemu还是kvm会把它困住