OS虚拟化将操作系统划分为形同分隔的访客服务器,且能独立于宿主管理和重启的实例。
全局分区指的是能看到所有访客分区的宿主OS。这种实现方法源自unix的chroot命令,它将进程隔离在unix的全局文件系统的一个子目录内(改变顶层目录“/”)。
相比硬件虚拟化的一个关键区别是仅有一个内核在运行,具有如下优势:
- 客户应用程序能直接向宿主内核发起系统调用,客户应用程序I/O仅有一些甚至没有性能开销
- 分配给客户的内存能完全用于客户应用程序而没有来自OS虚拟层或者其他访客内核的额外内核负担
- 只有一个统一的文件系统缓存,没有宿主和访客的双重缓存
- 所有的客户进程都可由宿主观测到
- CPU是真实的CPU,自适应互斥锁的假设仍然有效
劣势: - 任何kernel panic会影响到所有客户
- 客户不能运行不同版本内核
系统开销
- CPU
当一个线程运行于用户模式时的CPU执行的系统开销为0。OS虚拟中列出内核系统状态可能会由于过滤其他租户的统计信息而引发一些额外的CPU系统开销。 - I/O
除非配置了额外功能,I/O的系统开销是零。基础虚拟化的运行,不需要额外的软件栈层。
- 其他租户
其他租户的存在对性能很可能有一些与虚拟化技术无关的负面影响
- 由于其他租户消耗并清空记录,CPU缓存命中率可能会降低
- CPU执行可能被短时间地中断以提供其他租户设备(如网络I/O)执行中断服务例程
- 可能会存在系统资源的竞争,源自正在被其他租户使用的资源(如磁盘、网络接口)
硬件虚拟化
系统开销
硬件虚拟化由虚拟机管理程序以多种方式实现,每当它试图访问硬件时,这些硬件虚拟化技术会给访客机OS增加系统开销:命令必须由虚拟设备翻译为物理设备。
- CPU
总的来说,访客机应用程序完全在处理器上执行,对于仅限于CPU的应用程序,性能接近裸机系统,可能会遇到的系统开销会发生在特权处理起调用、硬件访问和主存映射时。
硬件虚拟化类型:
- 二进制翻译:识别和翻译访客机能在物理资源上执行的内核指令。二进制翻译在硬件辅助可以使用之前。由于缺乏虚拟化的硬件支持,VMware使用的方案是在处理器环0上运行虚拟机监视器(VMM),并将客户机内核移至之前未使用的环1(应用程序运行于环3,而大多数处理器提供四个环)。因为一些客户机内核指令假设它们运行于环0,为了运行于环1,他们需要翻译,并调用VMM得到虚拟化,这类翻译是在运行中处理的。
- 半虚拟化:访客机OS中必须被虚拟化的指令被替换为对虚拟机管理程序的超级调用。如果访客机OS被修改为支持超级调用,使其意识到运行于虚拟硬件中,性能就能得到提升(理解为减少调用链路?)。
- 硬件辅助:未作修改的运行于硬件的客户机内核指令由虚拟机管理程序处理。它执行一个低于环级别0的VMM。访客机OS内特权内核指令被强限于高特权的VMM内,后者能模拟特权以支持虚拟化,因此不需要翻译二进制指令。
鉴于实现方式和工作负载,一般倾向于硬件辅助虚拟化,而假如访客机OS支持,半虚拟化通常用来提高一些工作负载的性能
看下来云环境其实能实际调整的比较有限,更多的是对虚拟化类型的理解,这块可能需要再去深入了解一下