Presentation is loading. Please wait.

Presentation is loading. Please wait.

Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.

Similar presentations


Presentation on theme: "Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩."— Presentation transcript:

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.


Download ppt "Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩."

Similar presentations


Ads by Google