In computing,virtualization refers to the act of creating a virtual(rather than actual)version of something,including virtual computer hardwareplatforms,storage devices,and computer network resources。

简单来说就是计算,存储,网络的虚拟化版本。

有了虚拟化技术,一个NC(宿主机)可以被抽象成多个逻辑主机。

VMM(又叫Hypervisor),是用来创建与运行虚拟机(Instance、GuestOS、VM通常认为等价)的软件、固件或硬件。

被 hypervisor 用来运行一个或多个虚拟机的电脑称为宿主机(host machine),这些虚拟机则称为客户机(guest machine)。Hypervisor 提供虚拟的作业平台来运行客操作系统(GuestOS - guest operating systems),负责管理其他客操作系统的运行阶段;这些GuestOS,共同分享虚拟化后的硬件资源。

虚拟化有多种实现方式,下面分别介绍。

01 

软件虚拟化和硬件虚拟化

就是通过软件模拟来实现VMM层,通过纯软件的环境来模拟执行客户机里的指令。最纯粹的软件虚拟化实现当属QEMU,KVM。

QEMU是一个主机上的VMM(virtual machine monitor),通过动态二进制转换来模拟CPU,并提供一系列的硬件模型,使guest os认为自己和硬件直接打交道,其实是同QEMU模拟出来的硬件打交道,QEMU再将这些指令翻译给真正硬件进行操作。通过这种模式,guest os可以和主机上的硬盘,网卡,CPU,CD-ROM,音频设备和USB设备进行交互。但由于所有指令都需要经过QEMU来翻译,因而性能会比较差:

KVM实际是linux内核提供的虚拟化架构,可将内核直接充当hypervisor来使用。KVM需要处理器硬件本身支持虚拟化扩展,如intel VT 和AMD AMD-V技术。KVM自2.6.20版本后已合入主干并发行,除此之外,还以模块形式被移植到FreeBSD和illumos中。除了支持x86的处理器,同时也支持S/390,PowerPC,IA-61以及ARM等平台。

KVM包含一个内核模块kvm.ko用来实现核心虚拟化功能,以及一个和处理器强相关的模块如kvm-intel.ko或kvm-amd.ko。KVM本身不实现任何模拟,仅仅是暴露了一个/dev/kvm接口,这个接口可被宿主机用来主要负责vCPU的创建,虚拟内存的地址空间分配,vCPU寄存器的读写以及vCPU的运行。有了KVM以后,GuestOS的CPU指令不用再经过QEMU来转译便可直接运行,大大提高了运行速度。但KVM的kvm.ko本身只提供了CPU和内存的虚拟化,所以它必须结合QEMU才能构成一个完整的虚拟化技术,也就是下面要介绍的技术。

参考,ubuntu默认加载了KVM模块

Qemu将KVM整合进来,通过ioctl调用/dev/kvm接口,将有关CPU指令的部分交由内核模块来做。kvm负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但kvm不能模拟其他设备。qemu模拟IO设备(网卡,磁盘等),kvm加上qemu之后就能实现真正意义上服务器虚拟化。因为用到了上面两个东西,所以称之为qemu-kvm

Qemu模拟其他的硬件,如Network, Disk,同样会影响这些设备的性能,于是又产生了pass through半虚拟化设备virtio_blk, virtio_net,提高设备性能,关于半虚拟化,后文会介绍。

QEMU-KVM,是QEMU的一个特定于KVM加速模块的分支,里面包含了很多关于KVM的特定代码,与KVM模块一起配合使用。

目前QEMU-KVM已经与QEMU合二为一,所有特定于KVM的代码也都合入了QEMU,当需要与KVM模块配合使用的时候,只需要在QEMU命令行加上 --enable-kvm就可以。

qemu-kvm会创建Guest OS,当需要执行CPU指令的时候,通过/dev/kvm调用kvm内核模块,通过硬件辅助虚拟化方式加速。如果需要进行网络和存储访问,则通过类虚拟化或者直通Pass through的方式,通过加载特殊的驱动,加速访问网络和存储资源。

实际调用过程一般通过libvirt或者基于libvirt的管理工具,如virsh,virsh-manager等。

libvirt细节在其他文章介绍。

硬件虚拟化

硬件虚拟化技术就是指计算机硬件本身提供能力让客户机指令独立执行,而不需要(严格来说是不完全需要)VMM截获重定向。

以x86架构为例,它提供一个略微受限制的硬件运行环境供客户机运行(non-root mode),在绝大多数情况下,客户机在此受限环境中运行与原生系统在非虚拟化环境中运行没有什么两样,不需要像软件虚拟化那样每条指令都先翻译再执行,而VMM运行在root mode,拥有完整的硬件访问控制权限。仅仅在少数必要的时候,某些客户机指令的运行才需要被VMM截获并做相应处理,之后客户机返回并继续在non-root mode中运行。可以想见,硬件虚拟化技术的性能接近于原生系统,并且,极大地简化了VMM的软件设计架构。

02

从实现虚拟化的方式分为半虚拟化和全虚拟化

全虚拟化(Full Virtualization)

全虚拟化也成为原始虚拟化技术,该模型使用虚拟机协调GuestOS和原始硬件,VMM在GuestOS和裸硬件之间用于工作协调,一些受保护指令必须由Hypervisor(虚拟机管理程序)来捕获处理。

全虚拟化模型

全虚拟化的运行速度要快于硬件模拟,但是性能方面不如裸机,因为Hypervisor需要占用一些资源。

半虚拟化/准虚拟化(Para Virtualization)

半虚拟化是另一种类似于全虚拟化的技术,它使用Hypervisor分享存取底层的硬件,但是它的GuestOS集成了虚拟化方面的代码。它就是在全虚拟化的基础上,把客户操作系统进行了修改,增加了一个专门的API,这个API可以将客户操作系统发出的指令进行最优化,即不需要Hypervisor耗费一定的资源进行翻译操作,因此Hypervisor的工作负担变得非常的小,因此整体的性能也有很大的提高。

半虚拟化模型

需要GuestOS做一些修改,使GuestOS意识到自己是处于虚拟化环境的,但是半虚拟化提供了与原操作系统相近的性能。

03

Hypervisor的类型,Type1和Type2虚拟化

根据虚拟化层是位于硬件之上还是Host OS,将虚拟化分为Type1和Type2,如下图

Type-1:本地(native)、裸机(bare-metal) hypervisors

  • Hypervisor直接运行在物理机上,并直接控制硬件及管理GuestOS,此时host把GuestOS当成一个process;

  • 如:Xen、VMware ESX、 XenServer 、 Hyper-V 、Xvisor。

Type-2:托管(hosted) hypervisors

  • Hypervisor运行在HostOS上,进而提供虚拟化服务;

  • 如:VMware、VirtualBox、KVM。

参考

《KVM实战:原理、进阶与性能调优》

https://www.cnblogs.com/gzxbkk/p/10116000.html

https://www.cnblogs.com/qiaoyanlin/p/6888408.html

https://www.unixarena.com/2017/12/para-virtualization-full-virtualization-hardware-assisted-virtualization.html/

http://wiki.csie.ncku.edu.tw/embedded/xvisor

https://www.csie.ntu.edu.tw/~wcchen/asm98/asm/proj/b85506061/chap3/privilege.html

https://os.ecci.ucr.ac.cr/ci1310/Tematica/Harvard/os-structure.pdf

扩展阅读:

《梁宁增长思维30讲笔记 - 1》

《梁宁增长思维30讲笔记 - 作战地图 - 2》

《什么是新零售(上)》

《什么是新零售(下)》

《乌合之众 -- 群体的意见和信念》

《乌合之众 -- 群体心理》

《知识的边界 -- To big to know.》

《不确定性与黑天鹅》

《我们为什么认知不到黑天鹅事件》

《《商业的本质》 -- 商业篇》

《《商业的本质》 -- 团队篇》

《《商业的本质》 -- 职业管理篇》

《费曼技巧》

《自尊与自我效能》

《什么是增长黑客》

《信任博弈与利他偏好》

《工具主义和现实主义》

《可证伪性》

《狭义相对论》

《神经网络(Neural Network)》

《世界观 - 经验事实和哲学性/概念性事实》

《钢铁,钻石,以及自我认知》

《战略管理与市场分析》

《社会心理以及价值观的影响》

《学习的本质》

《测试敏捷化!-- 《双态IT联盟 - 测试敏捷化白皮书》》

THE END

- 晚安 -

图片长按2秒,识别图中二维码,关注订阅号

http://www.taodudu.cc/news/show-4392825.html

相关文章:

  • Flutter 画面渲染的全面解析
  • 使用QT实现Mjpeg-streamer的客户端,采用单独的线程进行视频图片的获取
  • tf.nn.xw_plus_b()
  • 【读者群答疑】使用xlwings编程时,执行语句bk = xw.books.add()时报错
  • python xlwings在Linux上报错XlwingsError:Your platform only supports the instantiation via xw.Book
  • Python操作Excel的Xlwings教程(二)
  • pythonapi_Python API
  • Python让Excel飞起来—批量处理工作薄和工作表
  • 5 python数据分析基础——批量进行数据分析(一)
  • 欧姆龙自动化小型连接器端子台XW2K系列
  • xw总结4:jmmntsj
  • 工作笔记先-xw-server
  • tensorflow函数 tf.nn.xw_plus_b
  • tensorflow中tf.nn.xw_plus_b
  • xw 素材网
  • 深度神经网络:WX+b-vs-XW+b
  • [XW大数据技术学习探讨] 公众号学习笔记
  • 试证明:如果X→Y,W→Z ,则 XW→YZ。
  • ROS获取串口信息及后续处理(以惯导IMU XW-GI5651为例)
  • XW版本更新
  • [574]tf.nn.xw_plus_b
  • tf.nn.xw_plus_b真方便好用
  • xw+b
  • Bootstrap 教程入门
  • 从零开始Bootstrap教程
  • bootstrap之入门教程
  • Bootstrap教程简介
  • bootStrap 教程 文档
  • python3flask教程_Python3 Flask bootstrap教程(1)
  • bootstrapt学习指南_Bootstrap 教程

云计算 - 虚拟化技术Overview相关推荐

  1. 围绕云计算 虚拟化技术又呈现新面貌

    本文讲的是围绕云计算 虚拟化技术又呈现新面貌,[IT168 资讯]虚拟化技术的三项基本使命-即作为客户端技术,作为服务器技术和作为网络技术,如今正在围绕云计算理念相结合在一起. 起源于X86服务器的虚 ...

  2. 云计算虚拟化技术会是企业安全黑洞?

    本文讲的是云计算&虚拟化技术会是企业安全黑洞,针对网络和安全设备的安全信息和事件监控(SIEM)和日志管理方法在云计算中其实没有实际意义. 在花费大量资金和大量人力资源在部署全面的安全信息和事 ...

  3. XEN和KVM云计算虚拟化技术

    一.XEN和KVM云计算虚拟化技术 01_虚拟化技术基础原理详解 02_Xen虚拟化及DomU的实现 03_Xen基于iscsi共享实现实时迁移 04_kvm虚拟化 下载链接:链接:http://pa ...

  4. openstack 云计算虚拟化技术

    openstack 云计算虚拟化技术 1. 基础知识 1. 什么是云计算 云计算是通过虚拟化技术去实现的,他是一种按量付费的模式! 2. 为什么要用云计算 租其他机房特别贵 扩展特别繁琐 3. 云计算 ...

  5. 未来云计算虚拟化技术的发展趋势

    近两年,随着一些国际知名的虚拟化软件厂商在中国市场的大力开拓,虚拟化及云计算的概念越来越热,虚拟化软件市场大幅升温.同时也带动了一批国内的虚拟化软件企业迅速的发展起来,虚拟化技术从早期的企业应用,逐步 ...

  6. 云计算虚拟化技术与开发-------虚拟化技术应用第二章内容(CPU虚拟机X86要解决的问题、VT-x、VMX、vCPU、EPT、VT-d)

    目录 第二章:虚拟化实现技术架构 CPU虚拟机要解决的问题(x86处理器结构漏洞)及软硬件解决方案 intel VT-x的技术特点,VMX(非根操作)的操作模式及操作流程 vCPU的组成和基本操作 内 ...

  7. 云计算虚拟化技术总结

    001-15个你可能不知道的开源云平台 http://www.cnblogs.com/skyme/archive/2012/06/05/2536185.html

  8. 云计算虚拟化技术与应用

    阿里云加速器代码: {     "registry-mirrors":[          "http://docker.mirrors.ustc.edu.cn" ...

  9. esxi6.7虚拟机网卡连接第二个虚拟交换机_Linux云计算底层技术之网络虚拟化

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,第一时间掌握技术干货! 网络虚拟化相对计算.存储虚 ...

最新文章

  1. 7 php程序的调试方法_PHP程序错误调试方法 让php显示错误提示
  2. oracle sga 4031,Oracle ORA-4031错误产生的原因详解
  3. Visual C++中最常用的类与API函数
  4. webpack之react开发前准备
  5. php怎么去除内容,php怎么把html标签去除?
  6. [Java] 蓝桥杯ALGO-39 算法训练 数组排序去重
  7. NSTimer 销毁问题 和 iOS中控制器的释放问题
  8. MatConvnet工具箱文档翻译理解一
  9. 数据分析的一些简单思路总结
  10. Stubs和Mocks区别 (Stubs vs. Mocks)
  11. fatal: unable to access 'https://chromium.googlesource.com/webm/libwebp/': Failed to connect to chro
  12. windows c语言新建dos,dos命令怎么用_DOS下创建文件、文件夹
  13. 浅谈SRAM与DRAM的异同
  14. 数据分析 EXCEL
  15. imagesize()函数获取图片信息
  16. 区间问题,Huffman树,排序不等式,绝对值不等式,推公式
  17. 【AI每日播报】苹果入局无人车 当百度机器人拒绝和我聊李彦宏
  18. 港科夜闻丨香港科大与迅雷建立联合实验室,共同推动区块链科技创新与应用...
  19. 2021年软件测试入门到进阶全套学习内容
  20. [从零开始学习FPGA编程-7]:快速入门篇 - 总体 - FPGA产品开发简化流程、关键步骤解读

热门文章

  1. Unity3D之协程(Coroutines Yield )
  2. 新款H3C服务器图形化界面配置raid
  3. uniapp(js)处理过去时间对比现在时间的时间差如几分钟前,几小时前,几个月前(仿照cnode社区)
  4. IC卡·一卡一密加密 动态数据防伪方案实现
  5. CSS文本溢出隐藏,显示省略号
  6. Java中关于空格遇到的一些问题
  7. Java中使用es条件构造器BoolQueryBuilder
  8. Twitter开发者账号【推特开发者文档系列10】——API参考索引
  9. 2013年9—12月新托福考试终极报名指南!
  10. 维瑞最新推出5年期VeriSign SSL证书价格