zoukankan      html  css  js  c++  java
  • kvm搭建完成了,那么问题来了,到底是什么原理

    kvm中到底是怎么模拟的CPU和内存?

    收到了大量的

    这里有一个裸的调用kvm接口的实例,超赞:

     使用kvm的API来实现Emulator Demo,同样赞:

     //-----2017.12.17  打开tracepoint,这是研究kvm的好方法:

    qemu-system-x86-10102 [001] d... 13485.390144: kvm_entry: vcpu 0
     qemu-system-x86-10102 [001] .N.. 13485.393300: kvm_exit: reason EXTERNAL_INTERRUPT rip 0x4009b2 info 0 800000ef
     qemu-system-x86-10102 [001] d... 13485.393301: kvm_fpu: unload
     qemu-system-x86-10102 [001] .... 13485.401393: kvm_ple_window: vcpu 0: ple_window 4096 (shrink 4096)
     qemu-system-x86-10102 [001] .... 13485.401398: kvm_fpu: load
     qemu-system-x86-10102 [001] .... 13485.401399: kvm_apic_accept_irq: apicid 0 vec 239 (Fixed|edge)
     qemu-system-x86-10102 [001] .... 13485.401400: kvm_inj_virq: irq 239
     qemu-system-x86-10102 [001] d... 13485.401401: kvm_entry: vcpu 0
     qemu-system-x86-10102 [001] .... 13485.401419: kvm_eoi: apicid 0 vector 239
     qemu-system-x86-10102 [001] .... 13485.401419: kvm_pv_eoi: apicid 0 vector 239
     qemu-system-x86-10102 [001] .... 13485.401420: kvm_exit: reason MSR_WRITE rip 0xffffffff81064508 info 0 0
     qemu-system-x86-10102 [001] .... 13485.401421: kvm_apic: apic_write APIC_TMICT = 0xafd2
     qemu-system-x86-10102 [001] .... 13485.401422: kvm_msr: msr_write 838 = 0xafd2
     qemu-system-x86-10102 [001] d... 13485.401422: kvm_entry: vcpu 0
     qemu-system-x86-10102 [001] .... 13485.402142: kvm_exit: reason EXTERNAL_INTERRUPT rip 0x4009b2 info 0 800000ef
     qemu-system-x86-10102 [001] .... 13485.402142: kvm_apic_accept_irq: apicid 0 vec 239 (Fixed|edge)
     qemu-system-x86-10102 [001] .... 13485.402143: kvm_inj_virq: irq 239
     qemu-system-x86-10102 [001] d... 13485.402143: kvm_entry: vcpu 0
     qemu-system-x86-10102 [001] .... 13485.402146: kvm_eoi: apicid 0 vector 239
     qemu-system-x86-10102 [001] .... 13485.402146: kvm_pv_eoi: apicid 0 vector 239
     qemu-system-x86-10102 [001] .... 13485.402146: kvm_exit: reason MSR_WRITE rip 0xffffffff81064508 info 0 0
     qemu-system-x86-10102 [001] .... 13485.402146: kvm_apic: apic_write APIC_TMICT = 0x3cee0
     qemu-system-x86-10102 [001] .... 13485.402146: kvm_msr: msr_write 838 = 0x3cee0
     qemu-system-x86-10102 [001] d... 13485.402147: kvm_entry: vcpu 0
     qemu-system-x86-10102 [001] .N.. 13485.403339: kvm_exit: reason EXTERNAL_INTERRUPT rip 0x4009b2 info 0 800000ef
     qemu-system-x86-10102 [001] d... 13485.403341: kvm_fpu: unload
     qemu-system-x86-10102 [001] .... 13485.403521: kvm_ple_window: vcpu 0: ple_window 4096 (shrink 4096)
     qemu-system-x86-10102 [001] .... 13485.403523: kvm_fpu: load
     qemu-system-x86-10102 [001] d... 13485.403523: kvm_entry: vcpu 0
     qemu-system-x86-10102 [001] .N.. 13485.404571: kvm_exit: reason EXTERNAL_INTERRUPT rip 0x4009b2 info 0 800000ef
     qemu-system-x86-10102 [001] d... 13485.404573: kvm_fpu: unload
     qemu-system-x86-10102 [001] .... 13485.406671: kvm_ple_window: vcpu 0: ple_window 4096 (shrink 4096)
     qemu-system-x86-10102 [001] .... 13485.406676: kvm_fpu: load
     qemu-system-x86-10102 [001] .... 13485.406677: kvm_apic_accept_irq: apicid 0 vec 239 (Fixed|edge)
     qemu-system-x86-10102 [001] .... 13485.406679: kvm_inj_virq: irq 239
     qemu-system-x86-10102 [001] d... 13485.406680: kvm_entry: vcpu 0
     qemu-system-x86-10102 [001] .... 13485.406702: kvm_eoi: apicid 0 vector 239
     qemu-system-x86-10102 [001] .... 13485.406703: kvm_pv_eoi: apicid 0 vector 239
     qemu-system-x86-10102 [001] .... 13485.406704: kvm_exit: reason MSR_WRITE rip 0xffffffff81064508 info 0 0
     qemu-system-x86-10102 [001] .... 13485.406706: kvm_apic: apic_write APIC_TMICT = 0x34720
     qemu-sys
    

     神秘的kvm,服务器端直接运行在,guest按理说也是要有中断的:

       39839 __apic_accept_irq ([kvm])
    	           3aa20 kvm_apic_local_deliver ([kvm])
    	           3ac7d kvm_inject_apic_timer_irqs ([kvm])
    	           3824e kvm_inject_pending_timer_irqs ([kvm])
    	           1ebfe kvm_arch_vcpu_ioctl_run ([kvm])
    	            610d kvm_vcpu_ioctl ([kvm])
    	          4200ff do_vfs_ioctl ([kernel.kallsyms])
    	          420369 sys_ioctl ([kernel.kallsyms])
    	          a244f2 entry_SYSCALL_64_fastpath ([kernel.kallsyms])
    

      关键函数是

    kvm是如何模拟时钟中断的?

    kvm_create_pit   create_pit_timer

    kvm_create_

    有专门的一章,是讨论中断的虚拟化;

    还要个超有意思的函数是:kvm_msr事件,

  • 相关阅读:
    TC Asia Competition
    Codeforces 258 Div2
    斯坦纳树
    <算法竞赛入门经典> 第8章 贪心+递归+分治总结
    UVALive 6602 Counting Lattice Squares
    UVALive 6609 Minimal Subarray Length (查找+构建排序数组)
    vue中路由以及动态路由跳转
    sublime安装
    js数组转对象
    如何将变量做为一个对象的key,push进一个数组?
  • 原文地址:https://www.cnblogs.com/honpey/p/8060248.html
Copyright © 2011-2022 走看看