关于QEMU模拟器本身以及和CXL功能模拟相关内容的学习

2024-04-12 19:28

本文主要是介绍关于QEMU模拟器本身以及和CXL功能模拟相关内容的学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:在写Paper的时候,发现直接引用QEMU官网关于QEMU的介绍实在是一个图省事儿的方法,但是并不可取。即使是一小段,也要去真正了解QEMU的基本原理,如何实现功能模拟,以及目前实现的与CXL相关的内容。
注:本文主要是一些概念性的内容,关于具体如何通过QEMU模拟CXL type 3 设备,已经有其他文章阐述,在此不赘述。

需要关注以下几个问题:

  1. QEMU是什么?QEMU有哪些工作模式?
  2. QEMU是如何都支持哪些CXL相关的功能?是如何支持这些功能的?
  3. 另外,很多文章在谈到QEMU的时候都会提到KVM,什么是KVM?KVM又是如何与QEMU交互协作的?

问题一

QEMU全称Quick EMUlator,是一种开源的虚拟机监视器和仿真器,主要是为了实现功能上的模拟,并不关注系统内部的实现和真实世界是否一致。(很多文章将其译为模拟器,实际上是不准确的)

QEMU主要有2种用法,一种是作为emulator使用,另外一种是作为virtualizer使用。当作为emulator使用时,有2种具体的操作模式分别是full-system和user-mode。full-system会模拟系统的全部组件,包括处理器和外围设备,可以直接在其上运行操作系统;user-mode只是在当前宿主机的环境下,运行与当前CPU不同指令集的进程,即在CPUA上的可执行程序同样可以在CPUB上执行,但是二者的OS需要相同,因为用户层可执行程序仅仅是对OS的调用,所以通过qemu可以将arm指令描述的对OS 的调用翻译为对x86 指令描述的对OS的调用调用即可。当作为virtualizer使用时,通过底层的硬件支持(Intel-VT,AMD-V等虚拟化技术)和Xen或者KVM等系统级虚拟化技术相结合,高效运行虚拟化系统。一个arch (x86)的cpu + 外设,虚拟为多台相同arch + 不同外设的虚拟机器(不同层级虚拟化技术的结合+QEMU)。

那么emulator和virtualizer的区别是什么呢?
emulator通常是为了模拟不同指令集、不同体系架构的 CPU,所以多数情况要对微指令进行解释执行,效率相对与虚拟化慢很多;virtualizer基本都是去虚拟出来另外一套相同指令集相同架构的硬件平台,因此在做好保护的前提下,很多时候可以直接利用 CPU 去执行目标指令。虽然还是模拟物理 CPU 而不借助于 Host OS 的功能,少了一层指令集转换,运行速度会提高不少。

问题二

QEMU主要支持CXL2.0及更高版本。并实现了许多CXL系统标准组件,CXL系统的控制和功能通过系统软件使用CXL2.0 spec中描述的方法发现。
QEMU实现的CXL系统标准组件主要包括:CXL主机桥(Host Bridge),CXL根端口(CXL RP),CXL交换机以及CXL type 3设备等。

问题三

QEMU本身可以模拟底层的全部硬件,包括CPU,内存和硬件设备等,Guest OS将QEMU模拟出的硬件当成真实硬件进行交互,实际上QEMU会将操作系统的指令转译给真正的硬件。所有的指令都要通过QEMU进行转译,因此性能较差。
QEMU模拟架构
上图来自:https://blog.csdn.net/whatday/article/details/78445932

KVM本身是Linux内核的模块,它能够让Linux主机成为一个Hypervisor,KVM的主要功能是打开并初始化Virtual Machine Extension(VMX)功能,提供相应的接口以支持虚拟机运行。KVM只模拟CPU和内存,Guest OS的CPU指令不需要经过QEMU转译,直接运行,大大提高速度。

QEMU-KVM的出现主要是为了同时满足虚拟化性能和与底层模拟硬件的交互。此方式将QEMU模拟CPU、内存的代码换成KVM,而网卡,显示器等IO设备仍由QEMU负责,从而实现真正意义上的服务器虚拟化。

virtio_blk, virtio_net,由于QEMU模拟其他的硬件同样会影响设备的性能,于是又产生了pass through半虚拟化设备,以提高性能。

参考文献

[1]QEMU入门指南
[2]QEMU的编译与使用
[3]Qemu: User mode emulation and Full system emulation
[4]QEMU支持3种运行模式的理解
[5]CXL-QEMU
[6]KVM-Qemu-Libvirt三者之间的关系
[7]QEMU和KVM的关系

这篇关于关于QEMU模拟器本身以及和CXL功能模拟相关内容的学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/898025

相关文章

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

Android实现悬浮按钮功能

《Android实现悬浮按钮功能》在很多场景中,我们希望在应用或系统任意界面上都能看到一个小的“悬浮按钮”(FloatingButton),用来快速启动工具、展示未读信息或快捷操作,所以本文给大家介绍... 目录一、项目概述二、相关技术知识三、实现思路四、整合代码4.1 Java 代码(MainActivi

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字