KVM内核源码学习之源码组成

来源:互联网 发布:des算法主要内容 编辑:程序博客网 时间:2024/05/16 14:26

1             KVM内核源码的组成

在linux-2.6.32版本的内核中,涉及到KVM的部分大概有两个部分:virt目录和Arch目录。其中Arch目录包含了对应多种处理器架构的代码模块,比如x86/powerpc/mips等等,多款处理器支持KVM,如x86和powerpc。我们主要关心x86架构下的KVM的实现方案。Arch目录 下,实现了包括时钟源的模拟、LAPIC的实现 及与底层硬件直接相关的MMU的实现。而Virt目录 下则主要是与硬件体系结构不直接相关的部分,包括虚拟IO地址的映射管理、虚拟机内存映射管理及虚拟机中断注入相关的处理等

2 核源码架构

主要功能

代码目录

说明

VM 、VCPU、虚拟内存及虚拟IO设备等的创建、初始化与管理调用

Virt/Kvm_main

与PC模拟器 qemu交互,完成虚拟机、虚拟CPU、虚拟IO设备与虚拟内存等的管理工作,控制VM在用户态和内核态间的转换控制

coalesced_mmio

Virt/ coalesced_mmio

仿真设备的MMIO内存,将MMIO读写操作积累在环形缓冲区来实现性能优化

VM中断请求的接收与处理的基本操作

 Virt/Irq_common

提供对 pic\msi\ioapic等等中断方式的虚拟化支持与响应

文件系统模拟IO操作涉及的数据结构

Virt/Eventfd

文件系统模拟IO操作涉及的数据结构

虚拟机直接使用物理设备问题

Virt/iommu

在物理上,IOMMU 就是一个针对于外围设备的内存管理单元,相似于 CPU 上的 MMU, 提供地址翻译、隔离和访问控制的功能

平台设备Ioapic 的仿真

 

一般平台型设备,如 PIT, PIC, APIC 等是直接在 KVM 内核中实现后端的代码的, 而 PCI 总线上的设备或更外围的方式连接的设备,通过 qemu-kvm 在用户空间来仿真的。MMIO 和 PIO, KVM 实现了一个抽象的 IO_BUS 模型

时钟源的模拟

 Arch/x86/kvm/I8254

模拟8254时钟源

中断控制器的模拟

Arch/x86/kvm/I8259

Lapic Irq

I8259中断控制器的模拟 LAPIC的模拟及中断在底层的注入与处理

 

定时时器的模拟

Arch/x86/kvm/ Timer

定时时器的模拟

内存管理

Arch/x86/kvm/mmu

内存管理