倚天产品介绍|倚天虚拟化:CPU虚拟化原理介绍

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 虚拟化技术中最关键的技术之一就是CPU虚拟化。在没有硬件辅助虚拟化技术出来之前,通常都是通过TCG(软件进行指令翻译)的方式实现CPU虚拟化。但是由于TCG方式的虚拟化层开销太大,性能太差,因此引入了硬件辅助虚拟化技术。

1. 概述

虚拟化技术中最关键的技术之一就是CPU虚拟化。在没有硬件辅助虚拟化技术出来之前,通常都是通过TCG(软件进行指令翻译)的方式实现CPU虚拟化。但是由于TCG方式的虚拟化层开销太大,性能太差,因此引入了硬件辅助虚拟化技术。

1.1 Intel的硬件辅助虚拟化

Intel的硬件辅助虚拟化技术叫做Intel-VT (Virtualization Technology)技术。具备这种硬件辅助虚拟化技术的CPU包括VMX root operation 和 VMX non-root operation两种模式。两种模式都支持Ring 0 ~ Ring 3 共 4 个运行级别。宿主机的VMM运行在VMX root operation模式下。客户机操作系统及其他应用运行在VMX non-root operation模式下。一般来说,客户机的操作系统直接运行在VMX non-root operation模式的Ring0层,大部分指令可以直接发送给CPU而不需要经过VMM。只有在执行一些比较特殊的指令时才会切换到VMM下。

1.2 ARM的硬件辅助虚拟化

ARM的硬件辅助虚拟化技术叫做ARM-V (Virtualization) 技术,从ARMv8开始比较好的支持这种硬件辅助虚拟化技术。类似X86根/非根模式,ARM引入多个异常级来控制资源访问权限。宿主机上VMM运行在EL2层,客户机操作系统运行在EL1层,应用程序运行在EL0层。

1.2.1 ARMv8 CPU异常级

ARMv8的异常级分为4级(EL0~EL3),权限也是从低到高。同时也分了两个CPU运行状态(Non-secure和Secure),顾名思义为了安全和非安全的运行态,此处不扩展。每一级运行的内容如下图所示:

1622104323048-59e3bfce-1428-4a24-aa6e-63fc972e5e3a.png

运行在不同异常级最大的区别就是能够访问的寄存器组不同,同时也影响了某些硬件行为(比如对页表的lookup)。运行在高异常级时可以访问低异常级的寄存器组,反之不行。

为了切换到更高的异常级(主动触发某个异常级的异常),需要主动执行特殊的指令:

  • Supervisor Call (SVC)。一般由EL0切换到EL1的指令,会进入EL1的异常向量表。
  • Hypervisor Call (HVC) 。Non-secure EL1切换到EL2的指令,会进入到EL2的异常向量表。
  • Secure monitor Call (SMC) 。切换到EL3的指令,只有在EL1、EL2执行有效。

1.2.2 Virtualization Host Extensions(VHE)特性

ARM有一个比较特殊的技术叫做VHE (Virtualization Host Extension)。如果CPU支持VHE特性,那么宿主机的Linux内核和VMM都运行在EL2异常级,这样可以减少EL1和EL2之间模式切换的次数,具备更高的性能。在不支持VHE的CPU上,VMM代码被分成两部分在不同的异常级执行,其中一部分运行在EL2,比如捕获Guest OS退出异常、VM-Exit保存恢复上下文,另一部分VMM代码和Host内核在EL1异常级执行,这样Hypervisor在进行资源管理和虚拟机调度时需要在EL1和EL2之间进行切换,效率会低一些。


1622034426236-16e079fa-4765-4e3f-9dac-0810424d3695.png

如上图所示,在引入VHE之前(b图),Host Kernel被分为两个部分,一部分在EL1,另外一部分(KVM中的Lowisor)在EL2。如果VM发生中断,那么会首先Trap到EL2的Lowisor,然后调用Eret回到EL1的KVM进行处理。当处理完之后,再次进入VM之前,需要再Trap进入EL2,然后再调用Eret回到VM。总共发生了2次Trap,以及调用了2次Eret。不管是软件还是硬件的开销,都不小,尤其是频繁VM exit的情况下。

引入VHE之后(c图),Host Kernel完全运行在EL2上。因此,当VM发生中断,Trap到EL2后,所有的处理逻辑都会在EL2实现,而不需要再回到EL1做额外的处理。对比non-VHE,减少了大量Trap带来的软件和硬件上的开销。

2. Qemu-KVM CPU虚拟化

Qemu-KVM是当前主流的一种虚拟化实现方式。从总体框架上看,大致如下图:

1622021730496-2d777b1b-10b0-413f-8ac7-c474c8185388.png

大致分为qemu和内核KVM的视角来分析。

2.1 Qemu视角

首先,因为Qemu也是用户态程序,所以运行在EL0。Qemu会为虚拟机创建配置的vCPU,每个vCPU就是一个线程(thread)。同时,Qemu也创建了其他的辅助线程,比如用来处理主线程事件的event loop线程、处理IO请求的io threads、vnc worker threads等。当然,Qemu除了模拟CPU,也可以模拟虚拟机的其它任何设备,本文着重分析KVM vCPU线程的实现(硬件辅助虚拟化下虚拟CPU的模拟)。

连接qemu和kvm的桥梁就是通过ioctl来请求/dev/kvm的接口服务。因此,KVM相关的功能,通过/dev/kvm设备的形式呈现给了userspace。

2.2 KVM视角

KVM作为Linux内核的一个模块,集成了硬件虚拟化扩展的功能(可以认为就是硬件虚拟化特性的驱动模块)。ARM的KVM模块在目前的开源最新版本还不支持配置成模块化的方式,只能内建于Linux内核。

KVM提供了几个重要的ioctl接口。

  • KVM_CREATE_KVM:创建一个虚拟机,并返回一个fd_vm的虚拟机文件描述符。
  • KVM_CREATE_VCPU:可以对fd_vm所对应的虚拟机创建vCPU,并对vCPU做初始化操作。
  • KVM_RUN:对fd_vcpus操作,启动运行虚拟机。

每个vCPU thread通过调用KVM_RUN ioctl来执行vCPU结构体中保存的Guest代码。当虚拟机上下文发生异常、中断、执行高权限指令时,虚拟机会发生VM exit,Trap到Hyp Mode回到KVM,由KVM接管、处理产生的异常、中断,以及必要时是否模拟执行的高特权指令。

某些异常是KVM处理不了的,比如虚拟机内部读写virtio设备的地址空间产生的VM exit,此时KVM会返回到Qemu,由Qemu做进一步处理,待Qemu处理完之后,再通过KVM_RUN ioctl重新回到虚拟机上下文。

3. 小结

本文主要介绍了ARM硬件辅助虚拟化原理,ARMv8 VHE特性。通过分析Qemu-KVM虚拟化软件流程,配置CPU异常级,模拟VCPU线程,控制虚拟机陷入陷出,最终达到物理CPU资源复用的能力。

好啦!小弹的分享到此为止。我们更欢迎您分享您对阿里云产品的设想、对功能的建议或者各种吐槽,请扫描提交问卷并获得社区积分或精美礼品一份。https://survey.aliyun.com/apps/zhiliao/P4y44bm_8

【扫码填写上方调研问卷】

欢迎每位来到弹性计算的开发者们来反馈问题哦~

相关文章
|
6月前
|
SQL Java 数据库连接
联表查询 && 索引 && 事务 && JDBC使用 &&CPU工作原理 && 线程概念 && Thread类的用法
联表查询 && 索引 && 事务 && JDBC使用 &&CPU工作原理 && 线程概念 && Thread类的用法
135 0
|
1月前
|
存储 缓存 并行计算
【软件设计师备考 专题 】CPU和存储器的组成、性能和基本工作原理
【软件设计师备考 专题 】CPU和存储器的组成、性能和基本工作原理
56 0
|
1月前
|
存储 KVM 虚拟化
倚天产品介绍|倚天虚拟化:虚拟机热迁移特性介绍
热迁移分为热迁移和冷迁移,冷迁移过程中有一段明显的时间VM的服务不可用,而热迁移的服务的服务暂停时间非常短。热迁移过程中无需关闭或者长时间暂停VM,VM保持正常运行,只有在热迁移临近结束时有一个非常短暂的停机切换时间。热迁移可保证了VM服务的可用性,提升业务的连续性和用户体验。
|
6月前
|
监控 数据挖掘 虚拟化
VMWare 虚拟机 CPU 设置里针对 CPU 的 虚拟化 CPU 性能计数器(U) 选项功能介绍
VMWare 虚拟机 CPU 设置里针对 CPU 的 虚拟化 CPU 性能计数器(U) 选项功能介绍
555 0
|
6月前
|
安全 虚拟化
VMWare 虚拟机 CPU 设置里针对 CPU 的虚拟化 IOMMU(IO 内存管理单元) 选项功能介绍
VMWare 虚拟机 CPU 设置里针对 CPU 的虚拟化 IOMMU(IO 内存管理单元) 选项功能介绍
377 0
|
1月前
|
JSON Java Serverless
nacos常见问题之cpu和内存占用高如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
184 0
|
2月前
|
弹性计算
2024阿里云幻兽帕鲁/Palworld服务器价格表(CPU/内存/带宽/磁盘收费标准)
2024年阿里云幻兽帕鲁专用服务器的价格根据不同的配置有所不同。 • 4核16G配置的价格为32元/月,如果选择购买3个月,则价格为96元。 • 8核32G配置的价格为90元/月,如果选择购买3个月,则价格为271元。 另外,还有配置为4核16G10M带宽的服务器,其价格为26元/月起。而8核32G10M带宽的价格也是90元/月。
96 1
|
6天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
|
1天前
|
Linux
Linux rsyslog占用内存CPU过高解决办法
该文档描述了`rsyslog`占用内存过高的问题及其解决方案。
14 4
|
26天前
|
存储 缓存 PHP
阿里云服务器实例、CPU内存、带宽、操作系统选择参考
对于使用阿里云服务器的用户来说,云服务器的选择和使用非常重要,如果实例、内存、CPU、带宽等配置选择错误,可能会影响到自己业务在云服务器上的计算性能及后期运营状况,本文为大家介绍一下阿里云服务器实例、CPU内存、带宽、操作系统的选择注意事项,以供参考。
阿里云服务器实例、CPU内存、带宽、操作系统选择参考