Download presentation
Presentation is loading. Please wait.
1
kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩
2
qemu-kvm结构图 qemu /dev/kvm:kvm以字符设备的形式暴露给qemu使用,该字符设备实现了ioctl操作 libkvm
libkvm:把ioctl操作进一步封装,暴露给qemu使用 /dev/kvm kvm (linux内核空间)
3
创建vm 1.打开dev/kvm设备获得fd 2.ioctl(KVM_CREATE_KVM),创建一个虚拟机 user_space kernel kvm_dev的file_operation ----> kvm_dev_ioctl (case KVM_CREATE_VM:) kvm_dev_ioctl_create_vm 创建kvm结构体,一台虚拟机对应一个kvm结构体,kvm保存vm的整体上下文 anon_inode_getfd返回供用户态使用的vm_fd
4
创建vcpu 1.对vm_fd 进行ioctl(KVM_CREATE_VCPU) user_space kernel
vm_fd的file_operation ----> kvm_vm_fops.unlocked_ioctl (=kvm_vm_ioctl) (case KVM_CREATE_VCPU:) kvm_vm_ioctl_create_vcpu kvm_vm_ioctl_create_vcpu主要流程 kvm_vcpu结构体,保存cpu上下文 vcpu_fd:供user_space使用 将kvm_vcpu加入到相应kvm结构中
5
vcpu执行过程 VMM是qemu中的一个进程,运行在用户态,而每个vcpu由VMM的一个线程负责执行
6
vcpu执行过程 kernel VM_RUN VCPU_RUN 在VMM中处理VM_EXIT消息 VM_EXIT 虚拟机调度阻塞
在kernel中处理VM_EXIT消息 获得Event信息 VCP获取退出原因 能否内部处理 是否终止vcpu执行 kernel 传递回VMM进程处理 终止vcpu线程
7
虚拟机内存管理 guest guest_phys_addr host_virtual_addr VMM host
host_phys_addr
8
缺页中断处理
9
同步的缺页中断处理
10
异步的缺页中断处理
11
缺页中断的整个过程 1.VM_EXIT 2.kvm_x86_ops.handle_exit(=vmx_handle_exit) (kvm_init-->kvm_arch_init-->assign kvm_x86_ops) 在vmx_handle_exit中: exit_reason=EXIT_REASON_EPT_VIOLATION 2.kvm_vmx_exit_handlers[handle_ept_violation](vcpu)(=handle_ept_violation) 3.kvm_mmu_page_fault vcpu.arch.mmu.page_fault(=tdp_page_fault) 4.tdp_page_fault
12
tdp_page_fault try_async_pf gfn_to_pfn_async
__gfn_to_pfn(find memslot) __gfn_to_pfn_memslot(find hva) hva_to_pfn 1.hva_to_pfn_fast(没有加锁?) __get_user_pages_fast 2.hva_to_pfn_slow
13
如何确定使用EPT还是shadow页表
14
reference 1. 2.
Similar presentations