48 最佳实践-性能最佳实践-Guest-Idle-Haltpoll

文章目录

      • 48 最佳实践-性能最佳实践-Guest-Idle-Haltpoll
        • 48.1 概述
        • 48.2 操作指导

48 最佳实践-性能最佳实践-Guest-Idle-Haltpoll

48.1 概述

为了保证公平性及降低功耗,当虚拟机vCPU空闲时,虚拟机将执行WFx/HLT指令退出到宿主机中,并触发上下文切换。宿主机将决定在物理CPU上调度其他进程或vCPU,或进入节能模式。但是,虚拟机和宿主机之间的切换、额外的上下文切换以及唤醒IPI中断开销较大,在频繁睡眠和唤醒的业务中该问题尤为突出。Guest-Idle-Haltpoll技术是指当虚拟机vCPU空闲时,不立刻执行WFx/HLT并发生VM-exit,而是在虚拟机内部轮询(polling)一段时间。在该时间段内,其他共享LLC的vCPU在该vCPU上的任务被唤醒不需要发送IPI中断,减少了发送和接收处理IPI的开销及虚拟机陷出(VM-exit)的开销,从而降低任务唤醒的时延。

img 说明: 由于vCPU在虚拟机内部执行idle-haltpoll会增加vCPU在宿主机的CPU开销,所以开启该特性建议vCPU在宿主机独占物理核。

48.2 操作指导

Guest-Idle-Haltpoll特性默认关闭,这里给出开启该特性的操作指导。

  1. 使能Guest-Idle-Haltpoll特性。

    • 若宿主机处理器架构为x86,可以在宿主机的虚拟机XML中配置“hint-dedicated”使能该特性,通过虚拟机XML配置将vCPU独占物理核的状态传递给虚拟机。vCPU独占物理核的状态由宿主机保证。

      <domain type='kvm'>
       ...
       <features>
         <kvm>
           ...
           <hint-dedicated state='on'/>
         </kvm>
       </features>
        ...
      </domain>
      

      或者在虚拟机内核启动参数中配置“cpuidle_haltpoll.force=Y”强制开启,该方法不依赖宿主机配置vCPU独占物理核。

      cpuidle_haltpoll.force=Y
      
    • 若宿主机处理器架构为AArch64,只支持在虚拟机内核启动参数中配置“cpuidle_haltpoll.force=Y haltpoll.enable=Y”的方式使能该特性。

      cpuidle_haltpoll.force=Y haltpoll.enable=Y
      
  2. 确认Guest-Idle-Haltpoll特性是否生效。在虚拟机中执行如下命令,若返回haltpoll,说明特性已经生效。

    # cat /sys/devices/system/cpu/cpuidle/current_driver
    
  3. (可选)配置Guest-Idle-Haltpoll参数。 虚拟机的/sys/module/haltpoll/parameters/路径下提供了如下配置文件,用于调整配置参数,用户可以根据业务特点选择调整。

    • guest_halt_poll_ns: 全局参数,指vCPU空闲后polling的最大时长,默认值为200000(单位ns)。
    • guest_halt_poll_shrink: 当唤醒事件发生在全局guest_halt_poll_ns时间之后,用于收缩当前vCPU guest_halt_poll_ns的除数因子,默认值为2。
    • guest_halt_poll_grow: 当唤醒事件发生在当前vCPU guest_halt_poll_ns之后且在全局guest_halt_poll_ns之前,用于扩展当前vCPU guest_halt_poll_ns的乘数因子,默认值为2。
    • guest_halt_poll_grow_start: 当系统空闲时,每个vCPU的guest_halt_poll_ns最终会达到零。该参数用于设置当前vCPU guest_halt_poll_ns的初始值,以便vCPU polling时长的收缩和扩展。默认值为50000(单位ns)。
    • guest_halt_poll_allow_shrink: 允许每个vCPU guest_halt_poll_ns收缩的开关,默认值是Y(Y表示允许收缩,N表示禁止收缩)。

    可以使用root权限,参考如下命令修改参数值。其中 value 表示需要设置的参数值, configFile 为对应的配置文件。

    # echo value > /sys/module/haltpoll/parameters/configFile
    

    例如设置全局guest_halt_poll_ns为200000ns的命令如下:

    # echo 200000 > /sys/module/haltpoll/parameters/guest_halt_poll_ns
    

点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!

48 最佳实践-性能最佳实践-Guest-Idle-Haltpoll_第1张图片

你可能感兴趣的:(KVM,云计算,开源软件,运维,linux)