首页 > 其他分享 >48 最佳实践-性能最佳实践-Guest-Idle-Haltpoll

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

时间:2023-06-15 23:02:26浏览次数:42  
标签:ns halt vCPU 虚拟机 实践 最佳 guest poll Guest

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
    

标签:ns,halt,vCPU,虚拟机,实践,最佳,guest,poll,Guest
From: https://blog.51cto.com/u_237826/6495515

相关文章

  • Kong入门学习实践(4)负载均衡与正则路由
    最近在学习Kong网关,因此根据老习惯,我会将我的学习过程记录下来,一来体系化整理,二来作为笔记供将来翻看。由于我司会直接使用Kong企业版,学习过程中我会使用Kong开源版。本篇,我们学习快速配置一个最常见的基本功能:负载均衡与正则路由。关于负载均衡所谓负载均衡,就是通过负载均衡算......
  • 12篇CVPR 2023 最佳论文候选
    前言 CVPR2023开幕在即,官方公布了12篇最佳论文候选,快来看看都是什么内容吧!本文转载自我爱计算机视觉仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。CV各大方向专栏与各个部署框架最全教程......
  • 异步编程 asynico、async、await最佳实践
    使用异步函数:Asynico是为了处理异步操作而设计的,因此使用异步函数而不是同步函数是最佳实践之一。使用async关键字将函数定义为异步函数,并使用await关键字来等待异步操作的结果。示例:importasyncioasyncdefmy_async_function():#异步操作awaitasyncio.sleep(1)......
  • 批量生成,本地推理,人工智能声音克隆框架PaddleSpeech本地批量克隆实践(Python3.10)
    云端炼丹固然是极好的,但不能否认的是,成本要比本地高得多,同时考虑到深度学习的训练相对于推理来说成本也更高,这主要是因为它需要大量的数据、计算资源和时间等资源,并且对超参数的调整也要求较高,更适合在云端进行。在推理阶段,模型的权重和参数不再调整。相反,模型根据输入数据的特征......
  • 解析Spring内置作用域及其在实践中的应用
    摘要:本文详细解析了Spring的内置作用域,包括Singleton、Prototype、Request、Session、Application和WebSocket作用域,并通过实例讲解了它们在实际开发中的应用。本文分享自华为云社区《Spring高手之路4——深度解析Spring内置作用域及其在实践中的应用》,作者:砖业洋__。本文详细解析......
  • 微控制器实时操作系统实践5选择IDE
    选择IDE集成开发环境(IDEintegrateddevelopmentenvironment)有能力极大地影响开发。集成开发环境被设计成具有较小的学习曲线,并且通常提供一种简单的方法来从现有的驱动程序和中间件建立解决方案。在本章中,我们将讨论如何选择IDE,看看不同类型的IDE,并选择一个IDE来创建你在本书......
  • TensorFlow实践——Softmax Regression
    SoftmaxRegression是Logistic回归在多分类上的推广,对于Logistic回归以及SoftmaxRegression的详细介绍可以参见:简单易学的机器学习算法——Logistic回归利用Theano理解深度学习——LogisticRegression深度学习算法原理——SoftmaxRegression下面的代码是利用TensorFlow基本API实......
  • Kong入门学习实践(3)路由转发
    最近在学习Kong网关,因此根据老习惯,我会将我的学习过程记录下来,一来体系化整理,二来作为笔记供将来翻看。由于我司会直接使用Kong企业版,学习过程中我会使用Kong开源版。本篇,我们学习快速配置一个最常见的基本功能:路由转发。关于路由转发路由转发是Nginx等代理软件最常见的使用场......
  • CodeQL学习实践
    CodeQL简介CodeQL是一个非商业的开源代码自动化审计工具,Github收购后,开源了CodeQL的规则部分,所以收集了大量的规则,安全工程师可以依赖CodeQL的规则实现对多种开发语言项目的代码审计工作CodeQL原理CodeQL将代码转化成可查询数据库,代码被视为数据,漏洞、bug、错误,被建模为可针对......
  • Android中启动Activity的最佳写法
    问题思考在实际工作场景中,大家各个模块都是有交互的,那么就存在各个模块Activity的相互跳转。假设小A负责一个ActivityA,所有跳转到ActivityA的请求都需要携带String类型的参数resaon,那么每一个对接跳转到ActivityA的业务,小A都要说一遍:“跳转过来需要带一个参数reason”,很明显这种......