留坑~~~

不知道这个是这么实现的

CPU虚拟化技术就是单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。虚拟化技术与多任务以及超线程技术是完全不同的。多任务是指在一个操作系统中多个程序同时并行运行,而在虚拟化技术中,则可以同时运行多个操作系统,而且每一个操作系统中都有多个程序运行,每一个操作系统都运行在一个虚拟的CPU或者是虚拟主机上;而超线程技术只是单CPU模拟双CPU来平衡程序运行性能,这两个模拟出来的CPU是不能分离的,只能协同工作。

CPU 虚拟化基本知识

CPU 虚拟化着重于性能,只要有可能就会直接在处理器上运行。只要有可能就会使用基础物理资源,且虚拟化层仅在需要时才运行指令,使得虚拟机就像直接在物理机上运行一样。

CPU 虚拟化与仿真不同。采用仿真时,所有操作均由仿真器在软件中运行。软件仿真器允许程序在不同于最初编写时所针对的计算机系统上运行。仿真器通过接受相同的数据或输入并获得相同的结果,来模拟或再现原始计算机的行为,从而实现仿真。仿真提供了可移植能力,并在几个不同平台上运行针对一个平台而设计的软件。

CPU 资源过载时,ESX/ESXi 主机将在所有虚拟机之间对物理处理器进行时间划分,以便每个虚拟机在运行时就如同具有指定数目的虚拟处理器一样。运行多个虚拟机的 ESX/ESXi 主机会为各虚拟机分配一定份额的物理资源。如果使用默认资源分配设置,与同一主机关联的所有虚拟机都将在每个虚拟CPU上收到相同份额的CPU。

这意味着单处理器虚拟机分配到的资源只有双处理器虚拟机的一半。

基于软件的 CPU 虚拟化

采用基于软件的CPU虚拟化后,客户机应用程序代码直接在处理器上运行,同时转换客户机特权代码并在处理器上运行该代码。

转换后的代码有点大,比本机版本的执行速度通常要慢。因此,具有少量特权代码组件的客户机程序的运行速度与本机程序非常接近。而具有大量特权代码组件(如系统调用、陷阱或页面表更新)的程序在虚拟环境中的运行速度可能较慢。

硬件辅助的 CPU 虚拟化

某些处理器(例如 Intel VT 和 AMD SVM)为 CPU 虚拟化提供了硬件辅助。

使用此辅助时,客户机可以使用独立的执行模式(称为客户机模式)。应用程序代码或特权代码等客户机代码均在客户机模式中运行。出现某些事件时,处理器退出客户机模式而进入根模式。管理程序将在根模式中执行,确定退出的原因,采取任何必需的措施,并在客户机模式中重新启动客户机。

将硬件辅助用于虚拟化时,不需要再转换代码。因此,系统调用或陷阱密集型工作负载在运行时的速度非常接近本机速度。但是,诸如涉及更新页面表之类的一些工作负载会导致多次退出客户机模式而进入根模式。根据退出的次数和退出所用的总时间,这可能会明显降低执行的速度。

转载请注明:

本文转自:http://www.liusuping.com/xunihua/xunihua-cpu.html

http://www.zdnet.com.cn/wiki-Virtualization_Technology

http://www.ibm.com/developerworks/cn/aix/library/1212_weixy_powervmcpuusage/

http://www.idcun.com/virtual/2014052838966.html

http://www.huawei.com/ecommunity/bbs/10147029.html

CPU虚拟化技术(留坑)的更多相关文章

  1. CPU硬件辅助虚拟化技术

    目前主要有Intel的VT-x和AMD的AMD-V这两种技术.其核心思想都是通过引入新的指令和运行模式,使VMM和Guest OS分别运行在不同模式(ROOT模式和非ROOT模式)下,且Guest O ...

  2. 虚拟化技术实现 — KVM 的 CPU 虚拟化

    目录 文章目录 目录 前文列表 x86 体系结构的虚拟化 硬件辅助的 CPU 虚拟化 由 VMX 切换支撑的 CPU 虚拟化技术 KVM 的 CPU 虚拟化实现 vCPU 的调度方式 客户机 CPU ...

  3. 虚拟化技术原理(CPU、内存、IO)

    本文来自:http://www.ywnds.com/?p=5856 虚拟化 云计算现在已经非常成熟了,而虚拟化是构建云计算基础架构不可或缺的关键技术之一. 云计算的云端系统, 其实质上就是一个大型的分 ...

  4. [转] KVM虚拟化技术生态环境介绍

    KVM虚拟化技术生态环境介绍 http://xanpeng.github.io/wiki/virt/kvm-virtulization-echosystem-intro.html kvm和qemu/q ...

  5. KVM之CPU虚拟化

    1.1 为什么要虚拟化CPU 虚拟化技术是指在x86的系统中,一个或以上的客操作系统(Guest Operating System,简称:Guest OS)在一个主操作系统(Host Operatin ...

  6. CPU虚拟化的常见技术

    关键词:cpu虚拟化,KVM,Host-PassThrough,Nested,CGroup,NUMA,热添加 云计算虚拟化技术主要包括三个领域:计算.存储.网络 本文主要总结了计算虚拟化领域中的CPU ...

  7. 怎样知道 CPU 是否支持虚拟化技术(VT) | Linux 中国

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/F8qG7f9YD02Pe/article/details/79832475 wx_fmt=png&a ...

  8. CPU纯软件半虚拟化技术

    在2003年出现的Xen,使用了另外的一种半虚拟化的方案来解决x86架构下CPU的敏感指令问题.主要采用Hypercall技术.Guest OS的部分代码被改变,从而使Guest OS会将和特权指令相 ...

  9. CPU纯软件全虚拟化技术

    我们在前面的文章中提到了虚拟化技术的大致分类情况,即分为全虚拟化.半虚拟化和硬件辅助虚拟化3大类.而我们虚拟化技术最主要的虚拟主体就是我们的硬件CPU.内存和IO,那么我们的CPU在全虚拟化模式下如何 ...

随机推荐

  1. 百度Ueditor编辑器的Html模式自动替换样式的解决方法

    百度的Ueditor编辑器出于安全性考虑,用户在html模式下粘贴进去的html文档会自动被去除样式和转义.虽然安全的,但是非常不方便. 做一下修改把这个功能去掉. 一.打开ueditor.all.j ...

  2. php curl流方式远程下载大文件

    $url="http://*"; #下载文件 set_time_limit(0); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, ...

  3. 微信内置浏览器UserAgent的判断

    需求分析 现在微信火了,很多线上的APP都希望通过分享的URL或直接的URL进行产品宣传(写这篇博文的时候,听说微信下个版本将要屏蔽微信中的URL链接),这些链接都将通过微信内置的浏览器打开.PM希望 ...

  4. Python之 continue继续循环和多重循环

    Python之 continue继续循环 在循环过程中,可以用break退出当前循环,还可以用continue跳过后续循环代码,继续下一次循环. 假设我们已经写好了利用for循环计算平均分的代码: L ...

  5. Bluetooth LMP介绍

    目录 1. 介绍 2. 数据包格式(Packet Format) 3. Procedure Rules 4. 通用回应消息(General Response Messages) 5. 设备特性(Dev ...

  6. 【VC6】【集成工具】将输入信息集成到VC工具中

    1.首先写一个工具,可以接受外部参数, 并且输入格式必须是固定的“"%s(%d):\n", __FILE__, __LINE__”形式. 2.编译生成EXE准备进行使用: 3.在V ...

  7. Delphi Memory-Mapped File简单示例

    { Copyright ?1999 by Delphi 5 Developer's Guide - Xavier Pacheco and Steve Teixeira } unit MainFrm; ...

  8. Arcgis for JS之Cluster聚类分析的实现(基于区域范围的)

    原文:Arcgis for JS之Cluster聚类分析的实现(基于区域范围的) 咱们书接上文,在上文,实现了基于距离的空间聚类的算法实现,在本文,将继续介绍空间聚类之基于区域范围的实现方式,好了,闲 ...

  9. Marriage Match IV---hdu3416(spfa + Dinic)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3416 有一个有向图,n个点,m条边,给一个起点和终点,求出从起点到终点的最短路共有几条,每 ...

  10. 根据 字数 确定 UI控件高度

    //字体 textLabel.font = [UIFont systemFontOfSize:13]; CGFloat labelWidth = [UIScreen mainScreen].bound ...