Linux hypervisor介绍
荣涛 2021年10月14日

1. 引言

管理程序对操作系统所做的事情就像操作系统对进程所做的大致相同。 它们为执行提供隔离的虚拟硬件平台,从而提供对底层机器的完全访问的错觉。 但并非所有的虚拟机管理程序都是一样的,这是一件好事,因为 Linux 是关于灵活性和选择的。 本文首先简要介绍虚拟化和管理程序,然后探讨几个基于 Linux 的管理程序。

2. 平台设备模拟

平台虚拟化是关于在两个或多个操作系统之间共享一个平台,以便更有效地利用资源。 但平台不仅仅意味着处理器:它还包括构成平台的其他重要元素,包括存储、网络和其他硬件资源。 某些硬件资源可以轻松虚拟化,例如处理器或存储器,但其他硬件资源则不能,例如视频适配器或串行端口。 当共享不可能或没有用时,外围组件互连 (PCI) 直通提供了有效使用这些资源的方法。 本章探讨了直通的概念,讨论了它在管理程序中的实现,并详细介绍了支持这一最新创新的管理程序。

2.1. 基于VMM的设备模拟

图片来源:Linux virtualization and PCI passthrough

2.2. 基于用户空间的设备模拟

图片来源:Linux virtualization and PCI passthrough

2.3. 设备透传

图片来源:Linux virtualization and PCI passthrough

2.4. SR-IOV

图片来源:Linux virtualization and PCI passthrough

3. 虚拟化和hypervisors

让我们先花一点时间了解为什么虚拟化很重要以及管理程序所扮演的角色。 (有关这两个主题的更多信息,请参阅资源部分。)

在本文的上下文中,虚拟化是隐藏底层物理硬件的过程,使其透明地可供多个操作系统使用和共享。 这种架构通常被称为平台虚拟化。 在典型的分层架构中,提供平台虚拟化的层称为管理程序(有时称为虚拟机监视器,或 VMM)。 客户操作系统的每个实例都称为虚拟机 (VM),因为对于这些 VM,硬件被虚拟化为专用于它们。 这种分层架构的简单说明如下图所示。

图片来源:Anatomy(剖析) of a Linux hypervisor
平台虚拟化的好处很多。 但美国环境保护署 (EPA) 报告的一项有趣的统计数据脱颖而出。 EPA 关于服务器和数据中心能效的研究发现,实际仅使用了大约 5% 的服务器容量。 其余时间,服务器处于休眠状态。 在单个服务器上虚拟化平台可以提高服务器利用率,但减少服务器数量的好处是一种力量倍增器。 随着服务器数量的减少,空间、功耗、冷却(能源成本降低)和管理成本也随之降低。 更少的硬件也意味着更高的可靠性。 总而言之,平台虚拟化带来的不仅是技术优势,还有成本和能源优势。

正如上图中看到的,管理程序是提供底层机器虚拟化(在某些情况下,具有处理器支持)的软件层。 并非所有虚拟化解决方案都是平等的,您可以在资源部分了解有关各种虚拟化风格的更多信息。 继续进程主题,操作系统将机器底层资源的访问虚拟化为进程。 管理程序做同样的事情,但它们不是进程,而是为整个客户操作系统完成这项任务。

4. hypervisors分类

管理程序可以分为两种不同的类型。

  • 第一种,类型 1 管理程序,是那些在裸机硬件上本机运行的管理程序。
  • 第二种,类型 2,是在另一个操作系统(在裸机上运行)的上下文中执行的管理程序。

类型 1 管理程序的示例包括基于内核的虚拟机(KVM-它本身就是一个基于操作系统的管理程序)。 类型 2 管理程序的示例包括 QEMU 和 WINE。

5. hypervisor的组成元素

因此,虚拟机管理程序(无论类型如何)只是一个分层的应用程序,它将机器硬件从其来宾中抽象出来。 通过这种方式,每个客户看到的是一个虚拟机,而不是真正的硬件。 现在让我们一般地看一下管理程序的内部结构以及它对 VM(来宾操作系统)的呈现。

在高层次上,管理程序需要少量项目来引导客户操作系统:要引导的内核映像、配置(例如 IP 地址和要使用的内存量)、磁盘和网络设备。 磁盘和网络设备通常映射到机器的物理磁盘和网络设备(如图2所示)。 最后,需要一组访客工具来启动访客并随后对其进行管理。

图片来源:Anatomy(剖析) of a Linux hypervisor
然后,简化的虚拟机管理程序架构实现了允许客户操作系统与主机操作系统同时运行的粘合剂。此功能需要一些特定元素,如上图所示。首先,类似于桥接用户空间应用程序与内核函数的系统调用超级调用层通常可用,允许来宾向主机操作系统发出请求。输入/输出 (I/O) 可以在内核中虚拟化,也可以由客户操作系统中的代码辅助。中断必须由管理程序唯一处理,以处理实际中断或将虚拟设备的中断路由到客户操作系统。管理程序还必须处理来宾中发生的陷阱或异常。 (毕竟,来宾中的故障应该停止来宾而不是管理程序或其他来宾。)管理程序的核心元素是页面映射器,它将硬件指向特定操作系统(来宾或管理程序)的页面。最后,需要一个高级调度程序来在虚拟机管理程序和来宾操作系统之间(并返回)传输控制

图片来源:Anatomy(剖析) of a Linux hypervisor

6. KVM

KVM主页https://www.linux-kvm.org/page/Main_Page。

KVM 是 x86 硬件上 Linux 的内核驻留虚拟化基础架构。 KVM 是第一个成为本机 Linux 内核 (2.6.20) 一部分的虚拟机管理程序,由 Avi Kivity 通过现在由 Red Hat 拥有的 Qumranet 初创公司开发和维护。

该虚拟机管理程序提供 x86 虚拟化,并在处理中提供到 PowerPC® 和 IA64 的端口。此外,KVM 最近增加了对对称多处理 (SMP) 主机(和来宾)的支持,并支持企业级功能,例如实时迁移(允许来宾操作系统在物理服务器之间迁移)。

KVM 是作为内核模块实现的,只需加载一个模块,Linux 就可以成为管理程序。 KVM 在提供管理程序指令支持的硬件平台上提供完全虚拟化(例如英特尔® 虚拟化技术 [Intel VT] 或 AMD 虚拟化 [AMD-V] 产品)。 KVM 还支持半虚拟化来宾,包括 LinuxWindows®

该技术作为两个组件实施。

  1. 第一个是 KVM 可加载模块,当安装在 Linux 内核中时,它提供虚拟化硬件的管理,通过 /proc 文件系统公开其功能(参见下图)。
  2. 第二个组件提供 PC 平台仿真,它由 QEMU 的修改版本提供。 QEMU 作为用户空间进程执行,与内核协调处理来宾操作系统请求。

图片来源:Anatomy(剖析) of a Linux hypervisor
当一个新的操作系统在 KVM 上启动时(通过一个名为 kvm 的实用程序),它成为主机操作系统的一个进程,因此可以像任何其他进程一样进行调度。 但与 Linux 中的传统进程不同,来宾操作系统被虚拟机管理程序识别为处于“来宾”模式(独立于内核和用户模式)。

每个客户操作系统都通过 /dev/kvm 设备映射,具有映射到主机内核物理地址空间的自己的虚拟地址空间。 如前所述,KVM 使用底层硬件的虚拟化支持来提供完整的(原生)虚拟化。 I/O 请求通过主机内核映射到在主机(管理程序)上执行的 QEMU 进程。

KVM 在 Linux 环境中作为主机运行,但支持大量的客户操作系统,提供底层硬件虚拟化支持。 您可以在资源部分找到支持的访客列表。

7. Lguest

Lguest 管理程序由澳大利亚 IBM 的 Rusty Russell 开发,采用完全不同的虚拟化方法。 Lguest 不是为运行任意操作系统提供完整的虚拟化支持,而是为支持 Lguest 的 x86 Linux 来宾提供轻量级半虚拟化(也称为 Linux-on-Linux 虚拟化)。这意味着来宾操作系统知道它们正在被虚拟化,并且会伴随着性能的增强。然而,Lguest 提供了合理的性能,而无需 QEMU 提供平台虚拟化(就像 KVM 的情况)。 Lguest 方法还简化了整体代码要求,只需要在来宾和主机操作系统中都有一个薄层。现在让我们探索这些变化并回顾 Lguest 环境的高级架构。

如下图所示,客户操作系统包括一个薄层 Lguest 代码(根据定义,半虚拟化)。此代码提供了许多服务。在最高层,有代码来确定被引导的内核是否正在被虚拟化。还有一个抽象层(通过 paravirt_ops 实现)通过超级调用将特权操作路由到主机操作系统。例如,来宾不能禁用中断,因此这些请求在主机操作系统中执行。您还将找到为来宾实现设备抽象的总线以及一组实现控制台、虚拟块驱动程序和虚拟网络驱动程序(允许与其他来宾通信)的简单驱动程序。

图片来源:Anatomy(剖析) of a Linux hypervisor
内核方面是作为一个名为 lg.ko 的可加载模块实现的。该模块包含客户操作系统与主机内核的接口。第一个元素是切换器,它实现了来宾操作系统上下文切换以执行的方法。 /proc 文件系统代码(用于/dev/lguest)也在这个模块中实现,它实现了内核和驱动程序的用户空间接口,包括超级调用。有代码通过使用影子页表和 x86 段管理来提供内存映射。

最后,内核中的 Documentation 子目录包含启动程序实用程序 (lguest),用于启动新的客户操作系统实例。该文件具有实用程序和文档双重作用。

Lguest 自 2.6.23(2007 年 10 月)以来一直在主线内核中,由 Rusty Russell 开发和维护。它由大约 5000 行代码组成,包括用户空间实用程序。虽然(据报道)很简单,但 Lguest 提供了真正的半虚拟化。然而,伴随这种简单性而来的是限制。例如,Lguest 仅虚拟化其他支持 Lguest 的客户操作系统,目前仅适用于 x86 架构。但即使有这些限制,Lguest 还是提供了一种有趣的虚拟化方法,任何愿意研究 Rusty 代码的人都可以访问它。

8. Xen

https://xenproject.org/

9. 参考链接

  • IBM:Anatomy(剖析) of a Linux hypervisor
  • https://www.linux-kvm.org/page/Main_Page
  • Red Hat Virtualization白皮书
  • Lguest: The Simple x86 Hypervisor
  • https://xenproject.org/
  • Linux virtualization and PCI passthrough
Copyright (C) CESTC Com.

Linux hypervisor VMM介绍相关推荐

  1. 剖析 Linux hypervisor

    KVM 和 Lguest 简介 Linux® 的最重要创新之一就是转变为hypervisor(或运行其他操作系统的操作系统).现在涌现许多使用 Linux 作为内核的 hypervisor 解决方案. ...

  2. 19.1 Linux监控平台介绍;19.2 zabbix监控介绍;19.3,19.4 安装zabbi

    19.1 Linux监控平台介绍 常见开源监控软件: 1. cacti.nagios.zabbix.smokeping.open-falcon等等 2. cacti.smokeping偏向于基础监控, ...

  3. linux监控平台介绍、zabbix监控介绍、安装zabbix

    linux监控平台介绍 常见开源监控软件 cacti.nagios.zabbix.smokeping.open-falcon 等等. nagios和zabbix流行度很高. cacti.smokepi ...

  4. Linux监控平台介绍、zabbix监控介绍、安装zabbix、忘记Admin密码如何做

    Linux监控平台介绍 常见开源监控软件 cacti.nagios.zabbix.smokeping.open-falcon等等. cacti.smokeping偏向于基础监控,成图漂亮. cacti ...

  5. Linux 网络路由介绍

    from: Linux 网络路由介绍 六月份的时候我们讨论了基础网络配置,其中有一点我没提到的是路由.这篇文章将简洁明了的介绍下Linux网络下的路由,来方便理解一些简单的网络环境. 每台网络中相连的 ...

  6. 国内外常用Linux服务器控制面板介绍

    对站长来说,控制面板并不陌生,当服务器或主机安装好之后,站长对服务器的管理将变得非常简单.好了,国内外常见的Linux服务器控制面板有哪些,下面小编来给你详细介绍. Linuxserver控制面板分为 ...

  7. linux虚拟主机有哪几种实现方案?_常见的国内外Linux服务器控制面板介绍

    控制面板对于站长来说并不陌生,当服务器或者主机安装了控制面板后,站长在管理服务器是就会很简单.那么,常见的国内外Linux服务器控制面板有哪些,接下来主机侦探小编就为您详细的介绍. Linux服务器控 ...

  8. Linux桌面环境介绍以及优缺点分析

    1. KDE 桌面系统 KDE 是 K Desktop Environment 的缩写,中文译为"K桌面环境". KDE 是基于大名鼎鼎的 Qt 的,最初于 1996 年作为开源项 ...

  9. linux内核结构介绍

    参考:linux内核结构介绍.什么是shell 作者:丶PURSUING 发布时间: 2021-02-15 14:15:24 网址:https://blog.csdn.net/weixin_44742 ...

最新文章

  1. 周报速递丨中国 5G 基站全球占比 70% ;360 宣布转型数字安全公司
  2. 活动 | 5 位大咖,手把手教你玩转数据驱动精细化运营
  3. 《Neural network and deep learning》学习笔记(一)
  4. Spring Cloud Alibaba Nacos Confifig是什么
  5. 计算机秋招必备!广州互联网大厂企业整理清单!
  6. 承接数字油画图稿/线条图定制(出图)业务
  7. python json方法详解_python详解json模块
  8. 桶排序JAVA软件测试_111-堆排序的速度测试和小结
  9. 中国 App 出海“变形记”
  10. 寒假训练营第四次作业
  11. vue draggable 火狐拖拽搜索bug解决
  12. sql 跨数据库 连表
  13. Cesium:各种坐标转换
  14. mysql定时任务多条sql_【SQL】使用Navicat创建MySQL定时任务重复执行某个sql语句
  15. 邮递员问题java实现_中国邮递员问题算法.PPT
  16. 富途量化交易接口使用什么语言编程?
  17. 一文理解二元logistic回归
  18. 微信小程序接受服务器发过来的消息,微信小程序API 接收消息和事件
  19. Linux-京东字节百度提前批,一面二面都被问到了awk——实例篇(2)去重统计排序
  20. 神经网络模型的模型假设,神经网络模型预测控制

热门文章

  1. 小林求职记(四)不会吧不会吧,面试还真会问这些呀
  2. 面试必会之ArrayList源码分析手写ArrayList
  3. java国王毒酒答案,换换脑子500桶酒国王用囚犯找毒酒答案-500桶酒其中1桶是毒酒找毒酒答案最新版【附公式详解】-东坡下载...
  4. linux的重要文件,Linux中重要文件夹介绍
  5. python合并csv文件、并利用结果进行计算_python合并csv文件
  6. mysql用户权限重置_mysql中重置密码与新用户权限分配的方法介绍
  7. node express创建项目步骤
  8. 多线程执行sql报错处理
  9. 禁止用户打开控制台调试代码
  10. 實驗項目wordcount