目录
目录
- 目录
- 摘要
- 1.介绍
- 2.虚拟化技术分类
- 2.1 Hypervisor设计
- 1.完全宏内核设计
- 2.部分宏内核设计
- 3.微内核设计
- 2.2 虚拟化模式
- 1.全虚拟化
- 2.半虚拟化
- 3. **嵌入式系统的开源Hypervisor**
- 3.1 XEN
- 3.2 KVM
- 3.3 **X
- 3.4 ACRN
- 4.客户机IO事件模拟
- 4.1 Xen ARM
- 4.2 KVM ARM
- 4.3 Xvisor ARM
- 4.4 ACRN
- 5.主机中断
- 5.1 Xen ARM
- 5.2 KVM ARM
- 5.3 Xvisor ARM
- 5.4 ACRN
- 6. 锁同步延迟
- 7.内存管理
- 7.1 Xen ARM
- 7.2 KVM ARM
- 7.3 Xvisor ARM
- *参考*
摘要
开源的hypervisor:Xen,linux KVM,OKL4 Microvisor
本文:介绍Xvisor(eXtensible Versatile hypervisor),从对整个系统性能的影响上,与两个常用虚拟机管理器KVM和Xen进行对比
环境:ARM、linux
结论:在ARM处理器架构上,Xvisor具有更低的CPU开销,更高的内存带宽,更低的锁同步延迟和虚拟定时器中断开销,并且能够全面提升嵌入式系统性能。
1.介绍
(这一部分是原论文的介绍,在原文基础上,将ACRN也做相应的比较)
可行性分析:
1. 本次研究基于ARM架构。这是由于最新的ARM处理器架构已经提供了硬件虚拟化扩展,并且ARM处理器在嵌入式系统中已经得到了广泛应用。另外,这3个Hypervisor共有的的大部分板级支持包(BSP)都使用了ARM架构处理器。
2.KVM和Xen被选中作为对比的虚拟机管理器,是基于如下原因:
o ARM架构支持;
o 允许我们没有任何限制的收集性能数据的开源特性;
o 与Xvisor支持同样的单板;
o 在嵌入式系统中得到了应用。
时间约束测试:
o Hypervisor的低内存和CPU开销;
o Hypervisor最小负荷情况下的客户机调度效率。
2.虚拟化技术分类
2.1 Hypervisor设计
1.完全宏内核设计
完全宏内核Hypervisor使用一个单一的软件层来负责主机硬件访问,CPU虚拟化和客户机IO模拟。例如Xvisor和VMware ESXi Server
2.部分宏内核设计
通用目的宏内核操作系统的扩展。他们的操作系统内核支持主机硬件访问和CPU虚拟化,并通过用户空间软件支持客户机IO模拟。例如Linux KVM和VMware Workstation。
3.微内核设计
提供基本的主机硬件访问和CPU虚拟化功能,依赖于一个管理VM来支持整个主机的硬件访问、客户机IO模拟和其他服务。例如Xen,微软Hyper-V,OKL4 Microvisor和INTEGRITY Multivisor。
2.2 虚拟化模式
1.全虚拟化
允许未经修改的客户机操作系统作为客户机运行。(译者注:该模式需要借助硬件的虚拟化支持,例如X86架构AMD-V/Intel VT,ARMv8和Power架构的虚拟化profile等。)
2.半虚拟化
通过提供Hypercall(虚拟机调用接口)来进行各种IO操作(例如,网络收发,块读写,终端读写等等)。
3. 嵌入式系统的开源Hypervisor
3.1 XEN
特性:支持全虚拟化、半虚拟化,微内核,轻量级内核
功能:CPU虚拟化、MMU虚拟化、虚拟中断处理、客户机间通讯
Domain(域)是Xen内核相应于虚拟机或客户机的概念。
Dom0运行着一个Linux内核的修改版本,利用Linux内核提供IO虚拟化和客户机管理服务。优先级最高,对主机硬件有着完全访问权限。使用运行在Dom0用户空间的Xen工具栈来实现管理客户机的用户接口。
DomU运行Guest。
I/O处理:
- 半虚拟化客户机:客户机的IO事件模拟和半虚拟化通过DomU和Dom0之间的通讯来实现。使用Xen事件通道来完成。
- 全虚拟化客户机:使用运行在Dom0用户空间中的QEMU来模拟客户机IO事件。
优势:重用Linux内核现有的设备驱动和其他部分
劣势:Dom0只是Xen的另一个域,有它自己的嵌套页表,并且可能被Xen调度器调度出去。
3.2 KVM
特性:支持全虚拟化技术和半虚拟化技术的部分宏内核Hypervisor,以可选的VirtIO设备形式提供半虚拟化支持。
客户机模式:允许客户机操作系统与主机操作系统运行在相同的执行模式下
I/O处理:HOST将虚拟机视作一个QEMU进程,I/O访问将陷入到主机Linux内核。KVM在HOST上虚拟化CPU,依赖于运行在用户空间的QEMU来处理客户机IO事件。
KVM包含两个组件:
- 内核空间字符设备驱动,通过一个字符设备文件/dev/kvm提供CPU虚拟化服务和内存虚拟化服务
- 提供客户机硬件模拟的用户空间模拟器(如qemu)
IOCTRL:实现与这两个组件之间的服务请求通讯,例如虚拟机和vCPU的创建
优势:重用Linux内核现有的设备驱动和其他部分
劣势:KVM的 客户机模式到主机模式 的 虚拟机切换 依赖于 嵌套页表故障机制,特殊指令陷阱(Trap),主机中断,客户机IO事件,和另一个从主机模式唤醒客户机执行的虚拟机切换,导致了KVM整体性能本质上的降低。
3.3 **X
特性:支持全虚拟化和版虚拟化技术的完全宏内核Hypervisor,以VirtIO设备的形式提供半虚拟化支持。轻量级
Xvisor的所有核心组件,例如CPU虚拟化,客户机IO模拟,后端线程,半虚拟化服务,管理服务和设备驱动,都作为一个独立的软件层运行,不需要任何必备的工具或者二进制文件。
Orphan vCPUs:没有分配给某个客户机的vCPU。运行所有设备驱动和管理功能的后端处理。
客户机配置信息:以设备树(Device Tree)的形式维护。
优势:
最高特权等级的单一软件层提供所有虚拟化相关服务。上下文切换非常轻量级。嵌套页表、特殊指令陷阱、主机中断和客户机IO事件等的处理也非常快速。
所有设备驱动都作为Xvisor的一部分直接运行,具有完全的特权并且没有嵌套页表。
Xvisor的vCPU调度器是基于单CPU的,不处理多核系统的负载均衡。
劣势:缺少Linux那样丰富的单板和设备驱动
3.4 ACRN
特性:VMXVirtual Machine Extension)是Intel 64和IA-32架构处理器级别的功能,用于支持虚拟化。理论上支持全虚拟化,通过vitio实现半虚拟化。可以看出是微内核的Hypervisor。对设备的虚拟化由Hypervisor实现,设备驱动模块在SVM上。
实时、安全。
4.客户机IO事件模拟
4.1 Xen ARM
DomU发起IO:
- Xen Hypervisor监测到IO事件
- Xen事件通道转发
- Dom0内核接收到Xen事件
- Dom0由内核态转换成用户态,QEMU模拟IO事件
- HYP唤醒DomU
开销来源:红框所圈的xen事件通道和由内核态向用户态的上下文切换增加了IO的开销。
4.2 KVM ARM
客户机发起IO:
- 客户机IO事件引起一个VM-Exit事件,引起KVM从客户机模式切换到主机模式。
- 主机内核态
- 主机由内核态转换为用户态,交给QEMU处理客户机IO事件。
- VM-enter发生,引起KVM从主机模式切换到客户机模式。
开销来源:VM-exit和Vm-enter上下文切换
4.3 Xvisor ARM
客户机发起IO:
- Xvisor ARM捕获客户机IO事件
- 事件在标志2处的不可睡眠的通用上下文中被处理以确保时间被处理(是架构上的孤儿vcpu吗?)
4.4 ACRN
**SVM的IO流:ACRN只捕获其对中断设备的访问(红框),其他I / O访问直接进入物理设备(绿框)。中断设备包括可编程中断控制器(PIC),I / O高级可编程中断控制器(IOAPIC)和本地高级可编程中断控制器(LAPIC)。
虚拟化中断设备的好处:每个VM可以任意配置虚拟中断设备,而不必担心中断向量冲突。此外,所有虚拟中断设备都在hypervisor中进行仿真,以实现快速响应。
UVM的IO流:非直通设备:①通过1~3步将I / O访问转发到hypervisor内虚拟中断设备 或 ②通过1~5步转发到SVM中,创建一个I/O请求,并将其发送到“ Virtio和虚拟机管理程序服务模块(VHM)”中的I / O调度程序,该模块是提供远程服务的SOS内核模块。
RTVM的IO流:一般都是直通设备。
5.主机中断
5.1 Xen ARM
中断处理:Dom0
流程:
- Xen内核捕捉到主机IRQ(中断请求)的触发
- 由HYP路由到Dom0
- 切换到Dom0内核态
- Dom0处理中断
注意:如果一个主机中断在DomU运行时被触发,那么它将在Dom0被调度进来后才能得到处理
5.2 KVM ARM
流程:
- 主机IRQ触发VM-exit
- 主机进入内核态
- 主机IRQ处理
- VM-entry恢复客户机
**开销:**VM-exit和VM-entry增加了相当大的主机中断处理开销。如果主机中断被转发到KVM客户机,那么调度开销也会存在。
5.3 Xvisor ARM
Xvisor的主机设备驱动通常作为Xvisor的一部分以最高权限运行。处理主机中断时是不需要引发调度和上下文切换开销的。只有当主机中断被转发到一个当前没有运行的客户机时,才会引发调度开销。
5.4 ACRN
SVM的IRQ流程:物理中断由Hypervisor的中断分配器转发给虚拟中断控制器。
UVM的IRQ流程:一种是由中断分配器进行分配,一种是经由SVM处理后,交由中断分配器转发。
RTVM:只处理MSI
6. 锁同步延迟
产生原因:Hypervisor调度器和客户机OS调度器互相意识不到对方,导致客户机vCPU被Hypervisor随意抢占。
vCPU抢占问题:当一个运行在持有锁的某主机CPU(pCPU0)上的vCPU(vCPU0)被抢占,而同时另一个运行在其他主机CPU(pCPU1)上的vCPU(vCPU1)正在等待这个锁,那么vCPU抢占问题就会发生。
vCPU堆积问题:发生在一个运行着多个vCPU的单主机CPU上的锁调度冲突问题也会导致vCPU堆积问题发生。也就是说,希望获取某个锁的vCPU(vCPU1)抢占了运行在同一个主机CPU上的vCPU(vCPU0),但是vCPU0正在持有这个锁。
在ARM机构上,操作系统典型的使用WFE(等待事件)指令来等待请求一个锁,并使用SEV(发送事件)指令来释放一个锁。ARM架构允许WFE指令被Hypervisor捕获,但是SEV指令不能被捕获。
堆积问题的解决方案:所有3种Hypervisor(Xen ARM,KVM ARM和Xvisor ARM)都使用捕获WFE指令的方法使得vCPU让出时间片。
vCPU抢占问题的解决方案:通过使用半虚拟化锁的方式来解决,但是需要对客户机操作系统进行源码级的修改。
7.内存管理
ARM架构提供2级翻译表(或者说嵌套页表),用于客户机内存虚拟化,即图13所示的2阶段MMU。客户机操作系统负责编程第1阶段页表,将客户机虚拟地址(GVA)翻译到间接物理地址(IPA)。ARM Hypervisor负责编程第2阶段页表来从将间接物理地址(IPA)翻译成实际物理地址(PA)。
比如最糟糕的情况下,N级第1阶段翻译表和M级第2阶段翻译表需要NxM次内存访问。对任何虚拟化系统上的客户机来说,TLB-miss损失都是非常昂贵的。为了减少2阶段MMU中的TLB-miss损失,ARM Hypervisor在第2阶段创建更大的页。
7.1 Xen ARM
Xen ARM为每个客户机或域(Dom0或DomU)创建一个独立的3级第2阶段翻译表。Xen ARM能创建4K字节,2M字节或1G字节的第2阶段翻译表项。Xen ARM也按需分配客户机内存,并试图基于IPA和PA对齐构造尽可能最大的第2阶段翻译表项。
7.2 KVM ARM
KVM用户空间工具(QEMU)预先分配作为客户机RAM使用的用户空间内存,并向KVM内核模块通知其位置。KVM内核模块为每个客户机vCPU创建一个独立的3级第2阶段翻译表。典型的,KVM ARM将创建4K字节大小的第2阶段翻译表项,但是也能够使用巨大化TLB优化模式创建2M字节大小的第2阶段翻译表项。
7.3 Xvisor ARM
Xvisor ARM在客户机创建时,预先分配连续的主机内存以做为客户机RAM。它为每个客户机创建一个独立的3级第2阶段翻译表。Xvisor ARM能创建4K字节,2M字节或1G字节的第2阶段翻译表项。另外,Xvisor ARM总是基于IPA和PA对齐创建尽可能最大的第2阶段翻译表项。最后,客户机RAM是扁平化和连续的(不像其它Hypervisor)。这有助于缓存预取访问,从而进一步提升客户机内存访问性能。
参考
ACRN a big little hypervisor for IoT development
嵌入式HypervisorXvisor与KVM和XEN的对比分析(中文翻译)
目录
目录
- 目录
- 摘要
- 1.介绍
- 2.虚拟化技术分类
- 2.1 Hypervisor设计
- 1.完全宏内核设计
- 2.部分宏内核设计
- 3.微内核设计
- 2.2 虚拟化模式
- 1.全虚拟化
- 2.半虚拟化
- 3. **嵌入式系统的开源Hypervisor**
- 3.1 XEN
- 3.2 KVM
- 3.3 **X
- 3.4 ACRN
- 4.客户机IO事件模拟
- 4.1 Xen ARM
- 4.2 KVM ARM
- 4.3 Xvisor ARM
- 4.4 ACRN
- 5.主机中断
- 5.1 Xen ARM
- 5.2 KVM ARM
- 5.3 Xvisor ARM
- 5.4 ACRN
- 6. 锁同步延迟
- 7.内存管理
- 7.1 Xen ARM
- 7.2 KVM ARM
- 7.3 Xvisor ARM
- *参考*
摘要
开源的hypervisor:Xen,linux KVM,OKL4 Microvisor
本文:介绍Xvisor(eXtensible Versatile hypervisor),从对整个系统性能的影响上,与两个常用虚拟机管理器KVM和Xen进行对比
环境:ARM、linux
结论:在ARM处理器架构上,Xvisor具有更低的CPU开销,更高的内存带宽,更低的锁同步延迟和虚拟定时器中断开销,并且能够全面提升嵌入式系统性能。
1.介绍
(这一部分是原论文的介绍,在原文基础上,将ACRN也做相应的比较)
可行性分析:
1. 本次研究基于ARM架构。这是由于最新的ARM处理器架构已经提供了硬件虚拟化扩展,并且ARM处理器在嵌入式系统中已经得到了广泛应用。另外,这3个Hypervisor共有的的大部分板级支持包(BSP)都使用了ARM架构处理器。
2.KVM和Xen被选中作为对比的虚拟机管理器,是基于如下原因:
o ARM架构支持;
o 允许我们没有任何限制的收集性能数据的开源特性;
o 与Xvisor支持同样的单板;
o 在嵌入式系统中得到了应用。
时间约束测试:
o Hypervisor的低内存和CPU开销;
o Hypervisor最小负荷情况下的客户机调度效率。
2.虚拟化技术分类
2.1 Hypervisor设计
1.完全宏内核设计
完全宏内核Hypervisor使用一个单一的软件层来负责主机硬件访问,CPU虚拟化和客户机IO模拟。例如Xvisor和VMware ESXi Server
2.部分宏内核设计
通用目的宏内核操作系统的扩展。他们的操作系统内核支持主机硬件访问和CPU虚拟化,并通过用户空间软件支持客户机IO模拟。例如Linux KVM和VMware Workstation。
3.微内核设计
提供基本的主机硬件访问和CPU虚拟化功能,依赖于一个管理VM来支持整个主机的硬件访问、客户机IO模拟和其他服务。例如Xen,微软Hyper-V,OKL4 Microvisor和INTEGRITY Multivisor。
2.2 虚拟化模式
1.全虚拟化
允许未经修改的客户机操作系统作为客户机运行。(译者注:该模式需要借助硬件的虚拟化支持,例如X86架构AMD-V/Intel VT,ARMv8和Power架构的虚拟化profile等。)
2.半虚拟化
通过提供Hypercall(虚拟机调用接口)来进行各种IO操作(例如,网络收发,块读写,终端读写等等)。
3. 嵌入式系统的开源Hypervisor
3.1 XEN
特性:支持全虚拟化、半虚拟化,微内核,轻量级内核
功能:CPU虚拟化、MMU虚拟化、虚拟中断处理、客户机间通讯
Domain(域)是Xen内核相应于虚拟机或客户机的概念。
Dom0运行着一个Linux内核的修改版本,利用Linux内核提供IO虚拟化和客户机管理服务。优先级最高,对主机硬件有着完全访问权限。使用运行在Dom0用户空间的Xen工具栈来实现管理客户机的用户接口。
DomU运行Guest。
I/O处理:
- 半虚拟化客户机:客户机的IO事件模拟和半虚拟化通过DomU和Dom0之间的通讯来实现。使用Xen事件通道来完成。
- 全虚拟化客户机:使用运行在Dom0用户空间中的QEMU来模拟客户机IO事件。
优势:重用Linux内核现有的设备驱动和其他部分
劣势:Dom0只是Xen的另一个域,有它自己的嵌套页表,并且可能被Xen调度器调度出去。
3.2 KVM
特性:支持全虚拟化技术和半虚拟化技术的部分宏内核Hypervisor,以可选的VirtIO设备形式提供半虚拟化支持。
客户机模式:允许客户机操作系统与主机操作系统运行在相同的执行模式下
I/O处理:HOST将虚拟机视作一个QEMU进程,I/O访问将陷入到主机Linux内核。KVM在HOST上虚拟化CPU,依赖于运行在用户空间的QEMU来处理客户机IO事件。
KVM包含两个组件:
- 内核空间字符设备驱动,通过一个字符设备文件/dev/kvm提供CPU虚拟化服务和内存虚拟化服务
- 提供客户机硬件模拟的用户空间模拟器(如qemu)
IOCTRL:实现与这两个组件之间的服务请求通讯,例如虚拟机和vCPU的创建
优势:重用Linux内核现有的设备驱动和其他部分
劣势:KVM的 客户机模式到主机模式 的 虚拟机切换 依赖于 嵌套页表故障机制,特殊指令陷阱(Trap),主机中断,客户机IO事件,和另一个从主机模式唤醒客户机执行的虚拟机切换,导致了KVM整体性能本质上的降低。
3.3 **X
特性:支持全虚拟化和版虚拟化技术的完全宏内核Hypervisor,以VirtIO设备的形式提供半虚拟化支持。轻量级
Xvisor的所有核心组件,例如CPU虚拟化,客户机IO模拟,后端线程,半虚拟化服务,管理服务和设备驱动,都作为一个独立的软件层运行,不需要任何必备的工具或者二进制文件。
Orphan vCPUs:没有分配给某个客户机的vCPU。运行所有设备驱动和管理功能的后端处理。
客户机配置信息:以设备树(Device Tree)的形式维护。
优势:
最高特权等级的单一软件层提供所有虚拟化相关服务。上下文切换非常轻量级。嵌套页表、特殊指令陷阱、主机中断和客户机IO事件等的处理也非常快速。
所有设备驱动都作为Xvisor的一部分直接运行,具有完全的特权并且没有嵌套页表。
Xvisor的vCPU调度器是基于单CPU的,不处理多核系统的负载均衡。
劣势:缺少Linux那样丰富的单板和设备驱动
3.4 ACRN
特性:VMXVirtual Machine Extension)是Intel 64和IA-32架构处理器级别的功能,用于支持虚拟化。理论上支持全虚拟化,通过vitio实现半虚拟化。可以看出是微内核的Hypervisor。对设备的虚拟化由Hypervisor实现,设备驱动模块在SVM上。
实时、安全。
4.客户机IO事件模拟
4.1 Xen ARM
DomU发起IO:
- Xen Hypervisor监测到IO事件
- Xen事件通道转发
- Dom0内核接收到Xen事件
- Dom0由内核态转换成用户态,QEMU模拟IO事件
- HYP唤醒DomU
开销来源:红框所圈的xen事件通道和由内核态向用户态的上下文切换增加了IO的开销。
4.2 KVM ARM
客户机发起IO:
- 客户机IO事件引起一个VM-Exit事件,引起KVM从客户机模式切换到主机模式。
- 主机内核态
- 主机由内核态转换为用户态,交给QEMU处理客户机IO事件。
- VM-enter发生,引起KVM从主机模式切换到客户机模式。
开销来源:VM-exit和Vm-enter上下文切换
4.3 Xvisor ARM
客户机发起IO:
- Xvisor ARM捕获客户机IO事件
- 事件在标志2处的不可睡眠的通用上下文中被处理以确保时间被处理(是架构上的孤儿vcpu吗?)
4.4 ACRN
**SVM的IO流:ACRN只捕获其对中断设备的访问(红框),其他I / O访问直接进入物理设备(绿框)。中断设备包括可编程中断控制器(PIC),I / O高级可编程中断控制器(IOAPIC)和本地高级可编程中断控制器(LAPIC)。
虚拟化中断设备的好处:每个VM可以任意配置虚拟中断设备,而不必担心中断向量冲突。此外,所有虚拟中断设备都在hypervisor中进行仿真,以实现快速响应。
UVM的IO流:非直通设备:①通过1~3步将I / O访问转发到hypervisor内虚拟中断设备 或 ②通过1~5步转发到SVM中,创建一个I/O请求,并将其发送到“ Virtio和虚拟机管理程序服务模块(VHM)”中的I / O调度程序,该模块是提供远程服务的SOS内核模块。
RTVM的IO流:一般都是直通设备。
5.主机中断
5.1 Xen ARM
中断处理:Dom0
流程:
- Xen内核捕捉到主机IRQ(中断请求)的触发
- 由HYP路由到Dom0
- 切换到Dom0内核态
- Dom0处理中断
注意:如果一个主机中断在DomU运行时被触发,那么它将在Dom0被调度进来后才能得到处理
5.2 KVM ARM
流程:
- 主机IRQ触发VM-exit
- 主机进入内核态
- 主机IRQ处理
- VM-entry恢复客户机
**开销:**VM-exit和VM-entry增加了相当大的主机中断处理开销。如果主机中断被转发到KVM客户机,那么调度开销也会存在。
5.3 Xvisor ARM
Xvisor的主机设备驱动通常作为Xvisor的一部分以最高权限运行。处理主机中断时是不需要引发调度和上下文切换开销的。只有当主机中断被转发到一个当前没有运行的客户机时,才会引发调度开销。
5.4 ACRN
SVM的IRQ流程:物理中断由Hypervisor的中断分配器转发给虚拟中断控制器。
UVM的IRQ流程:一种是由中断分配器进行分配,一种是经由SVM处理后,交由中断分配器转发。
RTVM:只处理MSI
6. 锁同步延迟
产生原因:Hypervisor调度器和客户机OS调度器互相意识不到对方,导致客户机vCPU被Hypervisor随意抢占。
vCPU抢占问题:当一个运行在持有锁的某主机CPU(pCPU0)上的vCPU(vCPU0)被抢占,而同时另一个运行在其他主机CPU(pCPU1)上的vCPU(vCPU1)正在等待这个锁,那么vCPU抢占问题就会发生。
vCPU堆积问题:发生在一个运行着多个vCPU的单主机CPU上的锁调度冲突问题也会导致vCPU堆积问题发生。也就是说,希望获取某个锁的vCPU(vCPU1)抢占了运行在同一个主机CPU上的vCPU(vCPU0),但是vCPU0正在持有这个锁。
在ARM机构上,操作系统典型的使用WFE(等待事件)指令来等待请求一个锁,并使用SEV(发送事件)指令来释放一个锁。ARM架构允许WFE指令被Hypervisor捕获,但是SEV指令不能被捕获。
堆积问题的解决方案:所有3种Hypervisor(Xen ARM,KVM ARM和Xvisor ARM)都使用捕获WFE指令的方法使得vCPU让出时间片。
vCPU抢占问题的解决方案:通过使用半虚拟化锁的方式来解决,但是需要对客户机操作系统进行源码级的修改。
7.内存管理
ARM架构提供2级翻译表(或者说嵌套页表),用于客户机内存虚拟化,即图13所示的2阶段MMU。客户机操作系统负责编程第1阶段页表,将客户机虚拟地址(GVA)翻译到间接物理地址(IPA)。ARM Hypervisor负责编程第2阶段页表来从将间接物理地址(IPA)翻译成实际物理地址(PA)。
比如最糟糕的情况下,N级第1阶段翻译表和M级第2阶段翻译表需要NxM次内存访问。对任何虚拟化系统上的客户机来说,TLB-miss损失都是非常昂贵的。为了减少2阶段MMU中的TLB-miss损失,ARM Hypervisor在第2阶段创建更大的页。
7.1 Xen ARM
Xen ARM为每个客户机或域(Dom0或DomU)创建一个独立的3级第2阶段翻译表。Xen ARM能创建4K字节,2M字节或1G字节的第2阶段翻译表项。Xen ARM也按需分配客户机内存,并试图基于IPA和PA对齐构造尽可能最大的第2阶段翻译表项。
7.2 KVM ARM
KVM用户空间工具(QEMU)预先分配作为客户机RAM使用的用户空间内存,并向KVM内核模块通知其位置。KVM内核模块为每个客户机vCPU创建一个独立的3级第2阶段翻译表。典型的,KVM ARM将创建4K字节大小的第2阶段翻译表项,但是也能够使用巨大化TLB优化模式创建2M字节大小的第2阶段翻译表项。
7.3 Xvisor ARM
Xvisor ARM在客户机创建时,预先分配连续的主机内存以做为客户机RAM。它为每个客户机创建一个独立的3级第2阶段翻译表。Xvisor ARM能创建4K字节,2M字节或1G字节的第2阶段翻译表项。另外,Xvisor ARM总是基于IPA和PA对齐创建尽可能最大的第2阶段翻译表项。最后,客户机RAM是扁平化和连续的(不像其它Hypervisor)。这有助于缓存预取访问,从而进一步提升客户机内存访问性能。
参考
ACRN a big little hypervisor for IoT development
嵌入式HypervisorXvisor与KVM和XEN的对比分析(中文翻译)