小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
内存是虚拟机最频繁访问的设备之一,内存虚拟化的效率高低对虚拟机的性能的影响是非常大的。并且物理内存空间是有限的,各个应用内存的使用需要保证不覆盖,为了避免这个问题,虚拟化内存就出现了,保障每个进程都有一个连续的,巨大的内存空间的使用,底层也有相关机制来避免应用的冲突,这种机制正是虚拟化软件做的事,也就是 MMU 内存管理单元。
VMM 通常采用分块共享的思想来虚拟机算机的物理内存。也就是说,VMM 需要将机器的内存分配给各个虚拟机,并维护机器内存和虚拟机所见到的“物理内存”的映射关系,使得这些内存在虚拟机看来是一段从地址0 开始的、连续的物理地址空间。
ARM也支持硬件辅助内存虚拟化技术,当运行一个虚拟机时,被虚拟机管理的物理地址实际上是中间物理地址(IPAs,Intermediate Physical Addresses),同时也是Guest OS的物理地址(PAs,Physical Addresses),ARM MMU的Stage-2 Translation提供了中间物理地址(IPAs)到Host物理地址(HPAs,Host Physical Addresses)的转换。MMU Stage-2转换功能在EL2模式中控制,避免Guest OS干扰Host内存的内容。
使用内存的硬件辅助虚拟化技术,Guest OS运行过程中无需VMM干预,去除了大量软件开销,内存访问性能接近物理机。