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

一、KVM及虚拟机技术

1、虚拟机技术概述

       主流虚拟化技术有VMware的ESXi、开源项目Xen和KVM等,它们的主要差别在于CPU的虚拟化、内存的虚拟化和I/O的虚拟化,以及调度管理实现有所不同。在ESXi中,所有虚拟化功能都在内核中实现;在Xen中,内核仅实现CPU与内存虚拟化,I/O虚拟化与调度管理由主机上启动的第一个负责管理的虚拟机实现;在KVM中,Linux内核实现CPU与内存虚拟化,I/O虚拟化由QEMU实现,调度管理通过Linux进程调度器实现,如图所示。
在这里插入图片描述
       除了上述主流虚拟化技术以外,微软的Hyper-V也是一种虚拟化技术解决方案,用于在Windows操作系统上创建和管理虚拟机。它是一种类型-1的虚拟化解决方案,可以在硬件上直接运行,而不需要主机操作系统的完全干预。
1.CPU的虚拟化
       CPU的虚拟化在实现上可以分为全虚拟化、半虚拟化和硬件辅助虚拟化。其中全虚拟化和半虚拟化都是软件实现,也就是虚拟机管理器(Virtual-Machine Monitor,VMM)是纯软件实现。全虚拟化实现方式在客户虚拟机执行特权指令时需要通过VMM进行异常捕获、二进制翻译(Binary Translation,BT)和模拟执行;半虚拟化实现方式需要将客户虚拟机操作系统的特权指令改为通过Hypercall调用VMM来处理特权指令,无需异常捕获与模拟执行。硬件辅助虚拟化的实现方式是VMM与Inter-VT、AMD-V等硬件辅助虚拟化技术相配合,提供在性能和运行环境上都更加逼真的虚拟机环境,如图所示。
在这里插入图片描述

2.内存的虚拟化
       内存虚拟化是一种虚拟化技术,允许多个虚拟机共享物理主机的内存资源,同时提供隔离和独立性,使得每个虚拟机都认为它具有自己的私有内存。这有助于提高系统资源的利用率,支持多任务和多用户环境,同时保持对各个虚拟机的隔离。

以下是内存虚拟化的关键概念和技术:

1)虚拟内存地址空间:

操作系统在每个进程内创建一个虚拟内存地址空间,该地址空间通常比物理内存大。这使得每个进程都认为它有足够的内存来运行,而不需要知道物理内存的实际限制。
2)Hypervisor内存管理:

Hypervisor负责为每个虚拟机提供虚拟内存,将虚拟内存地址映射到物理内存上。Hypervisor还通过分页表等机制实现对不同虚拟机之间的内存隔离。
3)内存分配和回收:

Hypervisor负责分配和回收虚拟机的内存。当虚拟机启动时,Hypervisor会为其分配一定的内存,当虚拟机不再需要内存时,Hypervisor会将其释放以便其他虚拟机使用。
4)Ballooning技术:

Ballooning是一种内存管理技术,其中虚拟机可以通过向Hypervisor返回未使用的内存来释放内存。这对于在资源有限的环境中提高内存利用率非常有用。
5)Transparent Page Sharing(TPS):

TPS是一种技术,允许相同的内存页在多个虚拟机之间共享,以减少重复的内存占用。这在运行相似操作系统的虚拟机时特别有效。
6)内存过commit:

内存过commit是一种策略,即Hypervisor可以分配比物理内存更多的虚拟内存,但只有在实际需要时才分配物理内存。这使得虚拟机能够更灵活地使用内存。
7)Memory Overcommit和Swapping:

Memory Overcommit是一种内存管理策略,允许虚拟机的虚拟内存总量超过物理内存总量。在需要时,Hypervisor可以使用交换技术将虚拟机的内存页面存储到磁盘上,以释放物理内存。
8)内存QoS(Quality of Service):

一些虚拟化平台支持内存质量服务,允许为不同的虚拟机分配不同的内存资源,并监控其内存使用情况。
3.I/O的虚拟化
       在虚拟化环境中,Guest 的 I/O 操作需要经过特殊处理才能在底层 I/O 设备上执行。KVM 支持多种 I/O 虚拟化技术,比如全虚拟化的设备模拟与半虚拟化的 virtio 驱动都是通过软件实现的 I/O 虚拟化;比如设备直通 PCI、设备共享单根虚拟化(Single Root-I/O Virtualization,SR-IOV)、数据平面开发工具集(Data Plane Development Kit,DPDK)与存储性能开发工具集 (Storage Performance Development Kit,SPDK)等硬件辅助 I/O 虚拟化技术。
在这里插入图片描述

2、KVM API的使用方法

KVM(Kernel-based Virtual Machine)是一个在 Linux 内核中实现虚拟化的模块。KVM 提供了一组 API,使得用户空间程序能够与内核交互,以创建和管理虚拟机。以下是一些常见的 KVM API 的使用方法:

  1. 包含头文件:在编写 KVM 程序时,首先需要包含相关的头文件。其中,#include <linux/kvm.h> 包含了 KVM 的主要 API。
  2. 打开 KVM 设备:
    通过打开 /dev/kvm 设备来初始化 KVM。这是与内核通信的入口。
  3. 检查 KVM 版本:
    确保系统上的 KVM 版本与你的程序兼容。
  4. 创建虚拟机:
    创建一个虚拟机并获取虚拟机文件描述符。
  5. 分配虚拟 CPU:
    为虚拟机分配虚拟 CPU。
  6. 配置虚拟 CPU 寄存器:
    配置虚拟 CPU 寄存器,例如设置程序计数器(PC)。
  7. 设置内存映射:
    为虚拟机分配内存并将其映射到虚拟地址空间。
  8. 运行虚拟 CPU:
    启动虚拟 CPU 并执行虚拟机。

二、Linux容器技术

1、容器技术概述

       容器是一种沙盒(sandbox)技术,主要目的是将应用打包起来提供一个与外界隔离的运行环境,以及方便这个沙盒转移到其他宿主机器。本质上,容器是一组特殊的进程,通过namespace、cgroup等技术把资源、文件、设备、状态和配置划分到一个独立的空间,形成一个虚拟的操作系统环境。
  通俗的理解就是一个装应用软件的箱子,箱子里有软件运行所需的依赖库和配置。开发人员可以把这个箱子搬到任何机器上,且不影响里面软件的运行。沙盒技术,顾名思义,就是在应用程序运行时为程序设计一个边界,使得不同应用之间可以独立运行而不互相干扰。其实这个沙盒技术并不是什么黑科技,其本质就是利用Linux的Namespace和Cgroups来实现应用隔离和资源限制,它并不是一个真正存在的边界,一个Windows上的容器如图所示。
在这里插入图片描述

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

Linux 容器技术的基本原理涉及到命名空间、cgroups、联合文件系统和容器运行时等关键概念。以下是 Linux 容器技术的基本原理:
1)Namespace:
命名空间提供了一种隔离资源的机制,使得一个容器内的进程看起来像在一个独立的系统中运行。常见的命名空间有 PID(进程 ID)、NET(网络)、IPC(进程间通信)、UTS(主机名和域名)等。
2)Control Groups (cgroups):
cgroups 允许对系统资源进行限制和分配,如 CPU、内存、磁盘等。容器可以通过 cgroups 获得对资源的精确控制,以防止一个容器耗尽整个系统资源。
3)Union File Systems:
联合文件系统(UnionFS)允许将文件系统层叠在一起,使得容器可以使用基于镜像的文件系统,并且可以在运行时进行修改,而不会影响基础镜像。常见的联合文件系统有 OverlayFS 和 Aufs。
4)容器运行时(Container Runtime):
容器运行时是一个负责运行和管理容器的软件组件。Docker 和 containerd 是两个常见的容器运行时。它们负责创建、启动、停止和删除容器,以及管理容器的生命周期。

3、Docker和其他容器工具

1)Docker:
Docker 是最流行的容器平台之一,它提供了一个易于使用的命令行工具和图形用户界面,使得容器的构建、发布和管理变得简单。Docker 还定义了容器镜像的格式和容器的标准运行时接口。
2)containerd:
containerd 是一个轻量级的容器运行时,最初由 Docker 开发,现在作为一个独立的开源项目。containerd 提供基本的容器管理功能,它的设计更注重性能和稳定性。
3)rkt(Rocket):
rkt 是 CoreOS 提供的另一个容器运行时。它注重安全性和可插拔性,设计上更加模块化,允许用户根据需要替换组件。

4、优势和应用场景

1)轻量级:
容器启动速度快,占用资源少,相对于传统虚拟机,容器更加轻量级。
2)可移植性:
由于容器包含应用程序及其依赖项,它们可以在不同的环境中运行,而无需担心环境差异。
3)隔离性:
使用命名空间和 cgroups 等机制,容器可以在同一主机上隔离运行,相互不受影响。
4)快速部署:
容器可以更快速地部署和扩展,使得应用程序的交付和更新更为灵活。
5)微服务架构:
容器技术支持微服务架构,使得应用程序可以被分解为小型、独立的服务,易于开发、测试和部署。
6)DevOps 实践:
容器技术与DevOps实践结合,提高了开发和运维团队之间的协作效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

20232806安星宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值