kvm-qemu-libvirt-vdsm研究.ppt

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
kvm-qemu-libvirt-vdsm研究

KVM ? Qemu-kvm ? Libvirt ? VDSM Andrew Xu xuan@ opzoon confidential | 2011 opzoon RD 体系结构 KVM技术介绍 什么是KVM技术 KVM初始化 KVM API 内存管理 VirtIO Qemu-kvm 什么是Qemu-kvm Kvm和qemu的关系 Libvirt 什么是libvirt技术 Libvirt原理和代码示例 VDSM 什么是vdsm Vdsm的模块分析 参考资料 体系结构 什么是KVM技术 KVM 是作为内核模块实现的,因此 Linux 只要加载该模块就会成为一个hypervisor kvm.ko + kvm-kvm-intel.ko(只支持全虚拟化,必须有Intel VT或者AMD虚拟化技术支持才行) 设备模拟由qemu完成 (本身作为普通进程来运行) KVM 通过 /dev/kvm 字符设备文件 API接口供qemu使用 Ring0 Ring3 根模式 Hypervisor(host linux) Qemu 非根模式 Guest OS Kernel Guest OS User vmx_init() |-- kvm_init () | |-- kvm_arch_init () | | |-- kvm_mmu_module_init () | | |-- kvm_init_msr_list () ? 保存CPU特性信息,供ioctl查询 | | |-- kvm_x86_ops = xxx | |-- kvm_arch_hardware_setup () | | |-- kvm_x86_ops- hardware_setup | | | |-- 读取硬件信息 | | | |-- 检查是否支持某些虚拟化特性(比如是否支持ept,是否支持vpid) | | | |-- alloc_kvm_area() | | | | |-- for_each_possible_cpu(cpu) { | | | | |-- vmcs = alloc_vmcs_cpu(cpu) | | | | |-- per_cpu(vmxarea, cpu) = vmcs | | | | |-- } | |-- register_cpu_notifier(kvm_cpu_notifier) | |-- register_reboot_notifier(kvm_reboot_notifier) | |-- sysdev_class_register(kvm_sysdev_class) | |-- sysdev_register(kvm_sysdev) | |-- kvm_vcpu_cache = kmem_cache_create(kvm_vcpu, vcpu_size) | |-- misc_register(kvm_dev) ? KVM API | |-- KVM内部实现(模块初始化) System KVM_GET_API_VERSION KVM_CREATE_VM … … VM KVM_SET_MEMORY_REGION KVM_CREATE_IRQCHIP ? Creates an interrupt controller model KVM_GET_CLOCK/ KVM_SET_CLOCK ? Gets /Sets the current timestamp of kvmclock KVM_CREATE_VCPU … … VCPU KVM_GET_MSRS/ KVM_SET_MSRS KVM_GET_REGS/ KVM_SET_REGS KVM_RUN … … KVM API(by 3 ioctls) 影子页表 每个Guest的每个页表都有一个对应的“影子页表”存在 MMU中导入的是影子页表,但Guest OS以为这是它的页表 影子页表转换的是:GVA? HPA,由KVM维护 影子页表中每项的权限都比对应的Guest OS真实的页表要低 影子页表有“刷新延迟”机制,尽量少刷新 EPT(external page table) Guest OS的页表还是放在MMU中,它转换的是GVA?GPA EPT表转换的是GPA ? HPA,由KVM维护 所以每次内存操作理论上都要查两次页表 CPUID是它的“刷新延迟”机制 说明: GVA :Guest Virtual Address GPA:Guest Physi

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档