14.4. 配置虚拟机内存
要提高虚拟机(VM)的性能,您可以将额外的主机 RAM 分配给虚拟机。类似地,您可以减少分配给虚拟机的内存量,从而使主机内存可以分配给其他虚拟机或任务。
14.4.1. 内存过量使用
在 KVM hypervisor 上运行的虚拟机(VM)没有给它们分配的专用物理 RAM 块。相反,每个虚拟机都作为一个 Linux 进程,其中仅在请求时主机的 Linux 内核才分配内存。此外,主机的内存管理器可以在其自身的物理内存和交换空间之间移动虚拟机的内存。如果启用了内存过量使用,内核可以决定分配比虚拟机请求的少的物理内存,因为请求的内存量通常没有被虚拟机的进程完全使用。
默认情况下,Linux 内核中启用了内存过量使用,内核会为虚拟机请求估算安全的内存过量使用。但是,对于内存密集型工作负载,频繁的内存过量使用仍然会使系统变得不稳定。
内存过量使用要求您在主机物理机上分配足够的交换空间,以容纳所有虚拟机,并为主机物理机器的进程分配足够的内存。有关基本推荐的 swap 空间大小的说明,请参阅:为红帽平台推荐的 swap 大小是什么?
推荐的处理主机上内存短缺的方法:
- 为每个虚拟机分配较少的内存。
- 向主机添加更多的物理内存。
- 使用更大的 swap 空间。
如果交换频繁,虚拟机将会运行较慢。另外,过度使用会导致系统用尽内存(OOM),这可能会导致 Linux 内核关闭重要的系统进程。
设备分配不支持内存过度使用。这是因为,在使用设备分配时,必须静态预分配所有虚拟机内存,以对分配的设备启用直接内存访问(DMA)。
14.4.2. 使用 web 控制台添加和删除虚拟机内存
要提高虚拟机(VM)的性能或释放它使用的主机资源,您可以使用 Web 控制台来调整分配给虚拟机的内存量。
先决条件
- 您已安装了 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
- 您的用户帐户被允许登录到 web 控制台。 - 具体步骤请参阅安装并启用 Web 控制台。 
- 客户端操作系统正在运行内存 balloon 驱动程序。请执行以下命令校验: - 确保虚拟机的配置包含 - memballoon设备:- virsh dumpxml testguest | grep memballoon - # virsh dumpxml testguest | grep memballoon <memballoon model='virtio'> </memballoon>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果此命令显示任何输出,并且型号未设置为 - none,则存在- memballoon设备。
- 确保 balloon 驱动程序在客户机操作系统中运行。 - 
											在 Windows 客户机中,驱动程序作为 virtio-win驱动程序软件包的一部分安装。具体步骤请参阅为 Windows 虚拟机安装半虚拟化 KVM 驱动程序。
- 
											在 Linux 客户机中,通常默认包含驱动程序,并在存在 memballoon设备时激活。
 
- 
											在 Windows 客户机中,驱动程序作为 
 
- Web 控制台 VM 插件 已安装在您的系统上。
流程
- 可选:获取有关虚拟机的最大内存和当前使用的内存的信息。这将作为您更改的基准,并进行验证。 - virsh dominfo testguest - # virsh dominfo testguest Max memory: 2097152 KiB Used memory: 2097152 KiB- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 登录到 RHEL 8 web 控制台。 - 详情请参阅 登录到 web 控制台。 
- 在 界面中,点击您要查看其信息的虚拟机。 - 此时将打开一个新页面,其中包含关于所选虚拟机基本信息的概述部分,以及用于访问虚拟机的图形界面的控制台部分。 
- 单击概述窗格中 - Memory行旁边的 。- 此时将显示 - Memory Adjustment对话框。
- 为所选的虚拟机配置虚拟内存。 - 最大分配 - 设置虚拟机可用于其进程的最大主机内存量。您可以在创建虚拟机时指定最大内存,或可以在以后增大。您可以将内存指定为 MiB 或 GiB 的倍数。 - 只有在关闭虚拟机上才能调整最大内存分配。 
- 当前分配 - 设置分配给虚拟机的实际内存量。这个值可以小于最大分配量,但不能超过它。您可以调整值,来控制虚拟机的进程可使用的内存。您可以将内存指定为 MiB 或 GiB 的倍数。 - 如果没有指定这个值,则默认分配是 Maximum allocation 值。 
 
- 点 。 - 调整了虚拟机的内存分配。 
14.4.3. 使用命令行添加和删除虚拟机内存
					要提高虚拟机(VM)的性能或释放它使用的主机资源,您可以使用 CLI 来调整使用 memballoon 设备分配给虚拟机的内存量。
				
先决条件
- 客户端操作系统正在运行内存 balloon 驱动程序。请执行以下命令校验: - 确保虚拟机的配置包含 - memballoon设备:- virsh dumpxml testguest | grep memballoon - # virsh dumpxml testguest | grep memballoon <memballoon model='virtio'> </memballoon>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果此命令显示任何输出,并且型号未设置为 - none,则存在- memballoon设备。
- 确定 ballon 驱动程序正在客户端操作系统中运行。 - 
											在 Windows 客户机中,驱动程序作为 virtio-win驱动程序软件包的一部分安装。具体步骤请参阅为 Windows 虚拟机安装半虚拟化 KVM 驱动程序。
- 
											在 Linux 客户机中,通常默认包含驱动程序,并在存在 memballoon设备时激活。
 
- 
											在 Windows 客户机中,驱动程序作为 
 
流程
- 可选:获取有关虚拟机的最大内存和当前使用的内存的信息。这将作为您更改的基准,并进行验证。 - virsh dominfo testguest - # virsh dominfo testguest Max memory: 2097152 KiB Used memory: 2097152 KiB- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 调整分配给虚拟机的最大内存。增加这个值可以提高虚拟机的性能风险,降低这个值会降低虚拟机在主机上的性能占用空间。请注意,此更改只能在关闭的虚拟机上执行,因此调整正在运行的虚拟机需要重新启动才能生效。 - 例如,将 testguest 虚拟机可以使用的最大内存更改为 4096 MiB: - virt-xml testguest --edit --memory memory=4096,currentMemory=4096 - # virt-xml testguest --edit --memory memory=4096,currentMemory=4096 Domain 'testguest' defined successfully. Changes will take effect after the domain is fully powered off.- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 要增加正在运行的虚拟机的最大内存,您可以将内存设备附加到虚拟机。这也被称为内存热插拔。详情请参阅将设备附加到虚拟机。 警告- 不支持从正在运行的虚拟机中删除内存设备(也称为内存热插拔),因此红帽强烈不鼓励这样做。 
- 可选:您还可以调整虚拟机当前使用的内存,最多为最大分配量。这调整了虚拟机在主机上的内存负载,直到下一次重启为止,而不需要更改最大的虚拟机分配。 - virsh setmem testguest --current 2048 - # virsh setmem testguest --current 2048- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
验证
- 确认虚拟机使用的内存已更新: - virsh dominfo testguest - # virsh dominfo testguest Max memory: 4194304 KiB Used memory: 2097152 KiB- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 可选:如果您调整了当前虚拟机内存,您可以获取虚拟机的内存气球统计,以评估它如何有效地控制其内存使用。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
14.4.4. 配置虚拟机以使用巨页
在某些情况下,您可以使用巨页而不是默认的 4 KiB 内存页来为虚拟机提高内存分配。例如,巨页可以提高具有高内存使用率的虚拟机的性能,如数据库服务器。
前提条件
- 主机被配置为在内存分配中使用巨页。具体说明请参阅:在引导时配置 HugeTLB
步骤
- 如果所选的虚拟机正在运行,请关闭它。
- 要将虚拟机配置为使用 1 GiB 巨页,请打开虚拟机的 XML 定义进行编辑。例如,要编辑 - testguest虚拟机,请运行以下命令:- virsh edit testguest - # virsh edit testguest- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 在 XML 定义中的 - <memoryBacking>部分添加以下行:- <memoryBacking> <hugepages> <page size='1' unit='GiB'/> </hugepages> </memoryBacking>- <memoryBacking> <hugepages> <page size='1' unit='GiB'/> </hugepages> </memoryBacking>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
验证
- 启动虚拟机。
- 确认主机已成功为正在运行的虚拟机分配了巨页。在主机上运行以下命令: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 当您将空闲的和保留的巨页数加在一起( - HugePages_Free+- HugePages_Rsvd)时,结果应小于总巨页数(- HugePages_Total)。差距是正在运行的虚拟机所使用的巨页数。
