虚拟化技术学习笔记

1、kvm

KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 线程。这使得 KMV 能够使用 Linux 内核的已有功能。

  但是,KVM 本身不执行任何硬件模拟,需要用户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。

 

Linux 上的用户空间、内核空间和虚机:

 

                  

  • Guest:客户机系统,包括CPU(vCPU)、内存、驱动(Console、网卡、I/O 设备驱动等),被 KVM 置于一种受限制的 CPU 模式下运行。
  • KVM:运行在内核空间,提供 CPU 和内存的虚级化,以及客户机的 I/O 拦截。Guest 的 I/O 被 KVM 拦截后,交给 QEMU 处理。
  • QEMU:修改过的被 KVM 虚机使用的 QEMU 代码,运行在用户空间,提供硬件 I/O 虚拟化,通过 IOCTL /dev/kvm 设备和 KVM 交互。

KVM 是实现拦截虚机的 I/O 请求的原理:

    现代 CPU 本身实现了对特殊指令的截获和重定向的硬件支持,甚至新硬件会提供额外的资源来帮助软件实现对关键硬件资源的虚拟化从而提高性能。以 X86 平台为例,支持虚拟化技术的 CPU  带有特别优化过的指令集来控制虚拟化过程。通过这些指令集,VMM 很容易将客户机置于一种受限制的模式下运行,一旦客户机试图访问物理资源,硬件会暂停客户机运行,将控制权交回给 VMM 处理。VMM 还可以利用硬件的虚级化增强机制,将客户机在受限模式下对一些特定资源的访问,完全由硬件重定向到 VMM 指定的虚拟资源,整个过程不需要暂停客户机的运行和 VMM 的参与。由于虚拟化硬件提供全新的架构,支持操作系统直接在上面运行,无需进行二进制转换,减少了相关的性能开销,极大简化了VMM的设计,使得VMM性能更加强大。从 2005 年开始,Intel 在其处理器产品线中推广 Intel Virtualization Technology 即 IntelVT 技术。

2、Xen

 Xen 的 VMM ( Xen Hyperviso ) 位于操作系统和硬件之间,负责为上层运行的操作系统内核提供虚拟化的硬件资源,负责管理和分配这些资源,并确保上层虚拟机(称为域 Domain)之间的相互隔离。Xen采用混合模式,因而设定了一个特权域用以辅助Xen管理其他的域,并提供虚拟的资源服务,该特权域称为Domain 0,而其余的域则称为Domain U。

    Xen向Domain提供了一个抽象层,其中包含了管理和虚拟硬件的API。Domain 0内部包含了真实的设备驱动(原生设备驱动),可直接访问物理硬件,负责与 Xen 提供的管理 API 交互,并通过用户模式下的管理工具来管理 Xen 的虚拟机环境。

    Xen2.0之后,引入了分离设备驱动模式。该模式在每个用户域中建立前端(front end)设备,在特权域(Dom0)中建立后端(back end)设备。所有的用户域操作系统像使用普通设备一样向前端设备发送请求,而前端设备通过IO请求描述符(IO descripror ring)和设备通道(device channel)将这些请求以及用户域的身份信息发送到处于特权域中的后端设备。这种体系将控制信息传递和数据传递分开处理。

    在Xen体系结构设计中,后端设别运行的特权域被赋予一个特有的名字---隔离设备域(Isolation Device Domain, IDD),而在实际设计中,IDD 就处在Dom0中。所有的真实硬件访问都由特权域的后端设备调用本地设备驱动 (native device drive)发起。前端设备的设计十分简单,只需要完成数据的转发操作,由于它们不是真实的设备驱动程序,所以也不用进行请求调度操作。而运行在IDD中 的后端设备,可以利用Linux的现有设备驱动来完成硬件访问,需要增加的只是IO请求的桥接功能---能完成任务的分发和回送。

wKiom1Z4wYPxU1DHAACPO3xExWY839.jpg

3、OpenVZ

Linux 容器(Linux Container,LXC)是一种轻量级的虚拟运行环境,它与传统的虚拟机方
式不同。传统的虚拟机需要对硬件作出抽象并提供了一个完整的操作系统,而LXC 不同的
地方就是,多个容器都与系统共用一套内核机制,而容器中提供的只是运行环境需要的文件
系统、虚拟网络等。

具体的架构如图所示:
这里写图片描述

什么是硬件虚拟化?

一种对计算机或操作系统的虚拟,对用户隐藏了真实的计算机硬件,表现出另一个抽象计算平台。硬件虚拟化通过模拟硬件的方式来获得真实计算机的环境,可以运行一个完整的操作系统。在硬件虚拟化中,又有Full Virtualization、Partial Virtualization和Paravirtualization等不同的实现方式。

在硬件虚拟化的层面,现代虚拟化技术通常是全虚拟和半虚拟的混合体。常见的虚拟化技术例如VMWare、Xen和KVM都同时支持全虚拟化和半虚拟化。硬件虚拟化方式提供的虚拟机,都独立的运行着一个完整的操作系统,这样在同一台物理宿主机上存在大量相同或者相似的进程和内存页,从而导致较大的性能损耗(比如:宿主机操作系统是Centos,使用KVM生成的多个虚拟机,且在每个虚拟机中都运行Windows操作系统和相同的QQ程序,这样宿主机的性能必然产生较大损耗)。因此,硬件虚拟化也被称为重量级虚拟化,在同一宿主机上能够同时运行的虚拟机数量相当有限。

什么是软件层面的虚拟化?

指在同物理服务器上提供多个隔离的虚拟运行环境,也被称为容器技术。在软件虚拟化的层面,同一宿主机上的所有虚拟机(又称Container)共享宿主机的操作系统实例,不存在由于运行多个操作系统实例所造成的性能损耗(比如:宿主机的操作系统为Centos,通过软件虚拟化技术生成多个Container,且每个Container都运行着QQ程序,由于它们共享同一个宿主机Centos操作系统,所有Container中QQ程序的进程在Centos中只有一个)。因此,软件虚拟化也被称为轻量级虚拟化,在同一宿主机上能够同时运行的虚拟运行环境数量比较宽松。以Solaris操作系统上的Container为例,一个Solaris操作系统的实例理论上可以支持多达8000个Container(实际能够运行的Container数量取决于系统资源和负载)。与此类似,Linux操作系统上的LXC也可以轻松地在同一宿主机上同时支持数量可观的虚拟运行环境。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值