searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

IPI虚拟化(IPI Virtualization)之二(如何使用)

2023-06-02 08:45:13
71
0

一、    如何检测是否支持IPI Virtualization

                    如果CPU支持IPI虚拟化,则会设置IA32_VMX_PROCBASED_CTLS3 MSR(492H)的bit4,通过RDMSR读取这个MSR的值,并检测bit4是否为1来判断,为1则支持。

              示例:    

static void init_vmx_tertiary_capabilities(u16 cpu_index)
{
    struct extra_cpuinfo_x86 *e = &extra_cpu_data(cpu_index); 
    u32 low, high; 

    /* All 64 bits of tertiary controls MSR are allowed-1 settings. */ 
    rdmsr_safe(MSR_IA32_VMX_PROCBASED_CTLS3, &low, &high); 
    e->vmx_tertiary_capability[TERTIARY_CTLS_LOW] = low; 
    e->vmx_tertiary_capability[TERTIARY_CTLS_HIGH] = high; 
}

   

二、    IPI Virtualization如何使用

       在IPI虚拟化的实现代码中,增加了一个kmv-intel.ko的模块参数enable_ipiv,此参数默认为true(即在kvm层面使能ipi虚拟化,最终是否使用此功能还要看cpu是否支持)。

      

       在使能了IPI虚拟化的场景下,会设置VMCS中的MSR bitmap, 设置虚拟机读写ICR不退出。

       同时在初始化VMCS时,也会初始化两个重要的数据结构PID_POINTER_TABLE, LAST_PID_POINTER_INDEX。

0条评论
0 / 1000
王****波
6文章数
0粉丝数
王****波
6 文章 | 0 粉丝
原创

IPI虚拟化(IPI Virtualization)之二(如何使用)

2023-06-02 08:45:13
71
0

一、    如何检测是否支持IPI Virtualization

                    如果CPU支持IPI虚拟化,则会设置IA32_VMX_PROCBASED_CTLS3 MSR(492H)的bit4,通过RDMSR读取这个MSR的值,并检测bit4是否为1来判断,为1则支持。

              示例:    

static void init_vmx_tertiary_capabilities(u16 cpu_index)
{
    struct extra_cpuinfo_x86 *e = &extra_cpu_data(cpu_index); 
    u32 low, high; 

    /* All 64 bits of tertiary controls MSR are allowed-1 settings. */ 
    rdmsr_safe(MSR_IA32_VMX_PROCBASED_CTLS3, &low, &high); 
    e->vmx_tertiary_capability[TERTIARY_CTLS_LOW] = low; 
    e->vmx_tertiary_capability[TERTIARY_CTLS_HIGH] = high; 
}

   

二、    IPI Virtualization如何使用

       在IPI虚拟化的实现代码中,增加了一个kmv-intel.ko的模块参数enable_ipiv,此参数默认为true(即在kvm层面使能ipi虚拟化,最终是否使用此功能还要看cpu是否支持)。

      

       在使能了IPI虚拟化的场景下,会设置VMCS中的MSR bitmap, 设置虚拟机读写ICR不退出。

       同时在初始化VMCS时,也会初始化两个重要的数据结构PID_POINTER_TABLE, LAST_PID_POINTER_INDEX。

文章来自个人专栏
知识总结
6 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0