NFV关键技术:计算虚拟化之内存虚拟化

本文详细介绍了内存虚拟化的概念、软件和硬件解决方案,以及内存虚拟化管理,包括内存复用技术如零页共享、内存气球回收和内存置换。内存虚拟化通过虚拟机管理程序(VMM)对物理内存进行统一管理,通过影子页表或硬件扩展页表(如Intel的EPT)实现虚拟机间的内存隔离和转换。内存复用技术提高了内存利用率,如零页共享通过识别和共享相同内容的页面,内存气球回收则允许VMM回收虚拟机的空闲内存,内存置换作为最后手段在内存压力大时强制回收。内存QoS则用于保证虚拟机的内存服务质量。
摘要由CSDN通过智能技术生成

大型操作系统(比如Linux)的内存管理的内容是很丰富的,而内存的虚拟化技术在OS内存管理的基础上又叠加了一层复杂性,需要对虚拟内存再进行虚拟化。本文将从“概述”、“软硬件解决方案”和“内存管理”四个方面探讨内存虚拟化技术。

一、内存虚拟化概述

所谓的内存虚拟化,即如何在多个虚拟机之间共享物理内存以及如何进行动态分配。在《x86架构基础》一文中已经介绍操作系统对物理服务器内存管理的知识,它的本质就是将物理内存地址映射到一段线性地址空间,也有叫逻辑地址空间,应用程序访问内存物理地址是通过段页查询机制完成。而这个线性地址空间或逻辑地址空间本身就是物理内存的虚拟化呈现。在虚拟化环境中,分配给虚拟机内存非常类似于操作系统中关于线性地址空间的实现。操作系统负责维护虚页号到实页号的映射,并将这一 映射信息保存到页表(Page Table)。在 x86架构的CPU中,内存管理单元MMU与TLB这两个模块就负责实现并优化虚拟内存的性能。详见《DPDK技术在电信云中最佳实践》系列文章。

一个操作系统对其物理内存存在两个主要的基本认识:物理地址从0开始和内存地址连续性(至少在一些大的粒度上连续)。

如上图所示,而VMM与客户机操作系统在对物理内存的认识上存在冲突,这使得真正拥有物理内存的VMM必须对客户机操作系统所访问的内存进行一定程度的虚拟化。换句话说,就是VMM 负责将MMU进行虚拟化,为客户机操作系统提供一段连续的“物理”地址空间,而操作系统本身不会意识到这种变化,仍能够将虚拟机虚拟地址(Guest Virtual Address,GVA)映射到虚拟机物理地址(Guest Physical Address,GPA),但是需要VMM将虚拟机物理地址映射到物理机物理地址(Host Physical Address,HPA)。

所以,内存虚拟化的本质就是把物理机的真实物理内存统一管理,包装成多份虚拟的内存给若干虚拟机使用。内存虚拟化的核心,在于引入一层新的地址空间---客户机物理地址空间,客户机以为自己运行在真实的物理地址空间中,实际上它是通过VMM访问真实的物理地址的。在VMM中保存客户机地址空间和物理机地址空间之间的映射表。

虚拟化系统中包括三层内存地址空间:虚拟机虚拟地址GVA、虚拟机物理地址GPA和物理机物理地址HPA。因此,原先由MMU完成的线性地址到物理地址的映射已经不能满足,必须由VMM接入来完成这三层地址的映射维护和转换。

GVA:指GuestOS提供给其应用程序使用的线性地址空间。GPA:经VMM抽象的,虚拟机看到的伪物理地址空间。HPA:真实的机器地址,即地址总线上出现的地址信号。

为了实现上述映射和转换关系,主要有两种解决方案:软件解决方案---影子页表和硬件解决方案---Intel的EPT和AMD的RVI。

二、内存虚拟化软件解决方案

2.1 MMU半虚拟化(MMU Paravirtualization)

这种方式主要为Xen所用,MMU半虚拟化主要原理是:

1)当Guest OS创建新页表时,VMM从维护的空闲内存中为其分配页面并进行注册。后续,Guest OS对该页表的写操作都会陷入VMM进行验证和转换;VMM检查页表中的每一项,确保它们只映射到属于该虚拟机的机器页面,而且不包含对页表页面的可写映射。

2)然后,VMM会根据其维护的映射关系PA-MA,将页表项中的虚拟机逻辑地址VA替换为相应的机器地址MA。

3)最后把修改过的页表载入MMU,MMU就可以根据修改过的页表直接完成虚拟地址VA到机器地址MA的转换。

这种方式的本质是将映射关系VA-MA直接写入Guest OS的页表中,以替换原来的映射VA-PA映射关系。

2.2 影子页表

相比较MMU半虚,大部分虚拟化厂商在VMM中还使用了一种称为影子页表(Shadow Page Table)的技术实现上述功能。对于每个虚拟机的主页表(Primary Page Table),VMM都维持一个影子页表来记录和维护GVA与HPA的映射关系。

影子页表映射关系

影子页表包括以下两种映射关系,

1)GVA>>>GPA,虚拟机操作系统负责维护从虚拟机逻辑地址到虚拟机物理地址的映射关系&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值