KVM浅析&基于Qemu创建Guest OS的测试

本文深入介绍了KVM虚拟化技术,它利用Linux内核实现CPU调度和内存管理,依赖QEMU进行I/O设备模拟。KVM与QEMU结合,避免了繁琐的设备模拟。文章详细阐述了KVM的架构,工作原理,以及如何通过libvirt进行管理。此外,还讨论了virtio设备的半虚拟化优势,并提供了基于VMware上安装和测试KVM的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《KVM虚拟化技术:实战与原理解析》作者写作过程草稿连载http://smilejay.com/kvm_theory_practice/
KVM简介
与xen开发了一套从VCPU调度到内存管理一应俱全的底层操作系统不同,Kernel-Based Virtual Machine是基于kernel的虚拟机,完全利用Linux内核来实现CPU的调度,内存管理的功能。KVM只能运行在支持硬件虚拟化的CPU上。
这里写图片描述
KVM核心层仅有3个内核模块:kvm,kvm_intel和kvm_amd(分别对应Intel和AMD的CPU);kvm驱动负责创建虚拟机,为vcpu注入中断和提供时钟信号,使用KVM的io_ctl接口可以管理vcpu和vm。
KVM开发者选择了已经成型的开源虚拟化软件QEMU作为用户层管理Guest OS的接口。Qemu实现了I/O设备模拟,提供访问外设的途径。这种架构使得KVM避免了繁琐的设备模拟和设备驱动(内核中80%以上的代码就是驱动部分)。QEMU除了是一款虚拟化软件以外还是一款仿真器,它可以模拟多种不同的CPU和平台,例如x86,Power PC,S390 guest(IBM的一种大型机)经由kqemu这个开源的加速器,QEMU能模拟至接近真实电脑的速度。

KVM架构
使用modprobe命令装载KVM模块后,Linux内核就成为了一个hypervisor,并且在Linux原有的Kernel mode和User mode的基础上,新增加了Guest mode,Guest mode拥有自己的Kernel mode和User mode。在KVM模型中,每一个Gust OS都是作为一个标准的Linux进程,都可以使用Linux进程管理命令管理。在虚拟机运行时,三种模式的工作各为:

  • Guest mode: 执行非I/O的客户代码, Virtual Machine运行在这个模式下;
  • User mode:代表用户执行I/O指令,Qemu运行在这个模式下;
  • Kernel mode:实现Guest mode的切换,处理因为I/O或者其他指令引起的从客户模式退出(VM_EXIT)的指令;kvm模块工作在这个模式下。

这里写图片描述
KVM 工作原理
User mode Qemu利用libkvm通过ioctl进入Kernel mode,kvm模块为Guest OS创建Virtual Memory,VCPU,然后执行VMLAUCH指令进入Guest mode,加载Guest OS并执行。如果Guest OS发生外部中断或者影子页表缺页之类的情况,会暂停Guest OS的执行,退出Guest mode进行异常处理,之后重新进入Guest mode,执行客户代码。如果发生I/O事件或者信号队列中有信号到达,就会进入User mode 处理。
这里写图片描述
libvirt
libvirt是为了安全高效的管理节点上的各个域,而提供一个公共的稳定的软件层。它是目前使用最为广泛的对KVM虚拟机进行管理的工具和应用程序接口(API),而且一些常用的虚拟机管理工具(如virsh、virt-install、virt-manager等)和云计算框架平台(如OpenStack、OpenNebula、Eucalyptus等)都在底层使用libvirt的应用程序接口。

libvirt对多种不同的Hypervisor的支持是通过一种基于驱动程序的架构来实现的。libvirt对不同的Hypervisor提供了不同的驱动:对Xen有Xen的驱动,对QEMU/KVM有QEMU驱动,对VMware有VMware驱动。

libvirt作为中间适配层,让底层Hypervisor对上层用户空间的管理工具是可以做到完全透明的,因为libvirt屏蔽了底层各种Hypervisor的细节,为上层管理工具提供了一个统一的、较稳定的接口(API)。通过libvirt,一些用户空间管理工具可以管理各种不同的Hypervisor和上面运行的客户机,它们之间基本的交互框架如下图所示。
这里写图片描述
在libvirt中涉及到几个重要的概念,解释如下:

  • Node:一个物理机器,上面可能运行着多个虚拟客户机。Hypervisor和Domain都运行在Node之上。
  • Hypervisor:也称虚拟机监控器(VMM),如KVM、Xen、VMware、Hyper-V等,是虚拟化中的一个底层软件层,它可以虚拟化一个节点让其运行多个虚拟客户机(不同客户机可能有不同的配置和操作系统)。
  • Domain:是在Hypervisor上运行的一个客户机操作系统实例。域也被称为实例(instance,如亚马逊的AWS云计算服务中客户机就被称为实例)、客户机操作系统(Guest OS)、虚拟机(virtual machine),它们都是指同一个概念。

这里写图片描述
KVM管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值