第11章 云计算
我已在云计算行业工作多年,Gregg这里写到的东西都比较熟悉了;如下是一些摘内容摘要和我的评论。
OS虚拟化技术的劣势:
* 任何kernel panic都会影响到所有客户
* 客户不能运行不同的内核版本(评论:也不能再linux上启动Windows guest)
* 也不支持热迁移,kvm虚拟化技术是支持的 (该项是我的评论内容)
目前流行的docker也使用OS虚拟化技术,所以docker也是一样的问题;同时包括kata在内,目前其官网也未支持热迁移。
KVM中一个常见的VM Exit Reason是Guest中执行HLT指令。(评论:在较新的qemu/kvm中支持了cpu-pm=on 透传,可以让guest控制host cpu的power state,可以避免HLT/MWAIT等指令的退出
P500页,作者还有一处错误说GVA到HPA之间可以TLB缓存,是错误的。
一些技术信息拓展
根据豆包查了一些资料,结合个人认知。
概念解释
* GVA(Guest Virtual Address):这是客户机(Guest)操作系统所使用的虚拟地址。在 KVM 虚拟化环境中,客户机操作系统运行在虚拟机中,它看到的是自己的虚拟地址空间。
* HPA(Host Physical Address):这是宿主机(Host)的物理地址。在 KVM 中,虚拟机最终的数据存储和访问都要落实到宿主机的物理资源上。
* TLB(Translation Lookaside Buffer):是一种高速缓存,用于存储虚拟地址到物理地址的转换映射,以加速内存访问。
转换过程分析
一般情况下,在 KVM 虚拟化中,从 GVA 到 HPA 不能直接通过 TLB 转换。
原因在于地址空间的隔离和多层转换需求:
* 首先,客户机操作系统使用 GVA 进行内存访问,这个虚拟地址需要先转换为客户机物理地址(GPA - Guest Physical Address)。这个转换是由客户机操作系统的内存管理单元(MMU)基于其自身的页表来完成的。因为客户机操作系统并不知道它运行在虚拟化环境中,它按照传统的方式管理自己的虚拟地址到物理地址的映射。
* 然后,从 GPA 到 HPA 的转换需要通过 KVM 虚拟化层的介入。KVM 会维护影子页表(Shadow Page Table)或者利用硬件辅助虚拟化技术(如 Intel 的 EPT - Extended Page Table 或 AMD 的 RVI - Rapid Virtualization Indexing)来实现 GPA 到 HPA 的转换。
* TLB 通常是存储虚拟地址到物理地址的缓存,但在 KVM 虚拟化环境下,由于存在 GVA - GPA - HPA 这样的多层转换关系,TLB 缓存的内容通常是 GVA - GPA 或者 GPA - HPA 的映射,而不是直接的 GVA - HPA 映射。
Docker 容器是基于操作系统级别的虚拟化技术。容器技术利用了宿主机(Host)的内核来运行。当启动一个 Docker 容器时,容器内的进程是直接运行在宿主机的内核之上的,容器共享宿主机的内核。
Docker 是基于 Linux 容器技术构建的平台,它利用了 Linux 内核的特性(如 namespaces 和 cgroups)来实现容器的隔离和资源管理。容器本质上是在 Linux 操作系统的用户空间进行隔离,共享 Linux 内核。这种设计使得 Docker 在原生状态下主要用于运行基于 Linux 的应用程序和服务。因为 Windows 操作系统有自己独立的内核和系统架构,和 Linux 内核不兼容,所以在常规的 Docker 运行机制下不能直接启动 Windows Guest OS。
Kata Containers 是一种容器运行时技术,它结合了容器的轻量级和虚拟机的安全性优势。本质上,Kata 在每个容器启动时都会创建一个独立的轻量级虚拟机(VM)来运行容器。最重要的安全特性是内核隔离。
另外,Gregg曾经供职和在本章中多次提到Joyent公司已于2016年被三星电子收购;后来也退出了IaaS共有云的市场。