首页 > 其他分享 >如何提升虚拟机性能?除了绑核还有它可以!

如何提升虚拟机性能?除了绑核还有它可以!

时间:2023-06-22 16:32:00浏览次数:34  
标签:kB 大页 -- 虚拟机 内存 使用 性能 提升

第一章 大页内存与小页内存

1.1 小页内存

在Linux系统中,默认情况下,内存管理器将物理内存划分为小页(4KB)或大页(2MB或1GB)的大小。Linux内核会根据需要分配和释放内存,以确保系统的稳定性和性能。

在默认情况下,Linux系统会使用小页内存。小页内存管理器能够更好地处理内存碎片,但是在处理大量内存时,可能会导致性能下降。

1.2 大页内存

大页内存是一种更高效的内存分配方式,它将物理内存划分为更大的内存页,通常是2MB或1GB。相比之下,小页内存通常是4KB。

大页内存可以提高系统的性能,因为它减少了内存管理器的负担。大页内存还可以减少缺页中断的数量,从而提高系统的响应速度。

但是,使用大页内存需要更多的物理内存,并且在处理小量的内存时可能会浪费内存。此外,大页内存的分配和释放需要更长的时间,因为它们的大小更大。

1.3 举个栗子

举个例子,假设系统需要为一个应用程序分配1GB内存,如果使用小页内存,系统将需要分配262144个4KB页。在这种情况下,内存管理器将需要处理262144个页表,这会导致CPU的负载增加,并且可能会导致较高的延迟。

相比之下,使用大页内存可以减少系统的页表数量,从而降低内存管理器的负担。例如,如果使用2MB的大页内存,系统将只需要分配512个页表,这将显著减少CPU的负载和响应时间。

另外,小页内存还可能会导致内存碎片问题。当系统分配和释放大量小页内存时,可能会产生很多碎片,这会使内存管理器更难以找到连续的可用内存块,从而降低性能。

因此,在大量使用内存时,使用大页内存可以提高系统的性能和响应速度。

第二章 如何配置虚拟机使用大页内存

2.1 Fusionsphere OpenStack中配置

1、如果想在Fusionsphere中使用大页内存,需要在CPS中进行配置(https://方向代理地址:8890)
2、选择“配置 > 内核参数”,在配置内核参数页面开启自动大页内存并设置大页内存的大小即可(一般会设置为1024M即1G),开启后需要重启主机生效。

如何提升虚拟机性能?除了绑核还有它可以!_内存管理


重启后可查看内核参数主机组的生效情况,也可以登陆某台主机,使用以下方式查看:

查看/proc/meminfo文件:


cat /proc/meminfo


  • 在输出中查找“HugePages_Total”和“Hugepagesize”字段。如果这些字段存在,则表示系统开启了大页内存,并且“Hugepagesize”字段将显示大页的大小。
  • 例如,以下是包含“HugePages_Total”和“Hugepagesize”字段的示例输出:


MemTotal:       131881008 kB
MemFree:        115646736 kB
MemAvailable:   124197000 kB
Buffers:           32000 kB
Cached:          8918052 kB
SwapCached:            0 kB
Active:          9229648 kB
Inactive:        4845996 kB
Active(anon):    4443312 kB
Inactive(anon):  1104812 kB
Active(file):    4786336 kB
Inactive(file):  3741184 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       8388604 kB
SwapFree:        8388604 kB
Dirty:               496 kB
Writeback:             0 kB
AnonPages:       5395160 kB
Mapped:          1392456 kB
Shmem:           1182520 kB
KReclaimable:    1077360 kB
Slab:            1306016 kB
SReclaimable:    1077360 kB
SUnreclaim:       228656 kB
KernelStack:       19296 kB
PageTables:        47668 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    74977308 kB
Committed_AS:   10219164 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      726788 kB
VmallocChunk:   34358939728 kB
HardwareCorrupted:     0 kB
AnonHugePages:   2064384 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
HugePages_Total:    1024
HugePages_Free:      1024
HugePages_Rsvd:         0
HugePages_Surp:         0
Hugepagesize:       2048 kB
DirectMap4k:     4112384 kB
DirectMap2M:   131072000 kB
DirectMap1G:         0 kB


在这个示例中,输出中包含“HugePages_Total”和“Hugepagesize”字段,表示系统开启了大页内存,大页大小为2048KB。

如果“HugePages_Total”字段为0,则表示系统未开启大页内存。

总之,要查看系统是否开启了大页内存以及大页大小,可以查看/proc/meminfo文件并查找“HugePages_Total”和“Hugepagesize”字段。如果这些字段存在,则表示系统开启了大页内存,并且“Hugepagesize”字段将显示大页的大小。

3、创建规格时,设置对应的大页内存大小即可。

如何提升虚拟机性能?除了绑核还有它可以!_字段_02


2.2 KVM虚拟机配置

要配置KVM虚拟机使用大页内存,需要执行以下步骤:

  1. 确认主机支持大页内存:运行以下命令检查主机是否支持大页内存:
grep -E '(vmx|svm)' /proc/cpuinfo


如果输出中包含“vmx”或“svm”,则表示主机支持大页内存。

  1. 配置主机使用大页内存:运行以下命令以启用大页内存:
echo 1 > /sys/kernel/mm/transparent_hugepage/enabled
echo always > /sys/kernel/mm/transparent_hugepage/defrag

这将启用大页内存并启用自动碎片整理。

  1. 配置KVM虚拟机使用大页内存:在创建虚拟机时,使用以下命令配置虚拟机使用大页内存:
virt-install --name myvm --ram 4096 --memorybacking hugepages=yes --vcpus 2 --cdrom /path/to/iso --disk path=/var/lib/libvirt/images/myvm.img,size=20 --network default --graphics vnc


这将创建一个名为“myvm”的虚拟机,该虚拟机使用4GB RAM,2个CPU,20GB磁盘空间和默认网络,同时启用大页内存。

对于已存在的虚拟机,可以修改其xml文件使其使用大页内存。
要在XML文件中配置KVM虚拟机使用大页内存,需要将以下配置添加到XML文件中:

<memoryBacking>
  <hugepages/>
</memoryBacking>


具体来说,可以使用以下步骤在XML文件中配置大页内存:

  1. 打开XML文件并定位到<memory>元素。
  2. 在元素内部添加以下代码:
<memoryBacking>
  <hugepages/>
</memoryBacking>

  1. 保存XML文件并使用virsh define命令重新定义虚拟机。

例如,以下是一个XML文件的示例,其中包含配置大页内存的代码:

<domain type='kvm'>
  <name>myvm</name>
  <memory unit='KiB'>4194304</memory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc-i440fx-2.10'>hvm</type>
    <boot dev='hd'/>
  </os>
  <devices>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/myvm.img'/>
      <target dev='vda' bus='virtio'/>
    </disk>
    <interface type='network'>
      <mac address='52:54:00:2a:2c:6e'/>
      <source network='default'/>
      <model type='virtio'/>
    </interface>
  </devices>
  <memoryBacking>
    <hugepages/>
  </memoryBacking>
</domain>

在这个示例中,<memoryBacking>元素包含<hugepages/>元素,表示该虚拟机将使用大页内存。

总之,要在XML文件中配置KVM虚拟机使用大页内存,只需要在<memoryBacking>元素中添加<hugepages/>元素即可。

2.3 Nova创建虚拟机时配置

nova boot --flavor <flavor_id> --image <image_id> --nic net-id=<network_id> --availability-zone <availability_zone> --key-name <key_name> --config-drive true --block-device-mapping vda=<volume_id>:::0 --hints large_page=true <vm_name>

其中,--hints large_page=true参数启用大页内存。


第三章 总结

使用大页内存可以提高系统的性能,但需要更多的物理内存。要配置KVM虚拟机使用大页内存,需要在主机上启用大页内存,并在创建虚拟机时启用大页内存。


如果您喜欢我的文章,欢迎关注我的同名公众号哦~


标签:kB,大页,--,虚拟机,内存,使用,性能,提升
From: https://blog.51cto.com/xiaowangzai/6534928

相关文章

  • 云平台采集的虚拟机CPU利用率与实际的使用率差很多?与这个参数息息相关!
    一、概述主流的云平台都实现了对虚拟机资源使用率的监控,如网络流入流出带宽、CPU和内存利用率、磁盘利用率等。在没有安装平台定制的vmtools情况下,很有可能出现平台监控数据与虚拟机内部数据不相符的情况,如云平台显示虚拟机CPU使用率长期接近100%,并产生相应资源使用率高的告警,但实际......
  • 如何提高虚拟机性能?利用这个特性来实现!
    第一章什么是绑核线程绑核是指将线程绑定到特定的CPU核心上执行,而不允许线程在不同核心之间切换执行。这种操作可以有效地减少操作系统的上下文切换和负载均衡的开销,从而提高程序的执行效率。没有绑核的线程则可以在多个CPU核心上随意切换执行。这虽然可以让操作系统更加灵活地分......
  • 代码质量与代码优化:如何优化代码性能和代码可读性
    目录代码质量与代码优化:如何优化代码性能和代码可读性背景介绍在现代软件开发中,代码质量是非常重要的一个方面。一个好的代码不仅可以更快地完成开发任务,还可以更好地维护和扩展。为了提高代码质量,我们需要对代码进行优化,以便更好地实现我们的目标和需求。代码优化包括优化代......
  • 一名优秀的工程师应该学会在工作中提升自己
    引言古人云:“活到老,学到老。”互联网算是最辛苦的行业之一,高额薪资意味着“加班”对工程师来说已是“家常便饭”,同时互联网技术又日新月异,很多工程师都疲于应付,叫苦不堪。以至于长期以来流传一个甚广的误解:35岁是程序员生涯的终点。如何在繁忙的工作中做好技术积累,构建个人核心竞争......
  • 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开发也是水深不......