设为首页收藏本站language 语言切换
查看: 2617|回复: 0
收起左侧

[原创] 在AMD平台上实现KVM虚拟化技术 (12)

[复制链接]
发表于 2012-10-10 14:13:11 | 显示全部楼层 |阅读模式

KVM 在  Linux上的实现
KVM 的 VMM 代码包括内核代码和用户空间代码两部分。 内核代码即 kvm.ko 模块的代码,分布在内核源码的 virt/kvm 和 arch/x86/kvm 两个目录下,前者是和硬件结构无关的代码,后者是和硬件结构相关的代码,其中和 AMD-V 相关的代码由 arch/x86/kvm/svm.c 文件提供。KVM 内核空间代码实现的功能包括如下几个方面 :
  • 实现硬件辅助的虚拟化的核心功能。包括实现“guest”模式及模式切换,虚拟 CPU 的状态和控制,指令仿真等所有之前提到的 x86 虚拟化所要解决的问题。代码分布在 arch/x86/kvm 下 x86.c, svm.c, emulate.c 等文件中。
  • 提供用户空间对KVM控制。实现/dev/kvm字符设备接口用于qemu-kvm 对 KVM 的控制,包括创建虚拟机,创建虚拟 CPU,创建虚拟机内存空间,运行虚拟机等功能的 ioctl() 接口,其实现的 ioctl() 功能主要分成二类,针对单个虚拟机整体的功能和针对单个虚拟 CPU 的功能。相关代码分布在 kvm_main.c, x86.c,svm.c 等文件中。
  • 对x86平台设备进行仿真。包括仿真 PIC,IOAPIC,Local APIC 及PIT 的代码。
  • 实现IO Port空间和MMIO空间的仿真。这是实现平台设备和外部设备仿真所需要的基础功能。代码分布在 coalesced_mmio.c, iodev.h, emulate.c, x86.c 及svm.c 等文件中。
  • 实现基于文件描述符的通知机制。代码在 eventfd.c 文件中。 其中 ioeventfd 机制用于内核空间仿真 PIO 后向用户空间发送通知, irqfd 机制用于 qemu-kvm 进程向虚拟机注入中断。
  • MMU虚拟化的支持。包括shadow页表的实现,TLB的虚拟化。主要代码在 mmu.c 文件中。
  • PCI-Passthrough相关的功能。代码分布在 kvm_main.c iommu.c 中。当然对物理 IOMMU 单元的管理还需要 Linux内核IOMMU设备抽象层的代码及厂家IOMMU驱动的代码,分别分布在driver/base/iommu.c arch/x86/kernel/ 下的 amd_iommu.c amd_iommu_init.c 文件中。 对 IOMMU 的支持是独立于 KVM 的,它也可以被用于非系统虚拟化的情景。

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-28 07:17 , Processed in 0.341666 second(s), 26 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表