虚拟化技术概要之处理器虚拟化

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享




VMM 对物理资源的虚拟可以分为三个部分:处理器虚拟化、内存虚拟化和 I/O 设备虚拟化。

其中以处理器虚拟化最为关键。

 

0. 体系结构背景

简而言之,处理器呈现给软件的接口就是一堆的指令(指令集)和一堆的寄存器(含用于通用运算的寄存器和用于控制处理器行为的状态和控制寄存器)。而 I/O 设备呈现给软件的接口也就是一堆的状态和控制寄存器(有些设备还有内部存储)。这些都是系统的资源,其中影响处理器和设备状态和行为的寄存器称为关键资源或特权资源,如 x86 之 CR0 ~ CR4,MIPS 的 CP0 寄存器,PowerPC 的 Privileged SPR(SPR 编号第 5 位为 1)。

可以读写系统关键资源的指令叫做敏感指令,如 x86 的 lgdt/sgdt/lidt/sidt/in/out,MIPS 的 mtc0/mfc0,PowerPC 的 mtmsr/mfmsr,SPARC 的 rdpr/wrpr 等,此类又可称为控制敏感指令。

还有一类行为敏感指令,该类指令的执行结果依赖于系统的状态(如 x86 之 popf)

现代计算机体系结构一般至少有两个特权级,(即用户态和核心态,未加虚拟化扩展的 SPARC和PowerPC 即是,MIPS 有三个特权级(外加一个 Supervisor 态),而 x86 有四个特权级 (Ring0 ~ Ring3))用来分隔系统软件和应用软件。

决大多数的敏感指令是特权指令,特权指令只能在处理器的最高特权级(内核态)执行,如果执行特权指令时处理器的状态不在内核态,通常会引发一个异常而交由系统软件来处理这个“非法访问”(陷入)。

少数敏感指令是非特权指令,如 x86 的 sgdt/sidt 等,非特权指令可以在用户态读取处理器的状态,如 sgdt/sidt 则可在用户态 (Ring3) 将 GDTR 和 IDTR 的值读取到通用寄存器中。

对于一般 RISC 处理器,如 MIPS,PowerPC 以及 SPARC,敏感指令定是特权指令,唯 x86 例外。

正是为了这个例外,造就了后来 x86 上的虚拟化技术的江湖纷争。先是以 VMware 为代表的 Full 派对无需修改直接运行理念的偏执,到后来 Xen 适当修改 Guest OS 后获得极佳的性能,以至让 Para 大热,再到后来 Intel 和 AMD 卷入战火,从硬件上扩展,一来解决传统 x86 虚拟化的困难,二来为了性能的提升;到最后硬件扩展皆为 Full 派和 Para 派所采用,自此 Para 派的性能优势再不那么明显,Full 派的无需修改直接运行的友好性渐占上风。

 

1. 经典的虚拟化方法

经典的虚拟化方法主要使用“特权解除” (Privilege deprivileging) 和“陷入 — 模拟” (Trap-and-Emulation) 的方式。即:将 Guest OS 运行在非特权级(特权解除),而将 VMM 运行于最高特权级(完全控制系统资源)。解除了 Guest OS 的特权后,Guest OS 的大部分指令仍可以在硬件上直接运行,只有当执行到特权指令时,才会陷入到 VMM 模拟执行(陷入 — 模拟)。其早期的代表系统是 IBM VM/370

由此可引入虚拟化对体系结构 (ISA) 的要求:

A. 须支持多个特权级

此亦是现代操作系统的要求

B. 非敏感指令的执行结果不依赖于 CPU 的特权级

“陷入-模拟” 的本质是保证可能影响 VMM 正确运行的指令由 VMM 模拟执行,大部分的非敏感指令还是照常运行。

C. CPU 需支持一种保护机制,如 MMU,可将物理系统和其它 VM 与当前活动的 VM 隔离

以上三个条件,现代体系结构一般都满足,唯有最后一个也是最重要的条件:

D. 敏感指令需皆为特权指令

此是为了保证敏感指令在 VM 上执行时,能陷入到 VMM,接受 VMM 的控制。

因控制敏感指令的执行可能改变系统(处理器和设备)的状态,为保证 VMM 对资源的绝对控制力维护 VM 的正常运行,这类指令的执行需要陷入而将控制权转移到 VMM,并由其模拟处理之。

行为敏感指令的执行结果依赖于 CPU 的最高特权级,而 Guest OS 运行于非最高特权级,为保证其结果正确,亦需要陷入 VMM,并由其模拟之。

 

2. x86 ISA 分析

x86 ISA 中有十多条敏感指令不是特权指令,因此 x86 无法轻松地使用经典的虚拟化技术完全虚拟化。

如:sgdt/sidt/sldt 可以在用户态读取特权寄存器 GDTR/IDTR/LDTR 的值;popf/pushf 在 Ring0 和 Ring3 的执行结果不同;其它的还有 smsw, lar, lsl, verr, verw, pop, push, call, jmp, int n, ret, str, move

关于这些指令的详细分析可以参见:”Analysis of the Intel Pentium’s Ability to Support a Secure Virtual Machine Monitor”

 

3. x86 虚拟化方法

鉴于 x86 指令集本身的局限,长期以来对 x86 的虚拟化实现大致分为两派,即以 VMWare 为代表的 Full 派和以 Xen 为代表的 Para 派。两派的分歧主要在对非特权敏感指令的处理上,Full 派采用的是动态的方法,即:运行时监测,捕捉后在 VMM 中模拟;而 Para 派则主动进攻,将所有用到的非特权敏感指令全部替换,这样就少掉了大量的陷入 —> 上下文切换 —> 模拟 —> 上下文切换过程,获得了大幅的性能提升,但缺点也很明显。后来 x86 的主要厂商 Intel 和 AMD 也卷入战火,且都引入各自的硬件虚拟化技术来扩展。

 

3.1 全虚拟化派 (Full virtualization)

秉承无需修改直接运行的理念,该派一直在对“运行时监测,捕捉后模拟”的过程,进行偏执的优化。

该派内部之实现又有些差别,其有 VMWare 为代表的 BT 和以 SUN 为代表的 Scan-and-Patch

3.1.1 基于二进制翻译 (BT) 的全虚拟化

其主要思想是在执行时将 VM 上执行的 Guest OS 之指令,翻译成 x86 ISA 的一个子集,其中的敏感指令被替换成陷入指令。翻译过程与指令执行交叉进行。不含敏感指令的用户态程序可以不经翻译直接执行。该技术为 VMWare Workstation,VMWare ESX Server 早期版本,Virtual PC 以及 QEMU 所采用。

 

3.1.2 基于扫描与修补 (Scan-and-Patch) 的全虚拟化

主要思想:

(1) VMM 会在 VM 运行每块指令之前对其扫描,查找敏感指令
(2) 补丁指令块会在 VMM 中动态生成,通常每一个需要修补的指令会对应一块补丁指令
(3) 敏感指令被替换成一个外跳转,从 VM 跳转到 VMM,在 VMM 中执行动态生成的补丁指令块
(4) 当补丁指令块执行完后,执行流再跳转回 VM 的下一条指令处继续执行

SUN 之 Virtualbox 即采用该技术。

 

3.2 OS 协助的类虚拟化派 (Paravirtualization)

其基本思想是通过修改 Guest OS 的代码,将含有敏感指令的操作,替换为对 VMM 的超调用 (Hypercall,类似 OS 的系统调用,可将控制权转移到 VMM)。该技术的优势在于 VM 的性能能接近于物理机,缺点在于需要修改 Guest OS.

该技术因 Xen 项目而广为人知。

目前嵌入式领域的虚拟化,考虑到性能的因素,亦会在可以使用经典虚拟化方法实现全虚拟的体系结构上采用类虚拟化技术。

 

3.3 硬件协助的虚拟化

鉴于 x86 在虚拟化上的缺陷,Intel 和 AMD 都引入自己的硬件虚拟化技术来协助完成虚拟化。

Intel VT-x (Virtualization Technology for x86)
Intel VT-i (Virtualization Technology for Itanium)
Intel VT-d (Virtualization Technology for Directed I/O)
AMD-V (AMD Virtualization)

其基本思想就是引入新的处理器运行模式和新的指令,使得 VMM 和 Guest OS 运行于不同的模式下,Guest OS 运行于受控模式,原来的一些敏感指令在受控模式下全部会陷入 VMM,这样就解决了部分非特权的敏感指令的陷入 — 模拟难题,而且模式切换时上下文的保存恢复由硬件来完成,这样就大大提高了陷入 — 模拟时上下文切换的效率。

该技术的引入使 x86 可以很容易地实现完全虚拟化。其皆被双方所采用,如: KVM-x86,新版 VMWare ESX Server 3,Xen 3.0

 

4. 其它体系结构分析

其它 RISC 之体系结构,如 MIPS, PowerPC, SPARC 等,似乎不存在有敏感指令为非特权指令的情形。即它们应不存在虚拟化的困难。但由于设计理念不一样,RISC 不太可能(至少目前我还没看到)在硬件上实现像 x86 那样复杂的虚拟化扩张,因此为了性能的考虑,一样皆采用 Paravirtualization,在嵌入式领域尤其如此。

至于硬件上的扩展,概况如下:

2001 年 IBM 在 Power4 中加入虚拟化支持,并在 2004 年的 Power5 中推出增强的虚拟化支持,且在 2009 年发布的 Power ISA v2.06 中规范化。Freescale 亦在 e500mc 中实现 PowerISA v2.06 的虚拟化增强。

2005 年 SUN 即在 SPARC 中引入虚拟化支持。

MIPS 至今未见动作。

 

5. 其它体系所采用之虚拟化方法

目前可见的非 x86 体系的虚拟化产品,似乎都倾向于使用类虚拟化的技术手段。

 

 

 

(3个打分, 平均:5.00 / 5)

雁过留声

“虚拟化技术概要之处理器虚拟化”有28个回复

  1. 陈怀临 于 2010-04-12 6:22 下午

    我现在非常后悔之前没有在这个方面下功夫,在通信领域太久。其实,以我对各种CPU之熟悉,应该是能够很快熟悉这个业务的。。。我现在开始吧。。。

  2. John 于 2010-04-12 7:20 下午

    首席,这些技术对于体系结构很熟悉的人,很快就能上手. 如果几年前在CLF上的 XEN 和 L4 项目能坚持下来…

  3. 陈怀临 于 2010-04-12 7:21 下午

    是。其实我应该是中国最早推动XEN和L4的人。。。唉。不提了。我这些年的哲学发生过许多迁移。最开始希望技术帮助国家。感觉技术对人的影响力太小。后来转变成写评论文章,才有了那些什么信,思考。后来就又有了弯曲评论。。。。

    最近几年有点想发财了。被几个混小子给折腾起来的。折腾了web 2.0一阵。。。看来,还是要玩我最擅长的:CPU和OS。。。

  4. coder 于 2010-04-12 7:40 下午

    谢谢 首席以前的 L4 项目。

  5. 陈怀临 于 2010-04-12 8:01 下午

    我这次狠下心了–回归OS领域。我还真不信了。我搞不定blah blah。。。发财的事情本来就很简单。就算去捡点钱花花。。。

  6. kevin 于 2010-04-12 8:42 下午

    MIPS34K支持virtual process environment,勉强算个虚拟化吧。然后我们的龙芯不知道啥时候继续放卫星。。。 虚拟化这玩意除了给服务器玩家做做广告,嵌入式市场怎么用估计还没想好呢。都是PPC,IBM做服务器01年就搞虚拟化了,同门的FSL一直憋到e500mc才在ISA里加了点东西。也不影响FSL憋在通信处理器市场当老大。

  7. ABCD 于 2010-04-12 9:17 下午

    虚拟化的一个很大的应用是security,虚拟机的边界对于做应用的isolation很有吸引力
    嵌入式在这方面应该有些应用,手机病毒现在还不够多。。。

  8. 理客 于 2010-04-12 10:04 下午

    一旦业务需求加速,这些技术储备会迅速的发展成为新新产业,能量不可估计,这个地方,一个以解决温饱处处小心防止以为动乱为主的国家,和一个已经在这个方向上浸淫若半年,并享受了因此带来的轻松度过几次应该来临的危机保持老大生活品味的国家,太不同了,把投资很多放在未来,到了未来当然会大把收获,反之,到了未来,还不得不卖鞋买袜,投资教育、基础研究、学术和工业界预研对美国是重要又紧急,而对中国是重要但不够紧急,但是这种事,如果不给予合理的投入,永远不要指望能靠其他快速的手段能获得持久的大幅收获,所以一直很奇怪日本人和德国人为什么在这个方向上没有建树,这么多年还是在电子/机电/钢铁/化工的基础行业上浸淫,很让人怀疑是人种问题,日本人还可以理解,德国人曾经有二战时代的全球科技领先,现在的德国人,在IT创新领域,似乎笨得让人奇怪,难道当初灭绝犹太人真的是错误,德国过去的高端的创造力,都在犹太人身上?

  9. 理客 于 2010-04-12 10:43 下午

    易懂好文

  10. comcat 于 2010-04-12 11:39 下午

    首席在 CLF 主导的项目最后都不了了之,很是可惜

  11. 中兴之象 于 2010-04-13 5:17 上午

    克克:
    主要是教育制度
    欧洲除了英国外 大学都不行了

  12. 理客 于 2010-04-13 6:44 上午

    怎么大家见到英国留学生投的简历,就像老外看中国的产品一样的感觉,让人怀疑英国除了牛津剑桥就都是山寨了。德国的怎么样?

  13. kevin 于 2010-04-13 7:01 下午

    被中国的留学生搞臭了。呵呵

  14. 理客 于 2010-04-13 7:13 下午

    是不是也有英国因为喜欢拿钱走入而愿意配置中国留学生的因素?德国也有不少中国留学生,但似乎没有因此就可以随便拿到文凭

  15. kevin 于 2010-04-13 7:37 下午

    英国,澳大利亚,新西兰,加拿大。富二代的聚集地。

  16. coder 于 2010-04-13 8:06 下午

    其实富二代都在美国。

  17. anonymous 于 2010-04-14 6:47 下午

    错 美国是太子党的聚集地

  18. billy 于 2010-04-14 7:33 下午

    一些数据….

    John. Maine Hann – United States Academy of Sciences (the eldest son of former U.S. President Bill Clinton)

    John. Myanmar Yin Kaen – U.S. Joint Chiefs of the General Political Department of Organization Department, the two star Major General (1957, Maryland man, youngest son of former U.S. President Bill Clinton)

    Liszt. Sean. Four Point – U.S. Energy International Group chairman, general manager and vice president of the National Power Company, American Electric Wang (1959, former Secretary of State Colin Powell’s son)

    Liszt. Sean. Linda – American Electric Power, International Managing Director and General Manager (former Secretary of State Colin Powell’s daughter)

    Jupiter. Cloud Ryle – President of the United States International Finance Corporation, the directors (the son of former Secretary of State Alexander Haig)

    Jupiter. Ian. Ryle – Citibank (Hong Kong) Development Planning Manager (daughter of former Secretary of State Alexander Haig)

    Winchester. Cloud Sean – Washington Unihub president (son of Secretary of State Hillary Clinton)

    Si Mien – Massachusetts Rockde Group President, U.S. Rich List 2003, 15th, 12th Forbes (wife Winchester. 莱克斯布林, Secretary of State Hillary-law)

    Mars New York – United States Military Academy Military History, a research fellow, the Standing Committee of the United States Youth Federation, Washington, DC, under the foil, Xicheng District, Parliament, Army Brigadier General (1971, grandson of Washington)

    Suoao Edwards – formerly known as Chan. Shaao China, the United States Military Academy Museum, part-time Deputy Minister of Military Sciences, the Deputy Secretary-General, the two star Major General (1938, Arkansas man; Washington’s wife, sister, half-Lewis)

    Masifaniu – the former deputy secretary of Massachusetts Democratic Party (1971-1976), North America, the Northeast zone defense overall Rev. (1941, Washington, nephew, son of Mars Linton)

    Lewis. Ian. Chan – also known as Lewis. T, the former vice president of Commercial Bank in Little Rock, Arkansas (1948, President Woodrow Wilson’s three sons)

    Lewis. Yiwu An – U.S. Deputy Chief Joint Logistics Department of Rev., 2000, was promoted three-star general, 36-year-old deputy governor of any Kentucky (1951, Arkansas man; President Woodrow Wilson’s youngest son)

    Lewis. Follette – they Mingwaenqi Yan, the former director of the Food Research Institute, Washington, United States Trade and Technology Division; 1999.11.25, international constellation Ophiuchus constellation code will RA17H37M17S-D5’39 ‘of Star Note on the “Waen Qi Yan,” the name in recognition of her contribution to the field of food science. (1949, Columbia University, Dr. nutrition education, President Woodrow Wilson’s and three women)

    Lewis. Teern Yan – United Ami Geography Group and the United States Trade St. Jia, chairman of the international auction house (1952, Harvard Business School Master, President Woodrow Wilson’s and four women)

    Lewis. Wim because of – the former Louisiana Democratic Party Committee Standing Committee, deputy governor of the state under the foil Council Vice (1938, President Woodrow Wilson’s nephew)

    Dehn. Bushenfaang – Federation of the Disabled American President (George HW Bush’s son)

    Dehn. Zifa En – Four Brick Group President (George Bush’s second son)
    Dehn. Linda – the United States Fine Arts Association, the United States Institute of Oil Painters, West Art Exchange Association (1941, Kansas, the old Bush daughter)

    Dehn. Nuoen – U.S. Vice Minister of Science and Technology (the elder Bush’s daughter)

    Dehn. Class Niya En – U.S. International Friendly Contact, vice president, North American Friendship, Peace and Development Council Vice-Chairman (George Bush’s daughter)

    Wukezhansha Ang – American Iron and Steel Industry Association Vice President, Democratic Party Secretary, king Rays Group (Hong Kong) Honorary President (Bush son, Deenlinda’s husband)

    James Wang – American Academy of Science and Technology Secretary (Bush son, Deennuoen’s husband)

    Hope because of – the United States Poly Group Vice Chairman, General Manager, Joint Chiefs of General Staff Major General Armament Department of the two weeks (two star Major General Hope. Buyi Ao son, the elder Bush son, Dern. Class Niya En’s husband )

    Dehn. Shian Qi Yan – the original work of the Joint Chiefs of civilian Minister of the General Political Department, the two star Major General (George Bush half-sister)

    Liqianmu for – deputy commander of U.S. strategic missile forces, Lt. Gen. (Bush brother, husband, Dern Shian Qi Yin)

    Zien. Qiyinruide – U.S. Vice President (1938, Mississippi man, former Minister of the Interior Zien. Hill’s son)

    Zien. Qiyinouxin – United States Military Academy of the Minister of Military History, the two star Major General (Zien. Hill’s son)

    Zien. Qiyinsuosi – U.S. Air Force Logistics Deputy Minister, two weeks, Major General (Zien. Hill’s son)

    Zien. Hai Shien – General Staff Deputy Chief of the Joint Chiefs, the two star Major General (Zien. Hill’s daughter)

    Evans Jien Sen – Missouri Prefectural Democratic Party, U.S. President cabinet (1945, Georgia man; Zien. Side Te Van En’s V grandson; former Pennsylvania Democratic Party Secretary, Minister of Heavy Machinery Yale gene promoter; mother who is a former Washington, DC-based Yan, vice mayor; wife Zhanenshikai former Deputy Secretary of State, Defense, four-star general Jain. Aipu consequent female)

    Evans Qiang Sen – the former U.S. Central Intelligence Agency (CIA) Director of the Washington branch of a 1986 defection of Soviet Union (Gene’s son, Yale)
    Xi Jinpu because – Vice President, former Georgia Democratic Party Secretary (1953, Nebraska, former Deputy Secretary of State Johnson, the son of Greek)

    Baoboximu to – Oklahoma Democratic Party secretary, the former Minister of Commerce (1949, Iowa farmers and former Deputy Secretary of State Baoboyibo son)

    to 17f

  19. gavin 于 2010-04-15 12:00 上午

    楼上真逗,这照猫画虎画的不错

  20. 初学者 于 2010-07-04 7:04 下午

    对于需要在特权级别执行的敏感指令,可以采用“陷入”的方法捕获,然后模拟,但是对于那些可以在用户态执行的敏感指令如何捕获,请高手赐教,谢谢!

  21. 过客 于 2010-07-05 7:41 下午

    to 楼上:一些想法供交流,对于那些无法通过“陷入”方式捕获的指令,可以通过设置“断点”的方式捕获,就像程序调试时设置断点一样的道理,VMM可以先对调入内存的指令序列进行扫描,对于那些“非特权级的敏感指令”设置0xCC,这样在执行到这样的指令时会产生一个中断,VMM就有机会处理了。

  22. 理客 于 2010-07-05 10:57 下午

    一般来讲,中断处理是容易引起系统性能下降的,不知道VMM在这方面设计上有什么好的实践?

  23. deltali 于 2010-07-06 6:01 下午

    to 理客:
    没错,所以首先能够引起中断的情况是可以配置的,就是说有些情况是可以忽略。参看intel的VMX

    从另外一个方面如果发现有连续的中断,可以考虑批量处理,即在一次中断的情况下,处理多个指令。这部分工作现有的二进制翻译和code scan/patch能做一部分。

  24. 理客 于 2010-07-07 2:26 上午

    中断处理优化是不是很谨慎?比如中断合并等

  25. 陈怀临 于 2010-09-19 9:53 下午

    邪门。今天把家里的两台机器(laptop)装VMware和Ubuntu,然后试图按照KVM。但egrep -c ‘(vmx)’ /proc/cpuinfo 都为0. 手工去看cpuinfo文件,好像是没有。。。

    我的机器太差了??被人蒙了?

  26. Lucifer 于 2010-09-19 10:09 下午

    就VMware来说,在二进制翻译阶段,就已经按区段对要执行的代码进行扫描检测特权指令了

  27. 陈怀临 于 2010-09-19 10:37 下午

    你的意思是我的现在这个cpuinfo其实是vmware模拟提供的一个。。。。也是。我如果在vwware下–》linux–》kvm–》再运行一个windows。这确实有点夸张了。。。

    我独立装一个Linux分区算了。。。

  28. Lucifer 于 2010-09-19 11:30 下午

    虚拟化多层嵌套么。。x86的话,经过第一层hypervisor之后,虚拟化指令就已经有一些不支持了,或者说不再提供类似的特性了,对应的检测位也就没了

    类似地,x86虚拟机里面的虚拟机无法使用64位模式