Xen虚拟化之一:Xen环境组件详解

article/2025/9/11 6:13:58

Xen是一个开放源代码虚拟机监视器(Virtual Machine Monitor,简称为VMM),由剑桥大学开发,它致力于实现在单个计算机上运行多达128个有完全功能的操作系统。Xen通过一种叫做半虚拟化(paravirtualization)的技术获得高效能的表现(较少的效能损失,典型的情况下大约损失 2%,在最糟的情况下会有 8% 的效能耗损;与其它使用完全的虚拟化却造成最高到 20% 损耗的其他解决方案形成一个明显的对比),甚至在某些与传统虚拟技术极度不友好的架构上(x86),Xen也有极佳的表现。

Xen虚拟化环境由几个虚拟化组件协同实现:Xen HypervisorDomain 0Domain U 

Xen架构 (图片来源:http://wiki.xen.org/wiki/Xen_Overview)


1.1   Xen Hypervisor

 Xen Hypervisor是计算机硬件的软件抽象层,它直接运行于硬件之上,并将其计算能力通过抽象接口(虚拟机)提供给运行于其上的任何操作系统。它的首要任务在各虚拟机之间进行CPU资源调度、内存资源分配及中断请求管理,并负责控制共享处理环境的各虚拟机的执行。但它并不负责实现计算机系统应该具备的网络、外部存储设备、显示设备或其它通用I/O功能等。

1.2 Dom0

Xen虚拟化环境中用域(domain)来描述各虚拟机,每个域都有其ID等属性,因此各虚拟机常表示为domain 0domain 1等,也可以使用简写的方式,如dom0Dom0是运行Xen Hypervisor上的一个独特的虚拟机,其操作系统内核为经过特殊修改的Linux内核,其能够直接访问硬件I/O资源及与其它虚拟机进行交互。其它的域没有直接直接访问硬件I/O资源的权限,并且彼此间是高度隔离的。因此,dom0也被称作特权域,其它域则统一称为DomU(Unprivileged Domain)。需要注意的是,DomU通过Dom0来实现I/O功能,因此,在DomU运行之前必须先启动Dom0

Linux内核自 2.6.37 版本起添加了对Xen Dom0的支持,并且自3.0的版本起添加进了Xen所需要的关键性驱动及优化,因此,只需要在3.0及之后版本的内核编译时启用了相应的选项,其就可以直接运行于Dom0

Dom0提供了两种两类特殊驱动:网络后端驱动(Network Backend Driver)和块设备后端驱动(Block Backend Driver),分别用以支持来自DomU的对网络及本地磁盘的访问请求。网络后端驱动通过直接与本地网络设备交互来处理来自于DomU的各网络相关请求,块设备后端驱动则基于与本地磁盘交互来执行DomU的数据读写请求。

Dom0通常会包含一个工具栈(Toolstack),其能够实现让用户完成虚拟机的创建、删除、配置等功能。此工具栈还提供了一个访问接口,因此,其管理功能还可以通过相应的命令行工具、图形化控制台或者如CloudstackOpenstack类的云计算环境来完成。

1.3 DomU

如前所述,DomU是非特权域,它们均无权限直接访问硬件资源。Xen支持两种不同类型的虚拟模式:PV(Paravirtualization)HVM(Hardware-assisted or Full Virtualization),它们可以同时运行于同一个Xen Hypervisor上,并且甚至可以在HVM环境使用PV技术,这也称作PV on HVM

1.3.1 Xen半虚拟化(Xen Paravirtualization)

半虚拟化(Paravirtualization,简称为PV)是由Xen开发的高效且轻量级的虚拟化技术,现已经为众多虚拟化平台所借用。PV不要求CPU支持虚拟化扩展,但依赖于Xen-PV-enabled内核和PV驱动程序,因此,客户机(guest)明确知道自己运行于hypervisor之上,它不需要仿真硬件,从而能高效运行。目前,已经为LinuxNetBSDFreeBSDOpenSolaris实现了Xen-PV-enabled内核,而且自 2.6.24 起,Linux内核已经通过Linux pvops framework原生支持Xen-PV,因此,大多数的Linux发行版都能直接运行于PV环境。

PV客户机中包含两类特殊驱动:网络前端驱动(Network Frontend Driver)和块设备前端驱动(Block Frontend Driver),分别用以与Dom0中对应的后端驱动通信以完成网络访问和块设备访问。


Xen PV (图片来源:http://wiki.xen.org/wiki/File:XenPV.png)

1.3.2 Xen完全虚拟化(Xen Full Virutalization)

完全虚拟化也称作硬件辅助的虚拟化(Hardware-assisted virtualizion)技术,它利用CPU的特殊扩展功能实现客户机的虚拟。HVM依赖于Intel VTAMD-V硬件扩展,同时,Xen还使用Qemu来为HVM模拟PC硬件,如BIOSIDE磁盘控制器、VGA图形适配器、USB控制器及网络适配器等,而CPU的虚拟化扩展技术还能够大大提升这些仿真硬件的性能。HVM不要求操作系统做出任何修改即可正常运行,故此,windows等操作系统均可支行于HVM环境。但需要注意的是,HVM虚拟机需要仿真多种硬件,因此其性能不如PV虚拟机。

1.3.3 P V on HVM

为了提高其性能,HVM客户机也可以使用特殊的半虚拟化驱动(PVHVMPV-on-HVM驱动),这类驱动是为HVM环境专门优化的PV驱动,由此可以使得HVM不再依赖于磁盘及网络I/O的仿真,从而在HVM上提供接近甚至优于PV环境的性能。

1.4 工具栈(toolstack)、管理API(Managment APIs)和控制台(Consoles)

Xen能够与多个不同的工具栈结合工作,如默认的工具栈、Libvirt工具栈及XAPI工具栈。通常,每个工具栈都提供了一个API及相应的命令行工具。


Xen Toolstack (图片来源:http://wiki.xen.org/wiki/File:ToolStacks.png

1.4.1 Libxenlight (libxl)

 libxenlight是一个底层的、轻量级C程序库,便于理解、修改和扩展,其目的是为所有的工具栈提供一个通用、简单、健壮的API,也是xen操作的基础代码。共设计目标:

     提供机制,而非策略

     无状态

     向上隐藏xenstorelibxenctrllibxenguest

     尽可能简单 

1.4.2 常见的工具栈

Default / XEND

Xen 4.0及之前的版本中默认使用的工具栈,Xen 4.1提供了新的轻量级工具栈xl,但仍然保留了对Xend/xm的支持,但Xen 4.2及之后的版本已弃用。但xl在很大程度上保持了与xm的兼容。

Default / XL

xl是基于libxenlight创建的轻量级命令行工具栈,并从Xen 4.1起成为默认的工具栈。xlXend的功能对比请参照http://wiki.xen.org/wiki/XL_vs_Xend_Feature_Comparison。xl的运行不需要用到xend服务。

XAPI / XE

XAPIXen管理API(The Xen management API),它是Citrix XenServerXCP默认使用的工具栈。目前,其移植向libxenlight的工作正进行中。XAPI是目前功能最通用且功能最完备的Xen工具栈,CloudStackOpenNebulaOpenStack等云计算解决方案都基于此API管理Xen虚拟机

工具栈架构 (图片来源:http://www.slideshare.net/xen_com_mgr/xen-summit-amd2010v3

libvirt / VIRSH

 libvirt是一个通用的虚拟化API和工具组件,可用于管理众多的虚拟化技术,目前1.0版本业已移植到libxenlight 

libvirt架构 (图片来源:http://blog.imm.cnr.it/content/collegamento-macchine-virtuali-con-libvirt) 

1.4.3 选择合用的工具栈


三种流行的工具栈功能对比 (图片来源:http://wiki.xen.org/wiki/Choice_of_Toolstacks)

1.4.4 Xen高级管理工具

除了基础的工具栈外,Xen还有许多高级管理工具,它们以各种方式为Xen提供了更为便捷的管理接口。常见的如virt-manager/libvirtxen-toolsZentificConvirtXen OrchestraGaneti等,此外还有基于云平台的管理工具,如EucalyptusOpenNebulaopenQRM等。

具体的工具列表,请参见http://wiki.xen.org/wiki/Xen_Management_Tools 

1.5 XenStore

XenStore是域间共享的信息存储空间,它也是一个有着层级结构的名称空间或数据库,位于Dom0上由Dom0进行管理,支持事务和原子操作,如读写一个“键”。各域通过向XenStore数据进行读写操作完成彼此间的通信。在有新的值写入XenStore时,对应的域则会收到通知。

XenStore通常用作控制DomU中设备的机制,可通过多种不同的方式对其进行访问,比如在Dom0中使用Unix套接字、内核API或者ioctl接口/proc/xen/xenbus。设备驱动可以通过这些接口之一向XenStore写入请求等。尽管驱动程序可以向XenStore存储任何数据,但它主要设计用来存储较少的数据片断,如配置信息或状态信息。XenStore通常存储为Dom0/var/lib/xenstored/tdb文件。

下一节:“Xen虚拟化系列之二:在RHEL6.3 x86_64安装配置xen 4.2详解”

本文出自 “马哥Linux培训” 博客,转载请与作者联系!

转载于:https://my.oschina.net/magedu/blog/600980


http://chatgpt.dhexx.cn/article/hUSbsvTO.shtml

相关文章

浅谈Xen和半虚拟化技术

研究生入学的时候,看了一篇论文——《Xen and the art of virtualization》。现在时隔一年,准备对此进行一番整理。下文是我Xen为例的半虚拟化技术的理解: 虚拟机概况 首先从虚拟机说起,虚拟机技术最早由IBM于上世纪六七十年代提…

xen架构

Xen是一个虚拟机监视器(Virtual machine monitor),针对X86系列计算机设计,它能够支持多个客户计算机的同时运行,并且能够达到较好的一个性能水平和资源隔离。Xen是一个开放源代码软件,在GNU General Public…

Xen概述

http://my.oschina.net/davehe/blog/94039 1 Xen概述 1.1 简介 Xen是由剑桥大学计算机实验室开发的一个开源项目。是一个直接运行在计算机硬件之上的用以替代操作系统的软件层,它能够在计算机硬件上并发的运行多个客户操作系统(Guest OS&#xff…

KVM和Xen虚拟化有什么区别?Xen和KVM优缺点对比

KVM和Xen是两大虚拟化技术,KVM和Xen又是免费开源的管理程序,新手站长网分享虚拟化技术KVM和Xen的区别优势对比: KVM和Xen的区别 KVM:KVM是轻量级的虚拟化管理程序模块,该模块主要来自Linux内核;KVM的虚拟…

Xen与XenServer的区别

说到XenServer,总是离不开Xen,所以我要说他们的区别,得首先从Xen开始说起! Xen体系架构 Xen hypervisor体系架构 Xen 的 VMM ( Xen Hypervisor ) 位于操作系统和硬件之间,负责为上层运行的操作系统内核提供虚拟化的硬件…

xen的安装

一、 Xen介绍 : 在虚拟化软件的部份,可分为VMWare、Xen、KVM、VritualBox是较为常见的。在Xen这到自由软件上主要可分为半虚拟化(Para-virtualization) 及全虚拟化 (Full virtualization) 两种,其中半虚拟化主要是透过修改 Linux 核心来达成的虚拟技术。…

虚拟机体验之 Xen 篇 —— 令人脑洞大开的奇异架构

转载于https://www.cnblogs.com/youxia/p/linux022.html#_label0 阅读目录 总结: 这一篇我要体验的虚拟机系统是 Xen。在虚拟机领域,Xen 具有非常高的知名度,其名字经常在各类文章中出现。同时 Xen 也具有非常高的难度,别说玩转…

xen基础

xen结构概述 一个 Xen 虚拟化环境包括一组项目,它们一起工作来提供虚拟化环境:Xen hypervisor;dom0;domain management and control,域的管理和控制;domU PV 客户机;domU HVM 客户机。 它们之间…

Xen 简介

---------------------------------同样来自 IBM ------------------------------------ Xen 是一种类型 1 虚拟机管理程序,它创建系统资源的逻辑池,使许多虚拟机可共享相同的物理资源。 Xen 是一个直接在系统硬件上运行的虚拟机管理程序。Xen 在系统硬…

全面详解Python与Ruby,到底哪款更优秀

今天,我和大家讨论一下是Python开发语言web好还是Ruby开发语言web好,有需要的小伙伴,可以参考一下。对这方面有自己见解的大神,可以交流一下。希望大家可以认真阅读哦! Python 和 Ruby 都是目前用来开发 websites、web-based apps 和 web services 的流行编程语言之一。 …

Ruby入门级示例代码

【实例简介】 针对入门级的新手参考 【实例截图】 目录结构&#xff1a; 文件&#xff1a;590m.com/f/25127180-494436327-f5ef7f&#xff08;访问密码&#xff1a;551685&#xff09; 【核心代码】class ItemController < ApplicationControllerscaffold :itemdef creat…

Ruby基础教程(Day1)—— Ruby初探

前提&#xff1a;自行安装ruby 一、Ruby初探 最常见的方法是使用ruby命令执行&#xff08;在helloruby.rb中输入print("Hello,Ruby.\n")&#xff09; 在命令行输入ruby helloruby.rb irb命令&#xff0c;以交互命令行方式来执行 在控制台执行irb如下图所示 对象 …

RubyPloticus

原文&#xff1a; RubyPloticus ruby 2006年6月19日 Bliki 索引 译注&#xff1a;代码和生成的图片示例可从这里下载。 在最近的帖子“ 评估Ruby”中&#xff0c;我提到一位同事曾在一个Web应用中加入了一些漂亮的数据图表&#xff0c;有人email问我是…

Ruby(一)

Ruby 是一种开源的面向对象程序设计的服务器端脚本语言&#xff0c;可运行于多种平台&#xff0c;如 Windows、MAC OS 和 UNIX 的各种版本。Ruby流行起来的根本原因是因为基于Ruby的Web开发框架Rails的广泛使。 1、ruby环境 windows&#xff1a;Downloads (rubyinstaller.org…

Python 和 Ruby 的对比

&#xff08;点击上方公众号&#xff0c;可快速关注&#xff09; 来源&#xff1a;js信仰者 segmentfault.com/a/1190000010756033 如有好文章投稿&#xff0c;请点击 → 这里了解详情 最近在考虑学习一门后端语言&#xff0c;在ruby和python直接犹豫&#xff0c;然后自己做了…

【Python】Pyyaml和ruamel.yaml

目录 PYYAML 读取yaml 保存yaml 读取保存的yaml文件 yaml文件规则 yaml文件数据结构 ruamel.yaml 格式化保存yaml 使用ruamel.yaml读取yaml 使用ruamel.yaml时python中符号对应于yaml中符号 PYYAML config.yaml文件 username: zxx age: 18 orther:height: 175CMwei…

Ruby教程(基础篇)

1. Print和puts的区别 puts输出内容独立成行、自动换行&#xff0c;而print会把输出的内容打印在同一行。 2. 变量和常量 character_name "Kevin" #variable name变量character_age "21"puts ("name:" character_name)puts (character_a…

Ruby语言简介

Ruby是一种解释型、面向对象、动态类型的语言。Ruby采取的策略是在灵活性和运行时安全之间寻找平衡点。随着Rails框架的出现&#xff0c;Ruby也在2006年前后一鸣惊人&#xff0c;同时也指引人们重新找回编程乐趣。尽管从执行速度上说&#xff0c;Ruby谈不上有多高效&#xff0c…

Ruby基本介绍

Ruby 是一种开源的面向对象程序设计的服务器端脚本语言&#xff0c;在 20 世纪 90 年代中期由日本的松本行弘&#xff08;まつもとゆきひろ/Yukihiro Matsumoto&#xff09;设计并开发。在 Ruby 社区&#xff0c;松本也被称为马茨&#xff08;Matz&#xff09;。Ruby 可运行于多…

字典生成----在线密码破解工具hydra和medusa的使用

大家好&#xff0c;我是SuieKa。 本次主要稍微详细分析一下字典的生成和在线密码破解工具hydra和medusa及使用案例&#xff0c;希望对大家学习上有帮助&#xff01; 目录表 一、常见字典生成工具及使用方法1、字典生成工具crunch2、cupp自定义字典3、cewl-根据网站信息生成字典…