VM-EXIT(EPT Violation)调用链

针对由EPT Violation引起的vm-exit分析其调用链(一直找到了分配页面的核心函数)

// linux v5.17.8

vcpu_run()
    vcpu_enter_guest()
        static_call(kvm_x86_handle_exit)(vcpu, exit_fastpath);struct kvm_x86_ops{ 
                    ...
                    int (*handle_exit)(struct kvm_vcpu *vcpu, enum exit_fastpath_completion exit_fastpath);
                    ...
                } // in /arch/x86/include/asm/kvm-x86-ops.h use marco KVM_X86_OP or KVM_X86_OP_NULL to generate static_call()
                  // in /arch/x86/kvm/x86.c  #define KVM_X86_OP NULL KVM_X86_OP
                  //     #define KVM_X86_OP(func)                                             \
                  //         DEFINE_STATIC_CALL_NULL(kvm_x86_##func, *(((struct kvm_x86_ops *)0)->func));
    // function relocate in arch/x86/kvm/vmx/vmx.c
    static struct kvm_x86_ops vmx_x86_ops __initdata = {
        .name = "kvm_intel",
        ...
        .handle_exit = vmx_handle_exit,
        ...                       |
    }                             |
    vmx_handle_exit() ← —— —— —— -
        __vmx_handle_exit()
            kvm_vmx_exit_handlers[exit_handler_index](vcpu)
            // table defined in /arch/x86/kvm/vmx/vmx.c
            static int (*kvm_vmx_exit_handlers[])(struct kvm_vcpu *vcpu) = { 
                ...
                [EXIT_REASON_EPT_VIOLATION] = handle_ept_violation,          
                ...                                    |
            }                                          | 
    /* exit caused by ept violation */                 |   
    handle_ept_violation() ← —— —— —— —— —— —— —— —— ——  
        kvm_mmu_page_fault()
            kvm_mmu_do_page_fault()
                kvm_tdp_page_fault()
                    direct_page_fault()
                        kvm_tdp_mmu_map()
                            alloc_tdp_mmu_page()
                                kvm_mmu_memory_cache_alloc()
                                    mmu_memory_cache_alloc_obj()
                                        __get_free_page()
                                            __get_free_pages()
                                                alloc_pages()
                                                    alloc_pages_node()
                                                        __alloc_pages_node()
                                                            __alloc_pages()
                                                                ...

Intel VT-x/EPT是英特尔虚拟化技术的一种扩展,它为处理器提供了硬件级别的虚拟化支持。 VT-x代表Virtualization Technology,它是一种硬件支持的虚拟化技术。在没有VT-x之前,虚拟化需要依赖于软件实现,因此效率较低。引入VT-x后,处理器能够直接支持虚拟化,从而提供更高的执行效率和更低的开销。VT-x能够支持将物理计算机分为多个虚拟机,并使其各自独立运行,互不干扰。虚拟机可以共享硬件资源,同时也能够在一台计算机上实现运行多个不同操作系统的功能。这种虚拟化技术广泛应用于云计算、服务器虚拟化等领域。 EPT代表Extended Page Tables,它是在VT-x的基础上的一种扩展,提供了更好的虚拟内存支持。在传统的虚拟化中,为了实现每个虚拟机拥有独立的内存空间而不互相干扰,需要利用软件在虚拟地址和物理地址之间进行转换,这会带来一定的性能开销。EPT通过引入一个额外的表格结构,将虚拟地址和物理地址的映射关系缓存在处理器的硬件内存管理单元中,从而实现了更快速的地址转换,提高了虚拟机的性能。 总之,Intel VT-x/EPT是一种基于硬件的虚拟化技术,它通过在处理器级别支持虚拟化,提供了更高效、更低开销的虚拟机运行环境。EPT则进一步优化了虚拟内存的管理,提高了虚拟机的性能。这些技术的应用使得虚拟化技术更加成熟和普及,并在云计算、服务器虚拟化等领域发挥着重要作用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值