2024-2025-1 20242828-《Linux内核原理与分析》第十周

2024-2025-1 20242828-《Linux内核原理与分析》第十周作业

一、阅读教材《庖丁解牛Linux 操作系统分析 》

第10章:KVM及虚拟机技术

​ 虚拟机技术是云计算最核心的技术,而KVM(Kemel-based Vintual Machine)是当前最主流的虚拟机技术之一。虚拟机技术主要包括 CPU的虚拟化、内存的虚拟化和 I/O的虚拟化,典型的虚拟机实现有传统的 OEMU 虚拟机实现和轻量化的 StratoVirt 虚拟机实现。

1、虚拟技术概述

​ 主流虚拟化技术有VMware的ESXi、开源项目Xen和KVM等,主要差别在于CPU的虚拟化、内存的虚拟化和I/O的虚拟化,以及调度管理实现有所不同。ESXi中,所有虚拟化功能都在内核中实现;Xen中,内核只实现CPU和内存虚拟化,I/O虚拟化与调度管理由主机上启动的第一个负责管理的虚拟机实现;KVM中,Linux内核实现CPU与内存虚拟化,I/O虚拟化由QEMU实现,调度管理通过Linux进程调度器实现。

2、CPU的虚拟化

​ CPU的虚拟化在实现上可以分为全虚拟化、半虚拟化和硬件辅助虚拟化。全虚拟化(Full Virtualization)是最基础的虚拟化模式,它使得虚拟机能够完全模拟一个独立的物理计算机系统。虚拟机中的操作系统和应用程序运行时无需知道自己是在虚拟化环境中运行,它们认为自己在直接操作硬件。半虚拟化(Paravirtualization)在虚拟化实现中做出了妥协。与全虚拟化不同,半虚拟化要求虚拟机中的操作系统知道它运行在虚拟化环境中,并通过修改操作系统内核来优化虚拟化性能。在半虚拟化模式下,虚拟机可以通过与虚拟化平台直接交互来避免不必要的仿真开销。硬件辅助虚拟化(Hardware-assisted Virtualization)是通过处理器的硬件功能来支持虚拟化的一种方式。现代CPU(如Intel的VT-x、AMD的AMD-V)提供了专门的虚拟化支持,使得虚拟机可以直接执行大部分指令,而无需二进制翻译。

​ 这三种虚拟化技术各有优缺点:

+ 全虚拟化提供了最好的兼容性,但性能开销较大,适用于不支持虚拟化的硬件。
  • 半虚拟化提供了更好的性能,但要求操作系统支持修改,兼容性较差。
  • 硬件辅助虚拟化则在性能和兼容性之间取得了平衡,成为现代虚拟化技术的主流选择,尤其是在支持多种操作系统时能够提供卓越的性能。
3、内存虚拟化

​ 内存虚拟化是将虚拟机上的虚拟内存地址(Guest Virtual Address, GVA)映射到虚拟机的物理地址(Guest Physical Address, GPA),并进一步映射到宿主机的物理地址(Host Physical Address, HPA)。在没有硬件辅助虚拟化之前,虚拟机监控器(VMM)会为每个虚拟机维护影子页表,映射GVA、GPA到HPA。硬件辅助虚拟化则通过二级页表等机制优化了这一过程,提高了性能。以下是内存虚拟化的一些内容和原理介绍:

  1. 虚拟地址空间:虚拟机操作系统会认为自己拥有一个独立的地址空间,从0开始的一系列地址。这些虚拟地址映射到虚拟机的物理地址(GPA),再通过二级页表映射到宿主机物理地址(HPA)。
  2. 页表虚拟化:硬件支持内存虚拟化技术,如Intel EPT(扩展页表)或AMD NPT(二级页表),直接在硬件层面完成虚拟地址到宿主机物理地址的转换,提升了内存访问效率。
  3. 共享物理内存:当多个虚拟机使用相同的数据时,它们可以共享物理内存的页,减少冗余数据存储,节约内存资源。这种共享需要虚拟化平台确保虚拟机间的数据隔离性。
  4. 写时复制(Copy-On-Write, COW):当虚拟机试图修改共享的内存页时,KVM会触发写时复制操作,为虚拟机创建一个新的私有页。这种机制既节省内存又保证了虚拟机间的数据隔离。
  5. 内存迁移:在虚拟机的内存虚拟化中,内存页可以在宿主机上进行动态迁移。这对于实现负载均衡、资源优化和虚拟机的高可用性非常重要。
  6. 嵌套页表:嵌套页表支持在虚拟机内部构建虚拟地址到物理地址的多级映射,而无需由宿主机进行额外的映射处理,从而提高内存访问效率。
  7. 透明大页:将多个小的内存页合并为一个大页,从而减少页表项的数量,提高内存访问效率,降低地址转换的开销。

内存虚拟化的这些技术共同作用,使得虚拟机能够高效地利用宿主机资源,并在性能和资源共享之间实现平衡。

4、I/O虚拟化

​ I/O虚拟化是指将物理I/O资源(如网络接口、存储设备等)虚拟化,使多个虚拟机能够共享这些资源,同时保持对每个虚拟机的独立性和隔离性。通过I/O虚拟化,虚拟机可以像直接访问硬件一样进行I/O操作,而无需知道底层硬件的详细情况。I/O虚拟化的目标是减少虚拟机与宿主机之间的I/O开销,并提供高效、可扩展的I/O性能。

I/O虚拟化的实现方法可以分为以下几种主要方式:

  • 设备虚拟化:
    设备虚拟化通过在虚拟化平台上创建虚拟设备(如虚拟网络接口卡或虚拟磁盘)来实现。每个虚拟机通过这些虚拟设备与宿主机进行通信,而虚拟设备本身对应物理硬件上的真实设备。

  • 设备直通(Device Passthrough)
    设备直通是一种高性能的I/O虚拟化方式,它允许虚拟机直接访问宿主机上的物理设备。例如,可以通过Intel VT-d或AMD-Vi等硬件技术将网络适配器、GPU或存储设备直接分配给虚拟机,这样虚拟机就可以以接近裸机的性能直接与物理设备进行交互。

  • 虚拟I/O设备(vI/O)与共享内存
    虚拟I/O设备是虚拟化环境中特别设计的设备,旨在优化虚拟机之间的I/O操作效率。虚拟机可以使用这些设备实现高速的I/O操作,尤其是在多个虚拟机共享资源时,能够减少I/O开销。

  • I/O多路复用(I/O Multiplexing)
    I/O多路复用通过在宿主机上虚拟化I/O请求,允许多个虚拟机共享I/O设备的带宽而不造成性能瓶颈。这种方式特别适用于网络I/O。

第11章 Linux容器技术

​ Linux 容器技术是操作系统级别的虚拟化技术,可以在操作系统层次上为进程提供虚拟的执行环境,一个虚拟的执行环境被称为一个容器(container)。

1、容器技术概述

​ 容器是一种沙盒(sandbox)技术,主要目的是将应用打包起来提供一个与外界隔离的运行环境,以及方便这个沙盒转移到其他宿主机器。本质上,容器是一组特殊的进程,通过 namespace、cgroup 等技术把资源、文件、设备、状态和配置划分到一个独立的空间,形成一个虚拟的操作系统环境。

2、Linux容器技术的基本原理

​ Linux 容器的实现依赖于多种底层技术的协作,共同为容器提供隔离、控制和高效的运行环境。容器使用操作系统级的虚拟化技术,提供了比传统虚拟机更高效、快速的资源利用和启动方式。容器共享宿主机的操作系统内核,但每个容器都有独立的进程空间、网络接口和文件系统,从而实现隔离和资源控制。

  • 命名空间(Namespaces):
    命名空间是 Linux 内核提供的一种机制,用于隔离系统资源的可见性。不同的命名空间允许在同一主机上创建独立的资源实例,如进程、网络、文件系统等。常见的命名空间包括:

    • PID 命名空间: 隔离进程编号,使每个容器拥有独立的进程树。
    • Network 命名空间: 隔离网络接口、IP 地址、路由表等网络资源。
    • Mount 命名空间: 隔离文件系统挂载点,使容器有独立的文件系统。
    • UTS 命名空间: 隔离主机名和域名。
  • 控制组(Cgroups):
    控制组是一种用于限制、账户和隔离进程组的机制。Cgroups 允许在不同层次上分配资源,并限制容器对 CPU、内存、磁盘等资源的使用。每个容器都可以有自己的资源限制和使用配额。

  • 文件系统隔离:
    容器使用文件系统隔离来实现对文件和目录的隔离。每个容器都有自己的根文件系统,可以与主机和其他容器隔离。这种隔离通过 Mount 命名空间实现,允许容器拥有独立的文件系统视图。

  • 容器镜像:
    容器镜像是一个轻量级、独立、可执行的软件包,包含运行应用所需的一切,如代码、运行时、系统工具、系统库等。镜像通过分层存储(UnionFS)的方式构建,允许多个层叠加在一起,形成一个完整的镜像。

  • 工作流程:

    • 镜像构建: 制作一个包含应用程序及其依赖项的容器镜像。
    • 容器创建: 使用容器运行时创建一个容器实例,从镜像中启动应用程序。
    • 运行应用:应用程序在容器中运行,利用隔离机制独立于主机和其他容器。
    • 资源隔离: Cgroups 和命名空间确保容器在资源上是独立隔离的。
3、如何创建一个容器

4、Docker

Docker 是一个开源的容器化平台,用于创建、部署和管理容器化的应用程序。它基于 Linux 内核提供的 cgroups、namespace 等功能,并提供了一整套工具和平台,使得容器的创建、打包、交付和运行变得更加简单和高效。

二、总结

Linux虚拟机技术和容器技术是两种不同的虚拟化技术,用于实现应用程序的隔离和部署。它们有以下区别和特点:

Linux虚拟机技术:

  • 基于完全虚拟化原理,通过在物理硬件上运行虚拟机监视器(Hypervisor)来创建和管理多个虚拟机实例。
  • 每个虚拟机拥有独立的操作系统、内核和用户空间,可以运行不同的操作系统,如Linux、Windows等。
  • 虚拟机之间相互隔离,具有较高的安全性和隔离性,每个虚拟机可以拥有自己的资源(CPU、内存、磁盘等)。
  • 虚拟机的启动和停止需要较长的时间,占用较多的系统资源。
  • 更适合于运行复杂的应用程序和多个不同操作系统的场景,提供更大的灵活性和隔离性。

容器技术(如Docker):

  • 基于操作系统级虚拟化,利用Linux内核的namespace和cgroup特性,实现应用程序的隔离和部署。
  • 容器共享宿主机的操作系统和内核,在容器内运行应用程序的进程,每个容器相互隔离,但共享宿主机的操作系统,从而节省资源和提高性能。
  • 容器启动和停止快速,占用较少的系统资源,可以实现快速的扩展和部署。
  • 容器之间的隔离性较虚拟机来说稍弱,但仍提供一定程度的隔离,使得容器之间的相互影响较小。
  • 更适合于轻量级应用程序和微服务架构,提供高度的可移植性和可部署性,加快应用程序的交付速度。

总的来说,Linux虚拟机技术适用于需要完全隔离和运行不同操作系统的复杂应用场景,而容器技术更适合于轻量级应用程序和快速部署的场景,提供更高的效率和可移植性。虚拟机技术提供了更高的隔离性和安全性,而容器技术则更加轻量且易于管理。选择使用哪种技术应根据具体需求和应用场景进行评估。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值