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

IPI虚拟化(IPI Virtualization)之一(基本原理)

2023-06-02 08:45:10
236
0

一、    什么是IPI Virtualization

       当前,在虚拟机内部发送IPI中断,是通过模拟写local apic的ICR寄存器实现的,后端截获这个写并模拟相关的中断。这种方式会导致vCPU产生vm-exit,vm-exit的开销会影响性能,特别是对IPI敏感的任务。

       IPI virtualization是VT-x的一个新特性,目标是消除IPI场景下vCPU的VM-exits。使能了IPI virtualization,处理器模拟以下类型的APIC寄存器写而不会产生VM-exits:

  • Memory-mapped ICR writes
  • MSR-mapped ICR writes
  • SENDUIPI execution

       Posted Interrupt解决的是接收端vCPU退出的问题,而IPI virtualization解决的是发送端vCPU退出的问题。

       IPI virtualization is a new VT-x feature, targeting to eliminate VM-exits on source vCPUs when issuing unicast, physical-addressing IPIs.

       从实际的测试结果来看,multicast IPIs会产生APIC write类型的VM-exits(guest使用x2apic模式),与红色部分一致。

二、    IPI Virtualization实现原理

(一)         VMCS与相关数据结构变化

       IPI virtualization特性,在VMCS中引入了两个主要的变化:新的VM-execution contral与新的数据结构(PID-pointer table)

       如下图所示,展示了vmcs相关数据结构的变化:

1.     VM-executon的变化

       定义tertiary processor-based VM-execution controls的bit[4]为IPI virtualization使能位。

2.     PID-Pointer Table

       当VM-execution control中“IPI virtualization”为1时,处理器使用PID-pointer Table进行IPI虚拟化。

       在此table中,第一个entry包含一个PID的物理地址(64 bits)。

  • 这个地址必须64-byes对齐。
  • bit[0]为valid位;bit[5:1]为reserved,必须为0。
  • PID-pointer table最多有216–1 entries
  • PID-pointer table中的索引,对应vCPU的APIC ID

VMM通过VMCS中的以下域配置PID-pointer table:

  • PID-pointer table address: PID-pointer table的物理地址,64位。VMCS的编码为00002042H(在64位模式下为整个64位,在32传统模式下为低32位), 00002043H(高32位)。示例:

                            PID_POINTER_TABLE = 0x00002042,

                            vmcs_write64(PID_POINTER_TABLE, __pa(kvm_vmx->pid_table)); 

  • Last PID-pointer index: 16位,VMCS编码为00000008H,指定了PID-pointer table中最后一个entry的索引。

注:只有在支持IPI虚拟化的处理器上才存在以上数据结构。

 

(二)         IPI Virtualization的流程

              IPI虚拟化,用到两个关键的数据:8位的虚拟中断向量,用V表示 32位的虚拟APIC ID 用T表示。

              以下流程是由硬件自动完成,软件不参与。

             

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

IPI虚拟化(IPI Virtualization)之一(基本原理)

2023-06-02 08:45:10
236
0

一、    什么是IPI Virtualization

       当前,在虚拟机内部发送IPI中断,是通过模拟写local apic的ICR寄存器实现的,后端截获这个写并模拟相关的中断。这种方式会导致vCPU产生vm-exit,vm-exit的开销会影响性能,特别是对IPI敏感的任务。

       IPI virtualization是VT-x的一个新特性,目标是消除IPI场景下vCPU的VM-exits。使能了IPI virtualization,处理器模拟以下类型的APIC寄存器写而不会产生VM-exits:

  • Memory-mapped ICR writes
  • MSR-mapped ICR writes
  • SENDUIPI execution

       Posted Interrupt解决的是接收端vCPU退出的问题,而IPI virtualization解决的是发送端vCPU退出的问题。

       IPI virtualization is a new VT-x feature, targeting to eliminate VM-exits on source vCPUs when issuing unicast, physical-addressing IPIs.

       从实际的测试结果来看,multicast IPIs会产生APIC write类型的VM-exits(guest使用x2apic模式),与红色部分一致。

二、    IPI Virtualization实现原理

(一)         VMCS与相关数据结构变化

       IPI virtualization特性,在VMCS中引入了两个主要的变化:新的VM-execution contral与新的数据结构(PID-pointer table)

       如下图所示,展示了vmcs相关数据结构的变化:

1.     VM-executon的变化

       定义tertiary processor-based VM-execution controls的bit[4]为IPI virtualization使能位。

2.     PID-Pointer Table

       当VM-execution control中“IPI virtualization”为1时,处理器使用PID-pointer Table进行IPI虚拟化。

       在此table中,第一个entry包含一个PID的物理地址(64 bits)。

  • 这个地址必须64-byes对齐。
  • bit[0]为valid位;bit[5:1]为reserved,必须为0。
  • PID-pointer table最多有216–1 entries
  • PID-pointer table中的索引,对应vCPU的APIC ID

VMM通过VMCS中的以下域配置PID-pointer table:

  • PID-pointer table address: PID-pointer table的物理地址,64位。VMCS的编码为00002042H(在64位模式下为整个64位,在32传统模式下为低32位), 00002043H(高32位)。示例:

                            PID_POINTER_TABLE = 0x00002042,

                            vmcs_write64(PID_POINTER_TABLE, __pa(kvm_vmx->pid_table)); 

  • Last PID-pointer index: 16位,VMCS编码为00000008H,指定了PID-pointer table中最后一个entry的索引。

注:只有在支持IPI虚拟化的处理器上才存在以上数据结构。

 

(二)         IPI Virtualization的流程

              IPI虚拟化,用到两个关键的数据:8位的虚拟中断向量,用V表示 32位的虚拟APIC ID 用T表示。

              以下流程是由硬件自动完成,软件不参与。

             

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