Featured image of post linux 虚拟化原理学习

linux 虚拟化原理学习

写在前面:

道不足则多术,德不足则多欲;

气不足则多食,神不足则多眠;

智不足则多疑,能不足则多患;

爱不足则多情,信不足则多言;

威不足则多怒,量不足则多怨;

linux 虚拟化技术分类

常见的虚拟化技术有 PVE XEN docker KVM LXC LXD openVZ podman 等。

除了 docker 还有哪些主流的虚拟化技术?

群晖的 VMM ,qnap 威联通的 virtualization station ,vmware , virtualbox 。trueNas 的 bhyve 。虚拟机的技术五花八门,产品多的难以尽数。但是也没有什么特别难以理解的地方。道与术,精通一术以证道,抓住主要矛盾。

现在的云平台虚拟化方案都是基于 openstack 做的轻量的 linux host 系统。国内有一众的去桌面自研的虚拟化平台。用的越来越多,以后的企业用户会用到越来越成熟的产品。与内核有个官方社区强力的地位不同,虚拟化平台关注的问题较少,自由度较大。这些都是基础设施,需要大量的人员维护。国内需要不少的人在这些领域雕花直到成熟。

有哪些轻量的虚拟化 host 系统吗?

在轻量虚拟化领域,有几个常见的轻量级虚拟化主机系统,它们专注于提供高效的容器或虚拟化环境,适合运行容器化工作负载或需要快速部署和管理的应用场景。以下是一些常见的轻量虚拟化主机系统:

AlmaLinux OS with AlmaLinux OS Container: AlmaLinux OS是一个企业级Linux发行版,它提供了AlmaLinux OS容器,用于运行LXC和Docker容器。它专注于提供稳定、安全的基础设施,适合在生产环境中部署和管理容器化应用。

CoreOS Container Linux (已停止维护,合并为Flatcar Container Linux): CoreOS Container Linux 是一个专为容器化工作负载设计的轻量Linux发行版。它的设计目标是简化基础设施的管理和维护,支持自动化部署和更新,已停止维护,推荐使用其继任者 Flatcar Container Linux。

Flatcar Container Linux: Flatcar Container Linux 是CoreOS Container Linux的继任者,专注于安全、自动化和容器化。它支持多种容器引擎(如Docker、containerd)和编排工具(如Kubernetes),适合用于云原生环境中的应用部署。

RancherOS: RancherOS 是一个专为容器化工作负载而设计的操作系统。它将操作系统本身也构建为一个Docker容器,极大地简化了系统的复杂性,使得整体系统更轻量和高效。

Ubuntu Core: Ubuntu Core 是Ubuntu的一个最小化版本,专为IoT和嵌入式设备以及云原生应用而设计。它支持使用Snap软件包格式,提供了安全、自动化的应用部署和更新机制,适合于边缘计算和容器化应用。

这些轻量虚拟化主机系统通常具有精简的系统架构、强调安全性和自动化管理,能够有效地支持容器化应用的部署和管理需求。选择适合自己需求的主机系统时,可以考虑其集成的容器引擎支持、安全性特性以及管理工具的易用性。

现在的云平台虚拟化方案都是基于一个轻量的 linux 系统加上对 openstack 的支持做的 host 操作系统。guest 则采用不同的系统跑一些应用和服务。

一切硬件都可以为虚拟化做额外的定制功能

虽然这么说,但是虚拟化的核心硬件还是 CPU 和 GPU ,这是由实力和地位决定的,也是这个世界的现实状态。

CPU 的虚拟化

实现的功能

CPU的硬件虚拟化功能(如Intel VT-x或AMD-V)实现了几个关键的功能,这些功能使得虚拟化软件能够更高效地管理和运行虚拟机。以下是主要实现的功能和工作原理:

  • 特权级别切换:

当虚拟化软件(如Hypervisor)运行多个虚拟机时,每个虚拟机都以不同的操作系统运行,并尝试执行特权指令(例如修改内存管理单元)时,处理器需要能够快速而安全地从一个虚拟机切换到另一个虚拟机或者宿主系统。硬件虚拟化功能通过提供特权级别的隔离和切换机制,允许处理器在不同的虚拟机之间进行快速而安全的切换。

  • 直接执行客户机代码:

在硬件虚拟化支持下,虚拟化软件可以通过虚拟化扩展(如VT-x的VMX根模式)直接执行客户机代码,而无需在软件级别模拟每个CPU指令。这种能力称为硬件辅助的虚拟化,可以显著提高虚拟机的性能,因为大部分指令可以在硬件层面直接执行。

  • 虚拟设备的访问:

处理器的虚拟化功能还允许虚拟机通过虚拟化I/O MMU(Input/Output Memory Management Unit)访问虚拟设备。这使得虚拟机可以直接访问设备,而无需通过宿主操作系统进行中介,提高了I/O操作的效率和响应速度。

  • 隔离和安全性:

硬件虚拟化增强了虚拟机和Hypervisor之间的隔离,防止虚拟机越界访问宿主系统或其他虚拟机的内存和资源。这种隔离是通过硬件支持的特权级别和访问控制机制来实现的,比如处理器在虚拟机执行期间能够检测和拦截敏感指令。

  • 嵌套虚拟化支持:

一些处理器还支持嵌套虚拟化,即在虚拟化的虚拟机内部运行另一个虚拟化软件。这种功能使得在虚拟机内部可以再次创建虚拟化环境,从而扩展了虚拟化技术的应用场景和灵活性。

总之,CPU的硬件虚拟化功能通过提供高效的特权级别切换、直接执行客户机代码、访问虚拟设备和增强的隔离机制,大大提高了虚拟化软件的性能、安全性和功能扩展性,使得虚拟化技术在企业和云计算环境中得到广泛应用。

为何只能在 bios 当中设置

固件(通常是BIOS或UEFI)和操作系统内核在处理CPU的硬件虚拟化时扮演不同的角色,这导致它们在是否可以“打开”或管理硬件虚拟化功能上有所不同。

  • 固件的角色:
    • 初始化和配置:在计算机启动时,固件负责初始化和配置硬件,包括处理器。固件可以通过设定特定的寄存器值或开启特定的处理器特性

来启用硬件虚拟化功能。这些操作通常在计算机启动时执行,并且是全局性的设置,影响整个系统的虚拟化能力。

  • 限制和安全性考虑:由于硬件虚拟化功能涉及到系统的安全和性能,固件可能会对其进行一些限制或安全性考虑,确保只有授权的软件可

以访问和利用这些功能。

  • 内核的角色:
    • 虚拟化管理:操作系统内核负责管理和运行虚拟机,但它依赖于硬件虚拟化功能来提供有效和安全的虚拟化环境。内核通常无法直接

“打开”硬件虚拟化功能,而是依赖于固件在系统启动时已经正确配置了这些功能。

  • 软件接口:内核通过软件接口(如KVM、Hyper-V等)与硬件虚拟化功能进行交互,以便创建和管理虚拟机。它使用处理器提供的虚拟化

扩展来优化虚拟机的执行,但这些扩展的启用通常是在固件层面完成的。

因此,固件和内核在处理硬件虚拟化功能时各自有不同的职责和权限。固件负责系统启动时的硬件初始化和配置,包括硬件虚拟化功能的启用;而内核则依赖固件正确配置后的硬件虚拟化环境来运行虚拟机。

windows 平台的虚拟化技术与 linux 平台有什么区别?

虚拟化类型:

Linux平台:主要采用基于容器的虚拟化技术,例如Docker、LXC(Linux Containers)。这些技术通常使用Linux内核的命名空间和cgroup功能来实现进程间的隔离和资源管理,每个容器共享宿主机的操作系统内核,因此更轻量且资源利用率高。 Windows平台:主要采用基于虚拟机的虚拟化技术,例如Hyper-V、VMware Workstation、VirtualBox。这些技术通过虚拟化软件和硬件来创建独立的虚拟机,每个虚拟机都有自己的操作系统和内核,能够运行不同的操作系统实例,如Windows、Linux等。

管理和部署方式:

Linux平台:容器化技术提供了快速部署和轻量级管理的优势,适合于构建和部署微服务、容器化应用。 Windows平台:虚拟机技术提供了更高的隔离性和安全性,适合于运行不同版本的Windows操作系统,以及需要完全隔离的应用或服务。

性能和资源利用:

Linux平台:容器化技术通常比虚拟机更轻量级,启动和销毁速度快,且资源利用更高效,但由于共享内核,可能会限制某些操作系统级别的功能。 Windows平台:虚拟机提供了更高的隔离性和安全性,每个虚拟机独立运行自己的操作系统和应用程序,但需要更多的系统资源和管理开销。

生态系统和工具支持:

Linux平台:拥有丰富的开源和社区支持,容器化技术得到广泛采纳,有大量成熟的工具和解决方案,如Kubernetes、Docker Swarm等。 Windows平台:虚拟机技术得到Windows官方和第三方的广泛支持,有许多专门为Windows虚拟化定制的管理工具和解决方案。总体而言,Linux平台更倾向于使用轻量级的容器化技术,适合于构建和部署分布式应用和微服务架构;而Windows平台更倾向于使用虚拟机技术,以提供更高的隔离性和多操作系统支持。选择虚拟化技术应根据具体的应用场景、性能需求和管理复杂性来决定。

NAS 上的虚拟化方案

群晖(Synology)的 VMM(Virtual Machine Manager),QNAP 的 Virtualization Station,以及 TrueNAS 的虚拟化技术,它们各自使用的虚拟化技术和开发方式如下:

  • 群晖的 VMM(Virtual Machine Manager):

虚拟化技术:群晖的 VMM 主要基于 KVM(Kernel-based Virtual Machine) 技术。KVM 是一个基于 Linux 内核的开源虚拟化解决方案,它利用了Linux内核本身的虚拟化扩展(如Intel VT或AMD-V)来实现硬件虚拟化。开发方式:VMM 是作为群晖NAS设备上的一个应用程序,由群晖公司开发和维护。它提供了用户友好的界面和管理工具,方便用户在群晖NAS上创建、管理和运行虚拟机。

  • QNAP 的 Virtualization Station:

虚拟化技术:QNAP 的 Virtualization Station 使用 KVM(Kernel-based Virtual Machine) 和 QEMU(Quick EMUlator) 技术。这些技术与群晖的 VMM 类似,都是基于 Linux 内核的虚拟化解决方案,提供了硬件虚拟化的支持。开发方式:Virtualization Station 是 QNAP 公司开发的虚拟化管理软件,为其NAS设备提供了虚拟化能力。它允许用户在QNAP NAS上创建、管理和运行多个虚拟机,并提供了集成的存储和网络管理功能。

  • TrueNAS 上的虚拟化技术:

虚拟化技术:TrueNAS 的虚拟化技术主要包括 bhyve(BSD Hypervisor) 和 Docker。bhyve 是一个开源的轻量级虚拟化解决方案,由FreeBSD社区开发并支持。它提供了类似于KVM的硬件虚拟化功能,适用于运行多个操作系统实例。开发方式:TrueNAS 是一个基于 FreeBSD 的开源存储操作系统,由 iXsystems 公司开发和维护。TrueNAS 提供了通过 bhyve 虚拟化引擎来支持虚拟机的创建和管理,同时也支持使用 Docker 容器来部署和运行应用程序。总体来说,这些虚拟化解决方案都利用了现有的开源虚拟化技术,如KVM、QEMU和bhyve,结合各自公司开发的管理工具和集成方式,为用户提供了在NAS或存储系统上部署和运行虚拟机的能力。

什么是 SR-IOV ?

SR-IOV(Single Root I/O Virtualization,单根 I/O 虚拟化)是一种硬件虚拟化技术,旨在提升虚拟化环境下网络和存储设备的性能和效率。它允许一个物理设备,如网卡或存储控制器,被虚拟化环境中的多个虚拟机(VMs)直接共享,而无需通过主机操作系统的网络或存储堆栈。

具体来说,SR-IOV 技术通过以下关键特性来实现高性能的直接设备访问:

虚拟功能(Virtual Functions,VFs):物理设备在支持 SR-IOV 的情况下,会分配出多个虚拟功能(VFs)。每个 VF 都是一个虚拟设备,具有自己的 MAC 地址和配置空间。

物理功能(Physical Function,PF):物理设备上仍然存在一个主功能(PF),它负责管理所有虚拟功能(VFs)的分配和配置。

直接 I/O 访问:每个虚拟机可以被配置为直接访问一个或多个 VFs,而无需经过主机操作系统的网络或存储堆栈。这种直接访问大大减少了虚拟化的开销,提升了数据传输的效率和性能。

SR-IOV 的主要优势包括:

降低虚拟化开销:通过减少虚拟化层和主机操作系统的参与,提高了 I/O 操作的效率和响应速度。

提升网络和存储性能:VMs 可以直接访问物理设备的能力,使得在虚拟化环境中的网络和存储操作更加快速和高效。

SR-IOV 技术通常应用于需要高性能网络和存储 I/O 的场景,例如数据中心中的虚拟化服务器环境,或者需要处理大量数据传输的应用程序。

cgroup 实现资源隔离

https://blog.csdn.net/zhonglinzhang/article/details/64905759

其中对 CPU 和 GPU 的资源隔离和分配是重点也是难点。像内存和网络就相对简单一点。

总结

linux 下的虚拟化的产品都用到了 cgroup 。而内核的虚拟化可以用额外的自制的内核模块来做,也可以用内核支持的 kvm 来做。有开源的实现 bhyve 。

虚拟化的本质就是在硬件或者软件将资源进行隔离,模拟多个物理设备的技术。

乱花渐欲迷人眼,浅草才能没马蹄。

浅草就是主线,抓住主线才能事半功倍。

要学习linux 的虚拟化,学习 cgroup kvm 和 qemu 是最直接的。云桌面用的是 openstack 这个可以看一下框架。代码都是看不完的。看代码的能力甚至都不是最重要的。