[转贴]虚拟化时记忆体管理(AMD|[转贴]虚拟化时记忆体管理:AMD NPT/Intel EPT简介--转自沈洁转自某港澳台同胞)
◎标题:[硬体技术]虚拟化时记忆体管理:AMD NPT/Intel EPT简介
◎前言:在x86架构中,记忆体分页(page tables)是用来保护记忆体位址,使记忆体在多个程式存取时不互相干扰。然而,记忆体分页在虚拟化时,得经过VMM(或称为Hypervisor)中SPT(Shadow Page Table)的转换,造成效能损耗。如果转换过程未精确地控制,可能让虚拟机器中Guest OS所发出的特权指令未适当地产生中断与例外处理,如果这部虚拟机器是电子商务伺服器,结果是一笔交易资料莫名地消失了,而且事后追查问题根源的难度非常高。
目前,AMD/Intel都提出各自的记忆体分页虚拟化机制,AMD称为NPT(Nested Page Tables)而Intel称为EPT(Extended Page Tables),两者的运作概念是相同的。这篇文章将简介相关的原理,并让网友了解目前x86虚拟化的困难与厂商的处理技术。 (相关资料都可以在AMD/Intel官方网站的公开资料找到)
◎AMD NPT中虚拟化的记忆体位置转换(address translation)
记忆体转换过程可以先参考下一段所叙述,未虚拟化时的记忆体转换程序(图1)。
上图2中,右侧列出Para-virtualization概念图,并以紫色线段区隔Guest OS与VMM,更详细的虚拟化图解请参考段落结束的图3。
NPT(Nested Page Tables)机制将记忆体转换过程缩减为2阶段。
首先,在Guest OS中(图2中紫色线段区隔的上半部),当系统开启一个行程(process)时,作业系统会为这个行程配置一个分页表。此时,Guest记忆体的线性位址(Guest Linear Address)透过gPT (Guest Page Tables)映射到Guest的实体位址(Guest Physical Address)。其分页表(gPT)位于Guest的实体记忆体中,gCR3(Guest中的CR3)相当于硬体的暂存器,负责执行Guest OS中的映射作业。
接下来,借着实体记忆体中的nPT(nested page tables),将Guest记忆体的实体位址映射到系统的实体记忆体位址。网友可以注意到nPT位于实体记忆体中,硬体上则由nCR3(相对于Guest,nCR3可看成是Host OS中的CR3)负责执行映射作业。
gCR3仅负责管理Guest OS中,记忆体由线性位址(Guest Linear Address)映射到实体位址(Guest Physical Address),其机制与未虚拟化的实体主机相同,网友可以参考下一段落的图1与说明。在NPT的机制中,如果要存取Guest OS中的记忆体分页时,Guest的实体位址会先被转换到系统的记忆体位址(System Physical Address)。如果是从Guest的记忆体线性位址映射到实体记忆体,便以快取的方式记录在TLB中。
NPT的两阶段记忆体转换,特点就是将Guest Physical Address→System Physical Address,VMM不用再保留一份SPT(Shadow Page Table),以及以往还得经过SPT这个转换过程。除了降低各部虚拟机器在切换时所造成的效能损耗外,硬体指令集也比虚拟化软体处理来得可靠与稳定。
相关资料可以在Google找到外,或者网友可以参考「2007XenSummit-AMD-Barcelona_Nested_Paging_WahligHuang.pdf」这份简报档。简报中提到AMD在Barcelona中已内建NPT指令集,虚拟化软体方面,Xen 3.0.5版已支援此机制。
AMD NPT_3.tif
◎传统(未虚拟化)的记忆体位置转换(address translation)
图中显示记忆体位址(address)转换时,将线性位址(Linear Address)透过分页表(PT,Page Tables)所记载的内容,映射到实体位址(Physical Address)。其中CR3(Control Register)是一组硬体暂存器,负责执行映射作业并提升记忆体位址转换效率所需的指令。
◎Intel EPT中虚拟化的记忆体位置转换(address translation)
图4简介Intel EPT概念,原出处是「Intel Virtualization Technology Processor ??Virtualization Extensions and Intel Trusted execution Technology.pdf」。
为了方便说明Intel EPT与AMD NPT机制在原理上相同,所以改成图5的解说。网友可以将图5与图2做比较,两图的差异在图5中红色字的部份,这4个红色字则来自于图4。
图5中红色字的「CR3」其实是图2的「gCR3」,都是Guest OS的CR3;而图5「EPT Base Pointer」则是图2的「nCR3」,相当于Host OS的CR3;接下来,图5的「Guest Intel 64 Page Tables」对应到图2的「gPT」;最后,图5中红色字的「EPT」相当于图2的「nPT」,也就是AMD NPT所使用的巢状分页表(nested page tables)。
【[转贴]虚拟化时记忆体管理(AMD|[转贴]虚拟化时记忆体管理:AMD NPT/Intel EPT简介--转自沈洁转自某港澳台同胞)】Intel EPT与AMD NPT都是将Guest Physical Address映射到System Physical Address,不经过VMM中的SPT,均是两阶段转换,目的也是为了降低记忆体转换时在VMM所产生的效能损耗。
◎简介记忆体分页的效能问题
借着Intel简报内的图解,简单说明记忆体分页在虚拟化所造成效能降低的过程。
图中可以看到用户在操作多部虚拟机器时,其实是不断地在各部虚拟机器间来回切换,每一个切换过程包括「VM Entry」与「VM Exit」,并产生记忆体分页。这些记忆体分页记录着虚拟机器当时的状态,并由VMM负责管理与转换各部虚拟机器所产生的分页。
其实,这也是一种记忆体保护机制。我们可以对照在真实主机中操作时,多个行程(或应用程式)在存取记忆体时,作业系统透过分页机制保护每个行程所需的记忆体空间。这种类比下,多部虚拟机器就好像多个行程/应用程式一样,而VMM就相当于作业系统。多部虚拟机器在VMM中切换,就如同多个行程/应用程式在作业系统中切换一样,差别在于分页内容不同。因此,作业系统能更有效率地管理记忆体分页,便可以让各个行程切换更有效率。同样的效率瓶颈在虚拟化时,就在VMM如何有效地管理记忆体分页(请参考图8中的示意图)。
不过,虚拟化后记忆体管理变得很复杂,况且还有分页错误(Page Fault)、中断(Interrupt)与例外处理(Exception Handler)等。在没有硬体辅助指令前,由Xen、VMware等虚拟化软体负责记忆体管理所有事项,当伺服器虚拟化集中管理时,VMM就可能让虚拟机器间切换变得缓慢。同样地,一般实体主机的应用程式开得很多时,用户也会感觉到应用程式在切换时,效率越来越差,或者开启多个大量耗用记忆体的应用程式(例如Photoshop),作业系统运作迟钝等。对记忆体所有存取动作都需要经过分页映射,所以映射效率决定虚拟机器切换的效能,AMD NPT/Intel EPT便是透过硬体辅助指令降低记忆体管理在虚拟化的效能损耗。
◎结论:等待市场验证;下一阶段,I/O虚拟化与资讯安全
虽然AMD/Intel提供记忆体管理所需的硬体辅助指令,但还需要虚拟化软体供应商整合,因为每个虚拟化软体中VMM对记忆体管理的机制并不一定相同,就好像实体主机中,Linux与Windows对记忆体管理也不同。当软体和硬体整合后,还得经过实际环境应用的验证,才知道新技术的可靠度与稳定性。
在实体主机上,记忆体管理都经过多年的验证与不断地修正,不论是AMD/Intel硬体架构或Apache、Oracle Database、SAP ERP等各种伺服器,才有如今的可靠与稳定。可是在虚拟化过程中,这些机制还是很新颖的技术,有待市场验证。这是虚拟化应用的潜在风险,在未成熟的情况下,效率是用预算堆出来的,不是一般用户能负担的价格。
至于验证的技术,需要对作业系统有深厚的了解(VMM具备Host OS的核心功能,也是一个简化的作业系统),才能在检验过程中,追踪系统呼叫(system call)在作业系统中是否精确地处理。我自认学识浅薄,没有这方面的技术,还希望有此能力的网友指教。
Ring 0除了记忆体管理,另一个重要机制就是档案管理(File Management),这关系着I/O虚拟化指令集。 AMD/Intel都将在未来的平台中纳入相关的辅助指令,以及虚拟化软体整合后与实际运作的验证。(请参考图9)
此外,虚拟化成熟后,资讯安全也会形成另一个重要议题。从图3中可以察觉到VMM处于Ring 0,也就是特权指令所在的阶层,一但取得VMM控制权,等于掌控所有虚拟机器。举例来说,读、写分页表暂存器等指令都是特权指令,也就是在VMM中才可以执行,任意改变分页表暂存器就可随意中止某个行程。此时,即使虚拟机器安装防火墙等系统,也不至连VMM都阻挡吧。这种情况下,防火墙如同虚设般。资讯安全与I/O虚拟化将是下一阶段重要议题,有待软、硬体厂商提出新的解决方案。
PS:这个也是国内极少的一份技术解释的文章,我甚至找不到靠谱一份靠谱的介绍AMD NPT/Intel EPT的中文网页,好不容易搜到了,还是需要的,故转载过来了,原文是繁体字,通过内码转换,所以或许有些许不流畅还请包涵。这两项技术,对我而言,现实点的应用就是vbox的虚拟机,速度能更快一点,总所周知,win7对winxp下的许多应用程序兼容性不咋地,解决之道就是虚拟机。而用虚拟机,为了虚拟的效率,与成功率高一点,硬件的支持就特别重要了。这就是我会关心这些技术的原因。
沈洁
2011年9月3日
推荐阅读
- 任时光绽放成六月繁花
- 一个人的碎碎念
- 昨夜小楼听风
- 20170612时间和注意力开销记录
- 远去的风筝
- 为什么你的路演总会超时()
- 杜月笙的口才
- 时间老了
- MediaRecorder前后摄像头同时录像
- 眉头开了