CPU虚拟化

本文目的是尽量对CPU虚拟化做一个全面的介绍,并在不断完善中。

简介

在KVM打开的情况下,客户机中CPU指令的执行由硬件处理器的虚拟化功能(如Intel VT-x和AMD AMD-V)来辅助执行,具有非常高的执行效率。
QEMU/KVM为客户机提供一套完整的硬件系统环境,在客户机看来,其所拥有的CPU即是vCPU(virtual CPU)。在KVM环境中,每个客户机都是一个标准的Linux进程(QEMU进程),而每一个vCPU在宿主机中是QEMU进程派生的一个普通线程。
在普通的Linux系统中,进程一般有两种执行模式:内核模式和用户模式。而在KVM环境中,增加了第3种模式:客户模式。vCPU在3种执行模式下的不同分工如下。

  1. 用户模式(User Mode)
    主要处理I/O的模拟和管理,由QEMU的代码实现。
  2. 内核模式(Kernel Mode)
    主要处理特别需要高性能和安全相关的指令,如处理客户模式到内核模式的转换,处理客户模式下的I/O指令或其他特权指令引起的退出(VM-Exit),处理影子内存管理(shadow MMU)。
  3. 客户模式(Guest Mode)
    主要执行Guest中的大部分指令,I/O和一些特权指令除外(它们会引起VM-Exit,被Hypervisor截获并模拟)。
    vCPU在KVM中的这3种执行模式下的转换
    在这里插入图片描述
    在KVM环境中,整个系统的基本分层架构如图
    在这里插入图片描述

在系统的底层CPU硬件中需要有硬件辅助虚拟化技术的支持(Intel VT或AMD-V等),宿主机就运行在硬件之上,KVM的内核部分是作为可动态加载内核模块运行在宿主机中的,其中一个模块是与硬件平台无关的实现虚拟化核心基础架构的kvm模块,另一个是硬件平台相关的kvm_intel(或kvm_amd)模块。而KVM中的一个客户机是作为一个用户空间进程(qemu)运行的,它和其他普通的用户空间进程(如gnome、kde、firefox、chrome等)一样由内核来调度,使其运行在物理CPU上,不过它由kvm模块的控制,可以在前面介绍的3种执行模式下运行。多个客户机就是宿主机中的多个QEMU进程,而一个客户机的多个vCPU就是一个QEMU进程中的多个线程。和普通操作系统一样,在客户机系统中,同样分别运行着客户机的内核和客户机的用户空间应用程序。

参考

KVM实战:原理、进阶与性能调优
CPU 虚拟化

posted @ 2025-01-01 19:05  main_c  阅读(7)  评论(0)    收藏  举报  来源