首页 > 其他分享 >如何提高虚拟机性能?利用这个特性来实现!

如何提高虚拟机性能?利用这个特性来实现!

时间:2023-06-22 15:31:35浏览次数:44  
标签:-- 虚拟机 绑定 特性 CPU 线程 性能 核且

第一章 什么是绑核

线程绑核是指将线程绑定到特定的CPU核心上执行,而不允许线程在不同核心之间切换执行。这种操作可以有效地减少操作系统的上下文切换和负载均衡的开销,从而提高程序的执行效率。没有绑核的线程则可以在多个CPU核心上随意切换执行。这虽然可以让操作系统更加灵活地分配CPU资源,并提高系统的负载均衡性,但也会增加上下文切换的开销和CPU缓存的失效率。因此,线程绑核和没有绑核的区别主要在于执行效率和系统负载均衡的优化。需要根据具体的应用场景进行选择。

第二章 虚拟机绑核类型

2.1 不绑核

不绑核的情况下,虚拟机的线程在当前CPU资源池中按需分配CPU资源。此时一个虚拟机的线程,一方面要进入线程队列中等待分配时间片,而该线程队列中不仅有自身虚拟机的线程,还有其他虚拟机的线程,因此存在资源竞争。另一方面操作系统还要决策将该任务调度分配到哪个物理CPU上运行,然后要将线程的上下文切换到该CPU核中,存在切换的时间。但是由于这种分配方式较为灵活,不会预留CPU而浪费资源,因此对于CPU资源要求和处理延迟要求不高的场景使用。

2.2 绑核

绑核又分为三个方式,分别是绑核不独占线程绑核且独占核和绑核且独CPU。

2.2.1 绑核不独占

几乎不使用。相比于不绑核的情况只是将从CPU池中获取CPU资源变成了从指定的CPU核中获取CPU资源。此时,虚拟机的线程同样需要进入线程队列中等待分配时间片,线程队列中也同样可能存在其他虚拟机的线程,只是分配到的CPU核是固定的,减少了线程在不同的CPU核进行上下文切换的时间。虽然也存在和其他虚拟机的资源竞争,但是如果该CPU核上其他虚拟机的线程少,那么资源竞争就没有不绑核那么剧烈。由于这种情况对于处理延迟的提升不明显。

2.2.2 绑核且独占核

虚拟机绑核且独占核是指将一个或多个物理核心分配给一个虚拟机,并保证虚拟机是唯一能够使用这些核心的。这意味着在虚拟机运行期间,这些核心不会被分配给其他虚拟机或主机进程使用。这种方式通常是最常用的,即将虚拟机cpu与物理机cpu核进行绑定。绑核且独占核通常可以使用以下命令查看:

virsh vcpuinfo <id>
VCPU:           0
CPU:            3        
State:          running        
CPU time:       198781.4s        
CPU Affinity:   0x8
VCPU:           1        
CPU:            2        
State:          running        
CPU time:       198781.3s        
CPU Affinity:   0x4
  • VCPU编号:表示虚拟机中的第几个虚拟CPU,从0开始。
  • CPU编号:表示虚拟CPU当前绑定的物理CPU编号。
  • 状态:表示虚拟CPU的运行状态,包括running(运行中)blocked(阻塞中)等。
  • CPU时间:表示虚拟CPU从启动到现在运行的总时间。
  • CPU Affinity:表示虚拟CPU绑定的物理CPU核心,以16进制的形式表示。

如果是非绑核的虚拟机,则输出以下内容

VCPU:           0
CPU:            -1
State:          running
CPU time:       28.2s
CPU Affinity:   0x0

或者使用vcpupin来确认,以下这种输出就是绑核虚拟机。

[root@kvm-host ~]# virsh vcpupin vm1
VCPU:           CPU Affinity
------------------------------------
0:              0-3
1:              0-3
2:              0-3
3:              0-3

还可以通过查看xml文件来确认虚拟机是否绑核

<domain type='kvm'>
  <name>examplevm</name>
  <vcpu placement='static'>2</vcpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='1'/>
    <vcpupin vcpu='1' cpuset='2'/>
  </cputune>
  ...
</domain>

<vcpu>标签定义了虚拟机的虚拟CPU数量,这里设置为2。<cputune>标签下面的两个<vcpupin>标签定义了虚拟机中的两个vCPU分别绑定在哪个CPU核心上,这里分别绑定在核心1和核心2上。

2.2.3 绑核且独CPU

绑核且独占 CPU 是指将整个物理 CPU 分配给一个虚拟机,并保证该虚拟机是唯一能够使用该 CPU 的。这意味着在虚拟机运行期间,该 CPU 不会被分配给其他虚拟机或主机进程使用。因此,两者的区别在于资源分配的粒度不同。虚拟机绑核且独占核是将核心级别的资源分配给虚拟机,而绑核且独占 CPU 则是将整个 CPU 分配给虚拟机。这意味着在绑定和独占 CPU 的情况下,虚拟机将获得更多的计算资源,但是这也意味着在虚拟机未使用 CPU 时,该 CPU 不能用于主机上的其他进程。在绑定和独占核的情况下,虚拟机只获得了核心级别的资源,因此,即使虚拟机未使用该核心时,该核心也可以用于主机上的其他进程。

第三章 如何创建绑核虚拟机

3.1 FS创建绑核虚拟机

在FuionSphere OpenStack中,创建规格时可以设置绑核。在该解决方案中,绑核虚拟机核非绑核虚拟机不能共numa部署,即某个numa部署了绑核虚拟机,再创建非绑核虚拟机就会失败。

如何提高虚拟机性能?利用这个特性来实现!_上下文切换

3.2 kvm创建绑核虚拟机

1、使用virt-install命令创建虚拟机时,可以使用--vcpus--cpu-set选项来指定虚拟机的CPU数量和绑定。例如:

virt-install --name vm_name --vcpus 2 --cpu host-passthrough --cpu-set 0,1 ...
virt-install --name vm_name --vcpus 2 --cpu host-passthrough --cpu-set 0,1 ...

其中,vm_name是虚拟机的名称,2是虚拟机的CPU数量,--cpu host-passthrough指定使用宿主机的CPU特性,--cpu-set 0,1指定将虚拟机绑定到CPU核心0和1上。

或者,您可以在创建虚拟机时在XML配置文件中指定CPU绑定。在<vcpu>标签下添加以下行:

<cputune>
  <vcpupin vcpu='0' cpuset='0'/>
  <vcpupin vcpu='1' cpuset='1'/>
</cputune>

其中,vcpu指定虚拟CPU的编号,cpuset指定要绑定的CPU核心。


如果我的文章对你有帮助,欢迎关注我的同名公众号~

标签:--,虚拟机,绑定,特性,CPU,线程,性能,核且
From: https://blog.51cto.com/xiaowangzai/6534926

相关文章

  • 代码质量与代码优化:如何优化代码性能和代码可读性
    目录代码质量与代码优化:如何优化代码性能和代码可读性背景介绍在现代软件开发中,代码质量是非常重要的一个方面。一个好的代码不仅可以更快地完成开发任务,还可以更好地维护和扩展。为了提高代码质量,我们需要对代码进行优化,以便更好地实现我们的目标和需求。代码优化包括优化代......
  • POSTGRESQL 提高POSTGRESQL性能的一些习惯 (1)
    PostgreSQL是一个很有意思的数据库,在使用中有一些习惯可以在同等的硬件下,更加有效的使用硬件提供的资源,让管理和使用POSTGRESQL获得更多的性能。下面就说说一些使用POSTGRESQL的习惯。1 是否需要降低文件的数量POSTGRESQL的文件很多,这里指的文件的数量,主要指两方面的的文件,数......
  • POSTGRESQL 提高POSTGRESQL性能的一些习惯 (3)
    随着问问题的同学越来越多,公众号内部私信回答问题已经很困难了,所以建立了一个群,关于各种数据库的问题都可以,目前主要是POSTGRESQL,MYSQL,MONGODB,POLARDB,REDIS,SQLSERVER等,期待你的加入这个系列写到第三期了,实际上POSTGRESQL的优化和一个核心之一,这就是VACUUM,一个弄不清vac......
  • 史上最全Android性能优化方案解析
    Android中的性能优分为以下几个方面:布局优化网络优化安装包优化内存优化卡顿优化启动优化……一.布局优化布局优化的本质就是减少View的层级。常见的布局优化方案如下:在LinearLayout和RelativeLayout都可以完成布局的情况下优先选择LinearLayout,可以减少View的层级,但是注意相同组......
  • 【性能优化】大厂OOM优化和监控方案
    一、前言随着项目不断壮大,OOM(OutOfMemory)成为奔溃统计平台上的疑难杂症之一,大部分业务开发人员对于线上OOM问题一般都是暂不处理,一方面是因为OOM问题没有足够的log,无法在短期内分析解决,另一方面可能是忙于业务迭代、身心疲惫,没有精力去研究OOM的解决方案。这篇文章将以线上OOM问......
  • Flutter性能优化实践
    作者:王猛猛前言Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的,可以用一套代码同时构建Android和iOS应用,性能可以达到原生应用一......
  • 为什么Android面试总是被问到性能优化问题?
    随着Android开发越来越规范,国内工程师的素质,以及用户对产品的要求也越来越高。这也间接导致我们对研发项目的质量要求到了近乎苛刻的地步,内存优化、UI卡顿优化、App崩溃监控等性能调优也逐渐成了人手必备的技能。工作之余,难免让我们感慨学无止境,以及Android开发也是水深不......
  • 虚拟机(linux)环境搭建
    软件安装准备1搜索VMware并下载2.以管理员身份启动,正常安装。注意安装完选择许可证,密钥使用:JU090-6039P-08409-8J0QH-2YR7F即可3.使用此网址:Indexof/ubuntu-releases/16.04/(zju.edu.cn)。下载desktop-iso版本软件使用4.新建自定义虚拟机,注意linux系统,处理器配置选为2,2......
  • LoadRunner通过SiteScope监控MySQL的性能
    步骤:安装SiteScope下载Java版的MySQL驱动,下载地址:http://www.mysql.com/downloads/connector/j/下载成功后,把解压缩的mysql-connector-java-5.1.14-bin.jar文件放入:C:\SiteScope\java\lib\ext 以及 C:\SiteScope\java64\lib\ext目录下。重启系统.进入SiteSc......
  • 近期高性能计算报班培训学习总结
    工作以来,我鲜有时间停下来做一些总结,偶有所得也是记录在公司内部的文档里。我细细想来,发现原因主要是这份工作实在是有些螺丝钉了,脱离了公司的环境就很难成立。去年10月底以来,我开始报班培训C++,为什么要这样做呢?因为我发现大厂的算法工程师很容易变成“螺丝钉”,数据、训练和部署......