精华内容
下载资源
问答
  • 硬件辅助虚拟化

    2020-02-22 12:07:42
    目前主要有Intel的VT-x和AMD的AMD-V这两种技术。...通常情况下,Guest OS的核心指令可以直接下达到计算机系统硬件执行,而不需要经过VMM。当Guest OS执行到特殊指令的时候,系统会切换到VMM,让VMM来处理特殊指令。...

    目前主要有Intel的VT-x和AMD的AMD-V这两种技术。其核心思想都是通过引入新的指令和运行模式,使VMM和Guest OS分别运行在不同模式(ROOT模式和非ROOT模式)下,且Guest OS运行在Ring 0下。通常情况下,Guest OS的核心指令可以直接下达到计算机系统硬件执行,而不需要经过VMM。当Guest OS执行到特殊指令的时候,系统会切换到VMM,让VMM来处理特殊指令。

    1、Intel VT-x技术

    为弥补x86处理器的虚拟化缺陷,市场的驱动催生了VT-x,Intel推出了基于x86架构的硬件辅助虚拟化技术Intel VT(Intel Virtualization Technology)。

    目前,Intel VT技术包含CPU、内存和I/O三方面的虚拟化技术。

    CPU硬件辅助虚拟化技术,分为对应安腾架构的VT-i(Intel Virtualization Technology for ltanium)和对应x86架构的VT-x(Intel Virtualization Technology for x86)。
    内存硬件辅助虚拟化技术包括EPT(Extended Page Table)技术。
    I/O硬件辅助虚拟化技术的代表VT-d(Intel Virtualization Technology for Directed I/O)。
    Intel VT-x技术解决了早期x86架构在虚拟化方面存在的缺陷,可使未经修改的Guest OS运行在特权级0,同时减少VMM对Guest OS的干预。Intel VT-d技术通过使VMM将特定I/O设备直接分配给特定的Guest OS,减少VMM对I/O处理的管理,不但加速数据传输,且消除了大部分性能开销。如下图所示。CPU硬件辅助虚拟化技术简要说明流程图:
    在这里插入图片描述

    效法IBM 大型机,VT-x提供了2 个运行环境:根(Root)环境和非根(Non-root)环境。根环境专门为VMM准备,很像原来没有VT-x 的x86,只是多了对VT-x 支持的几条指令。非根环境作为一个受限环境用来运行多个虚拟机。

    wKiom1afGTSh8RorAABRoN9MaUU781.png

    如上图所示,根操作模式与非根操作模式都有相应的特权级0至特权级3。VMM运行在根模式的特权级0,GuestOS的内核运行在非根模式的特权级0,GuestOS的应用程序运行在非根模式的特权级3。运行环境之间相互转化,从根环境到非根环境叫VMEntry;从非根环境到根环境叫VMExit。VT-x定义了VMEntry操作,使CPU由根模式切换到非根模式,运行客户机操作系统指令。若在非根模式执行了敏感指令或发生了中断等,会执行VMExit操作,切换回根模式运行VMM。

    根模式与非根模式之问的相互转换是通过VMX操作实现的。VMM 可以通过VMXON 和VMXOFF打开或关闭VT-x。如下图所示:

    在这里插入图片描述
    VMX操作模式流程:

    1)、VMM执行VMXON指令进入VMX操作模式。

    2)、VMM可执行VMLAUNCH指令或VMRESUME指令产生VM Entry操作,进入到Guest OS,此时CPU处于非根模式。

    3)、Guest OS执行特权指令等情况导致VMExit的发生,此时将陷入VMM,CPU切换为根模式。VMM根据VMExit的原因作出相应处理,处理完成后将转到2),继续运行GuestOS。

    4)、VMM可决定是否退出VMX操作模式,通过执行VMXOFF指令来完成。

    为更好地支持CPU虚拟化,VMX新定义了虚拟机控制结构VMCS(Virtual Machine ControlStructure)。VMCS是保存在内存中的数据结构,其包括虚拟CPU的相关寄存器的内容及相关的控制信息。CPU在发生VM Entry或VMExit时,都会查询和更新VMCS。VMM也可通过指令来配置VMCS,达到对虚拟处理器的管理。VMCS架构图如下图所示:

    在这里插入图片描述
    每个虚拟处理器都需将VMCS与内存中的一块区域联合起来,此区域称为VMCS区域。对VMCS区域的操纵是通过VMCS指针来实现的,这个指针是一个指向VMCS的64位的地址值。VMCS区域是一个最大不超过4KB的内存块,且需4KB对齐。

    VMCS区域分为三个部分:

    偏移0起是VMCS版本标识,通过不同的版本号,CPU可维护不同的VMCS数据格式;
    偏移4起是VMX中止指示器,在VMX中止发生时,CPU会在此处存入中止的原因;
    偏移8起是VMCS数据区,这一部分控制VMX非根操作及VMX切换。
    VMCS 的数据区包含了VMX配置信息:VMM在启动虚拟机前配置其哪些操作会触发VMExit。VMExit 产生后,处理器把执行权交给VMM 以完成控制,然后VMM 通过指令触发VMEntry 返回原来的虚拟机或调度到另一个虚拟机。

    VMCS 的数据结构中,每个虚拟机一个,加上虚拟机的各种状态信息,共由3个部分组成,如之前的VMCS架构图所示:

    1) Gueststate:该区域保存了虚拟机运行时的状态,在VMEntry 时由处理器装载;在VMExit时由处理器保存。它又由两部分组成:

    Guest OS寄存器状态。它包括控制寄存器、调试寄存器、段寄存器等各类寄存器的值。

    Guest OS非寄存器状态。用它可以记录当前处理器所处状态,是活跃、停机(HLT)、关机(Shutdown)还是等待启动处理器间中断(Startup-IPI)。

    2) Hoststate:该区域保存了VMM 运行时的状态,主要是一些寄存器值,在VMExit 时由处理器装载。

    3) Control data:该区域包含几部分数据信息,分别是:

    虚拟机执行控制域(VM-Execution control fields)。VMM 主要通过配置该区域来控制虚拟机在非根环境中的执行行为。基于针脚的虚拟机执行控制。它决定在发生外部中断或不可屏蔽中断(NMI)要不要发生VMExit。基于处理器的虚拟机执行控制。它决定虚拟机执行RDTSC、HLT、INVLPG 等指令时要不要发生VMExit。

    VMExit 控制域(VMExit control fields)。该区域控制VMExit 时的行为。当VMExit 发生后处理器是否处于64 位模式;当因为外部中断发生VMExit 时,处理器是否响应中断控制器并且获得中断向量号。VMM 可以用它来定制当VMExit 发生时要保存哪些MSR 并且装载哪些MSR。MSR是CPU的模式寄存器,设置CPU的工作环境和标识cpu的工作状态。

    VMEntry 控制域(VMEntry control fields)。该区域控制VMEntry 时的行为。它决定处理器VMEntry 后是否处于IA-32e 模式。与VMExit 的MSR控制类似,VMM 用它来定制当VMEntry 发生时要装载哪些MSR。VMM 可以配置VMEntry 时通过虚拟机的IDT向其发送一个事件。在此可以配置将使用IDT 的向量、中断类型(硬件或软件中断)、错误码等。

    VMExit 信息域(VMExit information fields)。该只读区域包括最近一次发生的VMExit 信息。试图对该区域执行写操作将产生错误。。此处存放VMExit 的原因以及针对不同原因的更多描述信息、中断或异常向量号、中断类型和错误码、通过 IDT 发送事件时产生的VMExit 信息、指令执行时产生的 VMExit 信息。

    有了VMCS结构后,对虚拟机的控制就是读写VMCS结构。后面对vCPU设置中断,检查状态实际上都是在读写VMCS数据结构。

    2、AMD-V技术

      AMD 从 2006 年便开始致力于硬件辅助虚拟化技术的研究,AMD-V全称是AMD Virtualization,AMD-V从代码的角度分别称为 AMD和 SVM,AMD开发这项虚拟化技术时的内部项目代码为Pacifica,是AMD推出的一种硬件辅助虚拟化技术。
    

    在这里插入图片描述

    Intel VT-x 和 AMD-V 提供的特征大多功能类似,但名称可能不一样,如 Intel VT-x 将用于存放虚拟机状态和控制信息的数据结构称为 VMCS, 而 AMD-V 称之为VMCB; Intel VT-x 将 TLB 记录中用于标记 VM 地址空间的字段为 VPID, 而AMD-V 称之为 ASID; Intel VT-x 将二级地址翻译称之为 EPT, AMD 则称为 NPT,等等一些区别。尽管其相似性,Intel VT-x 和 AMD-V 在实现上对 VMM 而言是不兼容的。

    AMD-V 在 AMD 传统的x86-64 基础上引入了“guest”操作模式。“guest”操作模式就是 CPU 在进入客操作系统运行时所处的模式。 “guest”操作模式为客操作系统设定了一个不同于 VMM 的运行环境而不需要改变客操作系统已有的 4 个特权级机制,也就是说在“guest”模式下,客操作系统的内核仍然运行在 Ring 0, 用户程序仍然在 Ring 3。 裸机上的操作系统和 VMM 所在的操作模式依然和传统的 x86 中一样,且称之为“host”操作模式。 VMM 通过执行 VMRUN 指令使CPU 进入“guest”操作模式而执行客操作系统的代码; 客操作系统在运行时,遇到敏感指令或事件,硬件就执行 VMEXIT 行为,使 CPU 回到“host”模式而执行 VMM 的代码。 VMRUN 指令运行的参数是一个物理地址指针,其指向一个 Virtual Machine Control Block (VMCB) 的内存数据结构, 该数据结构包含了启动和控制一个虚拟机的全部信息。

    wKiom1afGimzbOjaAABAsxMi2CI065.png

    “guest”模式的意义在于其让客操作系统处于完全不同的运行环境,而不需要改变客操作系统的代码。“guest”模式的设立在系统中建立了一个比 Ring 0 更强的特权控制,即客操作系统的 Ring 0 特权必须让位于 VMM 的 Ring 0 特权。客操作系统上运行的那些特权指令,即便是在 Ring 0 上也变的可以被 VMM 截取的了,“Ring Deprivileging”由硬件自动搞定。此外,VMM 还可以通过 VMCB 中的各种截取控制字段选择性的对指令和事情进行截取,或设置有条件的截取,所有的敏感的特权或非特权指令都在其控制之中。

    wKioL1afGpTiDMn-AABqRRMT8Wk023.jpg

    VMCB 数据结构主要包含如下内容 :

    1. 用于描述需要截取的指令或事件的字段列表。其中 :

    2 个 16 位的字段用于控制对 CR 类控制寄存器读写的截取

    2 个 16 位的字段用于控制对 DR 类调试寄存器的读写的截取

    一个 32 位的字段用于控制 exceptions 的截取

    一个 64 位的字段用于控制各种引起系统状态变化的事件或指令的截取,如 INTR, NMI, SMI 等事 件, HLT, CPUID,INVD/WBINVD,INVLPG/INVLPGA,MWAIT 等指令, 还包括两位分别标志是否对 IO 指令和 MSR 寄存器的读写进行控制

    指向IO端口访问控制位图和MSR读写控制位图的物理地址指针字段。该位图用于差别性地控制虚拟机对不同的 IO 端口和 MSR 寄存器进行读写访问。

    描述虚拟机CPU状态的信息。包含除通用寄存器外的大部分控制寄存器,段寄存器,描述符表寄存器,代码指针等。 RAX 寄存器也在其中,因为 RAX 在 VMM 执行 VMRUN 时是用来存放VMCB 物理地址的。 对于段寄存器,该信息中还包含段寄存器对应的段描述符,也就那些传统 x86 上对软件隐藏的信息。

    对虚拟机的执行进行控制的字段。主要是控制虚拟机中断和 NPT 的字段。

    指示虚拟机进入“guest”模式后要执行的行动的字段。包括用来描述 VMM 向虚拟机注入的中断或异常的信息的字段。 注入的中断或异常在 VMRUN 进入“guest”模式后立即执行,就象完全发生在虚拟机内一样。

    提供VMEXIT信息的字段。包括导致 VMEXIT 的事件的代码,异常或中断的号码,page fault 的线性地址,被截获的指令的编码等。

    wKiom1afGuOSVGDWAACiyrhiMUI787.png

    VMCB 以及其涉及的控制位图,完全通过物理地址进行指向,这就避免了“guest”和“host”模式切换的过程依赖于“guest”空间的线性地址 ( 传统操作系统内用户空间到内核的切换确实依赖于 IDT 中提供的目标的线性地址 ),使得 VMM 可以采用和客操作系统完全不同的地址空间。

    VMCB 的内容在物理上被分成了俩部分,其中用于保存虚拟机 CPU 状态的信息占据 2048 字节的后半部分,我们可称之为 VMCB.SAVE; 其他信息,占据前 1024 字节范围,我们可称之为 VMCB.CONTROL。

    VMRUN 命令以 VMCB 为参数,使CPU 进入“guest”状态, 按 VMCB.SAVE 的内容恢复虚拟机的 CPU 寄存器状态,并按 VMCB.SAVE 中 CS:RIP 字段指示的地址开始执行虚拟机 的代码, 并将之前 VMM 的 CPU 状态保存在MSR_VM_HSAVE_PA 寄存器所指向的物理内存区域中。VMRUN 所保存的 VMM 的 CPU状态的 CS:RIP 实际上就是 VMM 的代码中 VMCB 的下一个指令,当虚拟机因某种原因而导致 #VMEXIT 时,VMM 会从 VMRUN 后的一条指令开始执行。CPU 执行 #VMEXIT 行为时,会自动将虚拟机的状态保存到 VMCB.SAVE 区,并从 MSR_VM_HSAVE_PA 指定的区域加载 VMM 的 CPU 状态。

    VMLOAD 和 VMSAVE 指令是对 VMRUN 的补充,他们用来加载和恢复一些并不需要经常使用的 CPU 状态,如 FS, GS, TR, LDTR 寄存器以及其相关的隐含的描述符寄存器的内容,VMLOAD 和 VMSAVE 可以让 VMM 的实现对“guest”进入和退出的过程进行优化,让多数情况下只使用 VMRUN 进行最少的状态保存和恢复。

    VMMCALL 指令是 AMD-V 为客操作系统内核提供的明确的功能调用接口,类似于 syscall 指令 ( 从 Ring3 到 Ring 0), VMMCALL 让客操作系统直接执行 #VMEXIT 而进入 VMM,请求VMM 的服务。

    3、总结

    回顾一下CPU虚拟化技术的实现,纯软件的CPU虚拟化使用了陷入-模拟的模式来模拟特权指令,而在x86架构中由于只能模拟特权指令,无法模拟某些敏感指令而无法实现完全的虚拟化。(在x86架构中,特权指令一定是敏感指令,但是敏感指令比特权指令多,造成某系敏感指令不是特权指令而无法模拟,使得CPU虚拟化异常),而硬件辅助虚拟化引入了根模式(root operation)和非根模式(none-root operation),每种模式都有ring0-3的四级特权级别。所以,在硬件辅助虚拟化中,陷入的概念实际上被VM-EXIT操作取代了,它代表从非根模式退出到根模式,而从根模式切换到非根模式是VM-Entry操作。

    转载于:https://www.cnblogs.com/echo1937/p/7218201.html

    展开全文
  • 目前主要有Intel的VT-x和AMD的AMD-V这两种技术。...为弥补x86处理器的虚拟化缺陷,市场的驱动催生了VT-x,Intel推出了基于x86架构的硬件辅助虚拟化技术IntelVT(IntelVirtualizationTechnology)。目前,IntelVT技术
  • 我们知道,虚拟化技术一共有全虚拟化(使用二进制翻译)、半虚拟化(操作系统辅助)和硬件辅助虚拟化,那这三者各有什么特点和优缺点呢? 传统硬件上直接安装OS的时候,OS工作在Ring0,应用软件工作在Ring3 ...

    目前虚拟化技术有软件模拟、全虚拟化(使用二进制翻译)、半虚拟化(操作系统辅助)、硬件辅助虚拟化和容器虚拟化这几种。
    (1)软件模拟
    软件模拟是通过软件完全模拟cpu、芯片组、磁盘、网卡等计算机硬件:
    在这里插入图片描述
    因为是软件模拟,所以理论上可以模拟任何硬件,但是非常低效,一般只用于研究测试的场景,典型的有QEMU。
    (2)全虚拟化
    x86平台指令集分为4个特权模式:Ring0 、Ring1、Ring2、Ring3、OS工作在Ring0级别,应用软件工作在Ring3级别,驱动程序工作在Ring1和Ring2。
    在这里插入图片描述
    如何将虚拟机越级的指令使用进行隔离,1998年VMware首次找到了解决办法,通过虚拟化引擎,捕获虚拟机的指令,并进行处理,即全虚拟化方案。
    在全虚拟化的情况下,VMM工作在Ring 0 ,Guest OS工作在Ring 1 ,应用程序工作在Ring 3,可是这时候Guest OS是不知道自己工作在虚拟机里的,认为自己还是工作在Ring 0 ,所以它还是按照Ring 0级别产特权生指令,Guest OS产生的每一条指令都会被VMM截取,并翻译成宿主机平台的指令,然后交给实际的物理平台执行,由于每一条指令都需要这么翻译一下,所以这种虚拟化性能比较差。
    在这里插入图片描述
    (3)半虚拟化**
    半虚拟化是对Guest OS做相应修改,以便和VMM协同运作。在硬件辅助虚拟化兴起之前,半虚拟化性能胜过全虚拟化。在半虚拟化情况下,Guest OS知道自己并不是直接运行在硬件资源上,而是运行在虚拟化环境里,工作在非Ring 0,那么它原先在物理机上执行的一些特权指令,就会修改成其他方式(超级调用),这种方式是可以和VMM约定好的,半虚拟化不需要VMM层进行二进制翻译,所以性能较好,但是实现比较麻烦(要修改OS内核代码),典型的半虚拟化技术有xen。
    在这里插入图片描述

    (4)硬件辅助虚拟化**
    2005年,Intel推出了硬件辅助虚拟化方案,对CPU指令进行改造,即VT-x,VT-x提供了两种操作模式:VMX root operation和VMX non-root operation,VMM运行在 VMX root operation,虚拟机运行在VMX non-root operation。在绝大多数情况下,客户机在此模式下运行与原生系统在非虚拟化环境中运行性能一样,不需要像全虚拟化那样每条指令都要先翻译再执行;在少数必要的时候,某些客户机指令的运行才需要被VMM截获并做相应处理。这种方案因为是基于硬件的,所以效率非常高。
    在这里插入图片描述
    现在不仅CPU指令有硬件虚拟化方案,I/O通信也有硬件解决方案,称为VT-d;网络通信的称为VT-c。
    (5)容器虚拟化
    容器虚拟化是基于CGroups、Namespace等技术将进程进行隔离,每个进程就像一台独立的虚拟机,拥有自己被隔离出来的资源,也有自己的根目录、独立的进程编号、被隔离的内存空间。基于容器的虚拟化可以实现在单一内核上运行多个实例。目前热门的容器虚拟化技术Docker,Docker可以将一个开发环境进行打包,很方便在另一个系统上运行起来。

    展开全文
  • 这叫做硬件辅助虚拟化。 另外就是访问网络或者硬盘的时候,为了取得更高的性能,也需要让虚拟机内核加载特殊的驱动,也是让虚拟机内核从代码层面就重新定位自己的身份,不能像访问物理机一样访问网络或者硬盘,...

    文章转载至网易云架构师刘超的个人微信号

    内核,是指的操作系统内核。

    所有的操作系统都有内核,无论是Windows还是Linux,都管理着三个重要的资源:计算,网络,存储。

    计算指CPU和内存,网络即网络设备,存储即硬盘之类的。
    这里写图片描述
    内核是个大管家,想象你的机器上跑着很多的程序,有word,有excel,看着视频,听着音乐,每个程序都要使用CPU和内存,都要上网,都要存硬盘,如果没有一个大管家管着,大家随便用,就乱了。所以需要管家来协调调度整个资源,谁先用,谁后用,谁用多少,谁放在这里,谁放在那里,都需要管家操心。

    所以在这个计算机大家庭里面,管家有着比普通的程序更高的权限,运行在内核态,而其他的普通程序运行在用户态,用户态的程序一旦要申请公共的资源,就需要向管家申请,管家帮它分配好,它才能用。

    为了区分内核态和用户态,CPU专门设置四个特权等级0,1,2,3 来做这个事情。

    这里写图片描述

    当时写Linux内核的时候,估计大牛们还不知道将来虚拟机会大放异彩,大牛们想,一共两级特权,一个内核态,一个用户态,却有四个等级,好奢侈,好富裕,就敞开了用,内核态运行在第0等级,用户态运行在第3等级,占了两头,太不会过日子了。

    大牛们在写Linux内核的时候,如果用户态程序做事情,就将扳手掰到第3等级,一旦要申请使用更多的资源,就需要申请将扳手掰到第0等级,内核才能在高权限访问这些资源,申请完资源,返回到用户态,扳手再掰回去。

    这个程序一直非常顺利的运行着,直到虚拟机的出现。

    如果大家用过Vmware桌面版,或者Virtualbox桌面版,你可以用这个虚拟化软件创建虚拟机,在虚拟机里面安装一个Linux或者windows,外面的操作系统也可以是Linux或者Windows。

    当你使用虚拟机软件的时候,和你的excel一样,都是在你的任务栏里面并排的放着,是一个普通的应用。

    当你进入虚拟机的时候,虚拟机里面的excel也是一个普通的应用。

    但是当你设身处地的站在虚拟机里面的内核的角度思考一下人生,你就困惑了,我到底个啥?

    在硬件上的操作系统来看,我是一个普通的应用,只能运行在用户态。可是大牛们生我的时候,我的每一行代码,都告诉我,我是个内核啊,应该运行在内核态,当虚拟机里面的excel要访问网络的时候,向我请求,我的代码就要努力的去操作网络资源,我努力,但是我做不到,我没有权限!

    我分裂了。

    虚拟化层,也就是Vmware或者Virtualbox需要帮我解决这个问题。

    第一种方式,完全虚拟化,其实就是骗我。虚拟化软件模拟假的CPU,内存,网络,硬盘给我,让我自我感觉良好,终于又像个内核了。

    真正的工作模式是这样的。

    虚拟机内核:我要在CPU上跑一个指令!
    虚拟化软件:没问题,你是内核嘛,可以跑
    虚拟化软件转过头去找物理机内核:报告管家,我管理的虚拟机里面的一个要执行一个CPU指令,帮忙来一小段时间空闲的CPU时间,让我代他跑个指令。
    物理机内核:你等着,另一个跑着呢。好嘞,他终于跑完了,该你了。
    虚拟化软件:我代他跑,终于跑完了,出来结果了
    虚拟化软件转头给虚拟机内核:哥们,跑完了,结果是这个,我说你是内核吧,绝对有权限,没问题,下次跑指令找我啊。
    虚拟机内核:看来我真的是内核呢。可是哥,好像这点指令跑的有点慢啊。
    虚拟化软件:这就不错啦,好几个排着队跑呢。

    内存的申请模式如下。

    虚拟机内核:我启动需要4G内存,我好分给我上面的应用。
    虚拟化软件:没问题,才4G,你是内核嘛,马上申请好。
    虚拟化软件转头给物理机内核:报告,管家,我启动了一个虚拟机,需要4G内存,给我4个房间呗。
    物理机内核:怎么又一个虚拟机啊,好吧,给你90,91,92,93四个房间。
    虚拟化软件转头给虚拟机内核:哥们,内存有了,0,1,2,3这个四个房间都是你的,你看,你是内核嘛,独占资源,从0编号的就是你的。
    虚拟机内核:看来我真的是内核啊,能从头开始用。那好,我就在房间2的第三个柜子里面放个东西吧。
    虚拟化软件:要放东西啊,没问题。心里想:我查查看,这个虚拟机是90号房间开头的,他要在房间2放东西,那就相当于在房间92放东西。
    虚拟化软件转头给物理机内核:报告,管家,我上面的虚拟机要在92号房间的第三个柜子里面放个东西。

    好了,说完了CPU和内存的例子,不细说网络和硬盘了,也是类似,都是虚拟化软件模拟一个给虚拟机内核看的,其实啥事儿都需要虚拟化软件转一遍。

    这种方式一个坏处,就是慢,往往慢到不能忍受。

    于是虚拟化软件想,我能不能不当传话筒,还是要让虚拟机内核正视自己的身份,别说你是内核,你还真喘上了,你不是物理机,你是虚拟机。

    但是怎么解决权限等级的问题呢?于是Intel的VT-x和AMD的AMD-V从硬件层面帮上了忙。当初谁让你们这些写内核的大牛用等级这么奢侈,用完了0,就是3,也不省着点用,没办法,只好另起炉灶弄一个新的标志位,表示当前是在虚拟机状态下,还是真正的物理机内核下。

    对于虚拟机内核来讲,只要将标志位设为虚拟机状态,则可以直接在CPU上执行大部分的指令,不需要虚拟化软件在中间转述,除非遇到特别敏感的指令,才需要将标志位设为物理机内核态运行,这样大大提高了效率。

    所以安装虚拟机的时候,务必要将物理CPU的这个标志位打开,是否打开对于Intel可以查看grep “vmx” /proc/cpuinfo,对于AMD可以查看grep “svm” /proc/cpuinfo

    这叫做硬件辅助虚拟化。

    另外就是访问网络或者硬盘的时候,为了取得更高的性能,也需要让虚拟机内核加载特殊的驱动,也是让虚拟机内核从代码层面就重新定位自己的身份,不能像访问物理机一样访问网络或者硬盘,而是用一种特殊的方式:我知道我不是物理机内核,我知道我是虚拟机,我没那么高的权限,我很可能和很多虚拟机共享物理资源,所以我要学会排队,我写硬盘其实写的是一个物理机上的文件,那我的写文件的缓存方式是不是可以变一下,我发送网络包,根本就不是发给真正的网络设备,而是给虚拟的设备,我可不可以直接在内存里面拷贝给他,等等等等。

    一旦我知道我不是物理机内核,痛定思痛,只好重新认识自己,反而能找出很多方式来优化我的资源访问。

    这叫做类虚拟化或者半虚拟化。

    展开全文
  • Xen 半虚拟化和硬件辅助虚拟化

    千次阅读 2012-05-04 16:01:01
    Xen 支持半虚拟化和硬件辅助虚拟化两种方式,半虚拟化下只能安装特定的操作系统,这些系统内核都被修改过。 而在硬件辅助虚拟化的帮助下,Xen虚拟机上可以运行未经修改的操作系统,例如Windows等。 要创建硬件辅助...

    Xen 支持半虚拟化和硬件辅助虚拟化两种方式,半虚拟化下只能安装特定的操作系统,这些系统内核都被修改过。

    而在硬件辅助虚拟化的帮助下,Xen虚拟机上可以运行未经修改的操作系统,例如Windows等。

    要创建硬件辅助虚拟化的虚拟机,需要在BIOS中开启Intel VT 或者 AMD SVM。

    我们启动半虚拟化虚拟机时,可以通过 xm console <domain_id> 命令进入半虚拟化domU中的Guest OS启动界面。

    而硬件辅助虚拟化拟机(HVM) 的Guest OS启动界面或终端要通过其它工具进入,例如 virt-viewer,或者 virt-manager。

    virt-viewer  <domain_id> 即可进入虚拟机终端

    展开全文
  • 开启硬件辅助虚拟化

    千次阅读 2016-07-28 08:14:52
    开启硬件辅助虚拟化和支持Server 2012 Hyper-vDELL 2950安装64位Server 2012,需在bios里面手动开启cpu的VT支持,否则在使用Hyper-v安装虚拟机时会报“Hypervisor服务未运行”的错误。操作步骤:1 在 POST 屏幕中按 ...
  • 硬件辅助虚拟化,顾名思义,就是在CPU、芯片组以及I/O设备等硬件中加入专门针对虚拟化的支持,使系统软件可以更高效、更简易的实现虚拟化。 为何需要硬件辅助?原因有三: 1,原有的硬件体系结构在虚拟化方面...
  • 在本文中,我们介绍了新型系统Samsara的设计和实现,该系统使用硬件辅助虚拟化(HAV)扩展来实现高效的确定性重放,而无需进行任何硬件修改。 与现有的跟踪每个内存访问以记录交织的软件方案不同,Samsara利用商品...
  • 在嵌套虚拟环境(Nested Virtualization)下,运行在...而在《KVM硬件辅助虚拟化之 EPT》一文中,我们详细分析了单层虚拟机并引入硬件辅助虚拟化EPT功能的环境下,Guest OS中的虚拟地址到真实物理地址的访问方法
  • KVM处理器管理和硬件辅助虚拟化技术 Intel 在2006年发布了硬件虚拟化技术。其中支持X86体系结构的称为Intel VT-x技术。AMD称为SVM技术。 VT-x引入了一种新的处理器操作,叫做VMX(Virtual MachineExtension)...
  • 最后,启动您的虚拟机,运行在硬件辅助虚拟化技术之上的虚机将会立即运作起来!   性能增强 OK,启用硬件虚拟化之后你会问,启用之后有什么变化?有些人可能会问,有没有地方可以配置,或者虚拟里还需不...
  • 这个直接用命令进行处理就好了 grep "vmx" /proc/cpuinfo  如下所示 虚拟化 进行服务器 使用的时候要确保支持硬件虚拟化
  • HVM(硬件辅助虚拟化)技术

    千次阅读 2011-03-16 18:33:00
    ,下面是文章的列表: 第2章 硬件虚拟机技术简介 第3章 Intel-VT技术 第4章 建立开发环境 第5章 总体设计方案 第6章 Smart-VM操作系统的实现 第7章 Smart-VM虚拟化层的实现 第8...
  • 最近安装使用夜神虚拟机的时候,提示关闭虚拟服务
  • http://royluo.org/2014/06/18/KVM-EPT/ http://royluo.org/2016/03/13/kvm-mmu-virtualization/
  • 可能原因是为打开硬件辅助虚拟化。 导致打不开虚拟机。 看过网上一些大神的点子,亲测一下方法有效: 在控制面板-程序-打开或关闭windows功能 先把hyper-V勾消,点确定重启 开机后再把hyper-V勾
  • 重启计算机,(联想台式按F1)进入BIOS,找到CPU设置项,将Intel Virtualization Technology设置成Enabled,然后重启计算机
  • (文章来自作者维护的社区微信公众号【虚拟化云计算】) ... 现在IO虚拟化有很多方式,有软件模拟、半虚拟化、设备直接分配、单根IO虚拟化。...下面介绍一下IO的硬件辅助虚拟化。 Device Pas...
  • kvm虚拟化硬件辅助IO虚拟化之SR-IOV

    千次阅读 2018-01-27 20:43:18
    (文章来自作者维护的社区微信公众号【虚拟化云计算】) (目前有两个微信群《kvm虚拟化》和《openstack》,扫描二维码点击“云-交流”,进群交流提问) SR-IOV是什么,它和virtio、Device assignment的IO虚拟化...
  • 压缩包里面是一些硬件虚拟化最近的文章,有国外人做的,也有国内人在硬件辅助虚拟化方面的跟进研究。
  • 简介:主要是在客户操作系统和硬件之间捕捉和处理那些对虚拟化敏感的特权指令,使客户操作系统无需修改就能运行,速度会根据不同的实现而不同,但大致能满足用户的需求。这种方式是业界现今最成熟和最常见的,而且...
  • Intel VT中的VT-x(Intel Virtualization technology for x86)技术扩展了传统的IA32处理器架构,为IA32架构的处理器虚拟化提供了硬件支持。 VMX操作模式 VT-x引入了两种操作模式,统称为VMX操作模式。 1. 根操作...
  • TAG标签: x86 虚拟化技术 KVM 硬件辅助 实现机制 摘要:本系列(两部分)文章以 AMD 的硬件平台为例,介绍 KVM 基于 X86 硬件辅助虚拟化技术的实现机制, 力图让读者对 KVM 在 AMD 平台上实现的原理、方法和代码...
  • 接触过的一些搞了几年云计算的童鞋,也没明白常见的几种虚拟机技术方案的异同,比如只是记住了半虚拟要在虚拟机装驱动而全虚拟...本人呢,在看了各种讲解虚拟化的书籍之后,有些概念虽然不是很清晰,但对各种虚拟化...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,708
精华内容 13,083
关键字:

硬件辅助虚拟化