x86/kvm/vmc.c // x86平台和CPU相关的虚拟化 VT-X
x86/kvm/x86.c // x86平台kvm虚拟化
virt/kvm/kvm_main.c // 虚拟化模块(可类比xx-core)
简单几个重要数据结构。// 一个虚拟机,对应一个进程,一个虚拟vcpu,对应一个线程
kvm_host.h
struct kvm
{
struct kvm_vcpu *vcpus[KVM_MAX_VCPUS];
struct list_head vm_list; // 用于挂到全局vm_list列表
struct kvm_arch arch; // 平台相关
}
// 和虚拟机一一对应。
x86
struct vcpu_vmx
{
struct kvm_vcpu vcpu;
}
// 单个虚拟机的单个虚拟CPU。
struct vmcs {
u32 revision_id;
u32 abort;
char data[0];
}; // 每个物理CPU一个 vmxarea
kvm模块初始化
kvm_init()
{
kvm_arch_init(); // 平台初始化
kvm_irqfd_init(); // 创建kvm-irqfd-cleanup workqueue
kvm_arch_hardware_setup();
//检查每一个处理器的兼容性;
//注册监听CPU up/down;
//注册监听系统重启;
//分配存放kvm_vcpu cache;
//分配存放异步错误(pf)cache;
//注册/dev/kvm;
//注册syscore_ops;
//注册类别为kvm_dev_type_vfio kvm_device_ops;
}
创建虚拟机

本文档详细介绍了KVM在x86平台上的虚拟化实现,包括VT-X技术,以及kvm模块如何初始化,创建虚拟机和vCPU的过程。核心文件如x86/kvm/vmc.c、x86/kvm/x86.c和virt/kvm/kvm_main.c扮演了关键角色。每个虚拟机对应一个进程,每个vCPU则对应一个线程。
最低0.47元/天 解锁文章
1055

被折叠的 条评论
为什么被折叠?



