Linux Virtualiztion—概述

Linux Virtualiztion

首先计算机虚拟化技术是多种技术的综合实现,它包括硬件平台、操作系统、存储及网络等。
简单来说,虚拟化技术就是在单台主机上虚拟多个虚假主机,并可以在这些虚拟机上运行不同的操作系统平台。虚拟化技术的出现可以节约大量的硬件资源与能源资源消耗,降低资金成本,虚拟化现在已经是每个企业必有的项目。目前所提供的比较成熟的虚拟化解决方案主要有VMware、Xen、KVM和Kyper-V等。虚拟化技术是通过Hypervsion动态模拟于分配计算机硬件资源给虚拟机操作系统Guest OS,由于Hypervsion可以模拟多个硬件资源给多个Guest OS,所以对于Guest OS来说,它们就像是运行在独立、真实的硬件资源上一样。

虚拟化技术的类型有主机虚拟化,容器虚拟化,系统库虚拟化和应用程序级虚拟化;

主机虚拟化类型分为Type-I和Type-II两种,Type-I物理硬件上直接运行的不是操作系统而是一个专门的虚拟化管理器(VMM,Hypervisor),在此基础上所有操作系统都是运行于虚拟机实例之中;Type-II是于硬件级别上运行一个OS,通常称为“HOST OS”,就是宿主机的操作系统;而后在这个宿主机操作系统上安装并运行一个虚拟化管理器(VMM,Hypervisor),在VMM上再创建并安装虚拟机和对应的OS,通常称为“Guest OS”,即虚拟机操作系统; 主机虚拟化所用到的主要技术有CPU虚拟化、内存虚拟化、和IO虚拟化。

按照虚拟化程度可分为全虚拟化、半虚拟化、硬件辅助虚拟化。

CPU全虚拟化技术主要采用优先级压缩技术(Ring Compression)和 二进制代码翻译技术(Binary Translation)。优先级压缩技术让VMM和Guest 运行在不同的特权级下
CPU半虚拟化技术主要采用Hypercall 技术。Guest OS 的部分代码被改变,从而使Guest OS会将和特权指令相关的操作都转换为发给VMM的Hypercall(超级调用),由VMM继续进行处理。而Hypercall支持的批处理和异步这两种优化方式,使得通过Hypercall 能得到近似于物理机的速度
CPU硬件辅助虚拟化技术
目前主要有Intel 的VT-x和AMD的AMD-V这两种技术。其核心思想都是通过引入新的指令和运行模式,使VMM和Guest OS分别运行在不同模式(ROOT 模式和非ROOT模式)下,且Guest OS 运行在Ring 0 下。通常情况下,Guest OS 的核心指令可以直接下达到计算机系统硬件执行,而不需要经过VMM。当Guest OS执行到特殊指令的时候,系统会切换到VMM,让VMM来处理特殊指令。CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

内存虚拟化,KVM 通过内存虚拟化共享物理系统内存,动态分配给虚拟机,为了在一台机器上运行多个虚拟机,KVM 需要实现 VA(虚拟内存) -> PA(物理内存) -> MA(机器内存)直接的地址转换。虚机 OS 控制虚拟地址到客户内存物理地址的映射 (VA -> PA),但是虚机 OS 不能直接访问实际机器内存,因此 KVM 需要负责映射客户物理内存到实际机器内存 (PA -> MA)。

内存全虚拟化技术通过使用影子页表(Shadow Page Table)实现虚拟化。VMM 为每个Guest 都维护一个影子页表,影子页表维护虚拟地址(VA)到机器地址(MA)的映射关系。而Guest页表维护VA到客户机物理地址(GPA)的映射关系。当VMM捕获到Guest 页表的修改后,VMM 会查找负责GPA 到MA 映射的P2M 页表或者哈希函数,找到与该GPA对应的MA,再将MA填充到真正在硬件上起作用的影子页表,从而形成 VA 到 MA 的映射关系。而 Guest 的页表则无需变动。
内存半虚拟化技术通过使用页表写入法实现虚拟化。Guest OS 在创建一个新的页表时,会向VMM注册该页表。之后在 Guest 运行的时候,VMM 将不断的管理和维护这个表,使Guest 上面的程序能直接访问到合适的地址。
 内存硬件辅助虚拟化技术通过扩展页表EPT(extended page table)实现虚拟化。
 EPT通过使用硬件虚拟化技术,使其能在原有的页表的基础上,增加一个EPT页表,用于记录GPA到MA的映射关系。VMM预先把EPT页表设置到CPU中。Guest 修改Guest 页表,无需VMM干预。地址转换时,CPU 自动查找两张页表完成 Guest 虚拟地址到机器地址的转换,从而降低整个内存虚拟化所需的开销。

IO虚拟化:服务器单个千兆以太网端口肯定能够支持单个应用,但是当被分割为10个、15个或者更多的服务器负载时(这其中包括网络、存储以及服务器之间的流量)可能就不够用了。当遇到I/O瓶颈时,CPU会空闲下来等待数据,计算效率会大大降低--I/O瓶颈最终会打败虚拟化所带来的资源使用效率的提升。故虚拟化也必须扩展至I/O系统,在工作负载、存储以及服务器之间动态共享带宽,能够最大化地利用网络接口。通过缓解服务器I/O潜在的性能瓶颈,服务器能够承载更多的工作负载并提升其性能。

常见的IO虚拟化主要有三种方案:基于软件模拟的方案,这种方案里, 中断、DMA的访问都是通过软件实现的,优点是可以模拟任何硬件的模型,缺点是性能不会太好;半虚拟化技术,主要是为了解决软件模拟性能问题,比如串口对性能要求不高可以采用软件模拟,但是磁盘设备、网卡设备对性能要求高,主流方案是采用半虚拟化技术,前后端相互感知,通过Shared Memory控制请求的传输,两个设备之间的通知也是基于快速消息传递,性能很高;设备直通模式,比如PCIE的直通、网卡SROV直通,对性能更高的可以采用此模式,可以达到和物理机上直接使用接近的性能,但是设备和虚拟机的耦合会对管理造成影响

Linux目前流行的开源虚拟化技术解决方案:主机虚拟化:Type-I:Xen;Type-II:kvm,virtualbox。容器级虚拟化:lxc(Linux Container),docker,libcontainer,openvz(VMS)等等

Xen(半虚拟化)

Xen由XenSource开发, 一个开源免费的操作系统级准虚拟技术. 回顾一下半虚拟技术, Hypervisor和操作系统共同协作, 虽然操作系统需要做一些修改, 但是性能上比较接近于原始性能.
Xen需要与系统共同协作(客户操作系统需要修改), 只有打过补丁的系统才能使用Xen. 从Linux角度来看, Linux本身是开源的, 结果是Xen的性能要好于全虚拟化技术. 但是从系统支持(比如支持其它非开源的操作系统)的角度来看, 这显然是一个不足之处.
在Xen上可以运行Windows客户机, 但需要Intel Vanderpool或AMD Pacifica处理器的支持. 其它支持的操作系统包括Minix, Plan 9, NetBSD, FreeBSD, 和OpenSolaris.

KVM虚拟化技术

KVM是基于x86架构上Linux操作系统的全虚拟化解决方案,kvm就工作在内核环境之中,所以它的执行效率很高,它需要Intel VT-x和AMD AMD-v的技术支持。
KVM的组件:
两类组件:
/dev/kvm:工作为Hypervisor,在用户空间中可以通过ioctl()系统调用与内核中的kvm模块进行交互,从而完成虚拟机的创建、删除、启动、停止等各种管理功能;
qemu-kvm进程:工作于用户空间,用于实现IO设备的模拟,也是kvm进行各种IO访问的加速器;
kvm模块被装载至内核,系统的运行模式:
Hypervisor模式:装载了kvm模块的原操作系统内核,将运行为Hypervisor模式;
用户模式:Host OS的原用户模式,用于代Guest OS发送IO请求;
内核模式:Guest OS执行IO类的操作或其他特殊指令操作时的工作模式;也被称为"Guest-Kernel"模式;
来宾模式:Guest OS的用户模式,用于所有的非IO类请求;

原文地址:http://blog.51cto.com/fuboyuan/2299513

时间: 2024-10-14 00:36:42

Linux Virtualiztion—概述的相关文章

Linux学习笔记之三————Linux命令概述

一.引言 很多人可能在电视或电影中看到过类似的场景,黑客面对一个黑色的屏幕,上面飘着密密麻麻的字符,梆梆一顿敲,就完成了窃取资料的任务. Linux 刚出世时没有什么图形界面,所有的操作全靠命令完成,就如同电视里的黑客那样,充满了神秘与晦涩. 近几年来,尽管 Linux 发展得非常迅速,图形界面越来越友好,但是在真正的开发过程中,Linux 命令行的应用还是占有非常重要的席位,而且许多Linux功能在命令行界面要比图形化界面下运行的快.可以说不会命令行,就不算会 Linux. Linux 提供了

Linux内核概述

概述 1. 多数服务器都是Linux,Windows只在PC方面应用. 2. .NET只能在Windows中应用,适用于中小型项目,在大型项目中应用很少.现在出现了Windows服务器(外围的服务器). 3.学习的范围:(1)怎么使用linux: (2)linux的管理(系统管理,网络管理,数据库管理,负载均衡部署):(3)Linux shell编程 拓展: Redhat——面向大型企业,有些包比较陈旧(保守一些) ubuntu——适合创业型(阿里云,amazon支持,可以作为服务器平台,也可以

Linux进程概述

一.介绍 当linux系统中的一个进程运行起来的时候,总是要访问系统的资源,访问文件或者向其他的进程发送信号.系统是否允许其进行这些操作?系统是根据什么来判断该进程的权限?这些问题是和进程信任状(process credentials)相关. process credentials包括一系列的ID,如下: 1.real user ID 和 real group ID 2.effective user ID 和 effective group ID 3.saved set-user-ID 和 sa

【Linux系统编程】 Linux系统调用概述

系统调用概述系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组"特殊"接口.用户程序可以通过这组"特殊"接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件.关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等. 从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口--它好比一个中间人,把用户进程的请求传达给内核,待内核把请求处理完毕后再将处理结果送回给用户空间.系统服务之所以需要通过系统调用来

Linux 基础概述

计算机的组成及其功能 计算机主要组成部分: 控制器.运算器.存储器.输入设备.输出设备. 控制器: 是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序,数据.地址,协调计算机各部分工作及内存与外设的访问等. 运算器 :运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理. 存储器: 存储器的功能是存储程序.数据和各种信号.命令等信息,并在需要时提供这些信息. 输入设备 :输入设备是计算机的重要组成部分,输入设备与输出设备合你为设备外部,简称

linux虚拟化概述

虚拟化硬件虚拟化:一台物理机虚拟出多台逻辑上的计算机cpu,内存可分配给多个虚拟机软件虚拟化:一个LAMP平台支撑多个网站桌面虚拟化...... 虚拟机:通过软件平台模拟出的计算机对最终用户来说,感受不到与物理计算机的差异根据虚拟化程度不同,所需的修改也不同 虚拟化实现程度:完全虚拟化,Full Virtualization由平台软件来模拟实现,客户机的操作系统代码几乎不做修改版虚拟化,Para Virtualization平台软件只提供最核心的虚拟机功能,需要修改客户机的系统内核,兼容性较差K

Linux系统启动概述

Linu系统启动是一个"冗长乏味"的过程,那么我们现就需要去经历一下这个冗长乏味的生活.我们按照如下流程来分析: 1. 史前时代:BIOS 计算机在上电那一刻几乎是毫无用处的,此时,RAM中包含的全部是随机数据. 在开始启动时,一个特殊的硬件电路在CPU的一个引脚上产生一个RESET逻辑值,在RESET产生之后,就把处理器的一些寄存器设置成固定的值,并执行在物理地址0xFFFFFFF0处找到的代码(Younger注:该代码我称之为BIOS代码).硬件会把这个地址映射到某个只读.持久的存

linux进程间通信-概述

一 进程间通信有如下的目的: 1.数据传输,一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M之间:2.共享数据,多个进程想要操作共享数据,一个进程对数据的修改,其他进程应该立刻看到:3.通知事件,一个进程需要向另一个或一组进程发送消息,通知它们发生了某件事情:4.资源共享,多个进程之间共享同样的资源.为了做到这一点,需要内核提供锁和同步机制:5.进程控制,有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知

Linux 内核概述 - Linux Kernel

Linux 内核学习笔记整理. Unix unix 已有40历史,但计算机科学家仍认为其是现存操作系统中最大和最优秀的系统,它已成为一种传奇的存在,历经时间的考验却依然声名不坠. 1973 年,在用 C 语言重写了 Unix 系统后,大量的Unix衍生版本开始出现,许多公司把 unix 移植到新的机型上,开发者们都按照自己的方式不断增强系统的功能.Unix 系统设计简洁并在发布时提供源代码,所以许多团体都对其进行了进一步的开发.加州大学伯克利分校便是其中影响最大的一个.在BSD基础上,很多厂商也