18.5. 配置虚拟机内存
要提高虚拟机(VM)的性能,您可以将额外的主机 RAM 分配给虚拟机。类似地,您可以减少分配给虚拟机的内存量,从而使主机内存可以分配给其他虚拟机或任务。
18.5.1. 内存过量使用 复制链接链接已复制到粘贴板!
在 KVM hypervisor 上运行的虚拟机(VM)没有给它们分配的专用物理 RAM 块。相反,每个虚拟机都作为一个 Linux 进程,其中仅在请求时主机的 Linux 内核才分配内存。此外,主机的内存管理器可以在其自身的物理内存和交换空间之间移动虚拟机的内存。如果启用了内存过量使用,内核可以决定分配比虚拟机请求的少的物理内存,因为请求的内存量通常没有被虚拟机的进程完全使用。
默认情况下,Linux 内核中启用了内存过量使用,内核会为虚拟机请求估算安全的内存过量使用。但是,对于内存密集型工作负载,频繁的内存过量使用仍然会使系统变得不稳定。
内存过量使用要求您在主机物理机上分配足够的交换空间,以容纳所有虚拟机,并为主机物理机器的进程分配足够的内存。有关基本推荐的 swap 空间大小的说明,请参阅:为红帽平台推荐的 swap 大小是什么?
推荐的处理主机上内存短缺的方法:
- 为每个虚拟机分配较少的内存。
- 向主机添加更多的物理内存。
- 使用更大的 swap 空间。
如果交换频繁,虚拟机将会运行较慢。另外,过度使用会导致系统用尽内存(OOM),这可能会导致 Linux 内核关闭重要的系统进程。
设备分配不支持内存过度使用。这是因为,在使用设备分配时,必须静态预分配所有虚拟机内存,以对分配的设备启用直接内存访问(DMA)。
18.5.2. 使用 web 控制台添加和删除虚拟机内存 复制链接链接已复制到粘贴板!
要提高虚拟机(VM)的性能或释放它使用的主机资源,您可以使用 Web 控制台来调整分配给虚拟机的内存量。
仅使用 memballoon
设备来调整分配给 IBM Z 系统上虚拟机的内存量。在所有其他系统中,添加和删除虚拟机内存的建议解决方案是通过 virtio-mem
设备。
先决条件
- 您已安装了 RHEL 9 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 9 web 控制台。
详情请参阅 登录到 web 控制台。
在
界面中,点击您要查看其信息的虚拟机。此时将打开一个新页面,其中包含关于所选虚拟机基本信息的概述部分,以及用于访问虚拟机的图形界面的控制台部分。
单击概述窗格中
Memory
行旁边的 。此时将显示
Memory Adjustment
对话框。为所选的虚拟机配置虚拟内存。
最大分配 - 设置虚拟机可用于其进程的最大主机内存量。您可以在创建虚拟机时指定最大内存,或可以在以后增大。您可以将内存指定为 MiB 或 GiB 的倍数。
只有在关闭虚拟机上才能调整最大内存分配。
当前分配 - 设置分配给虚拟机的实际内存量。这个值可以小于最大分配量,但不能超过它。您可以调整值,来控制虚拟机的进程可使用的内存。您可以将内存指定为 MiB 或 GiB 的倍数。
如果没有指定这个值,则默认分配是 Maximum allocation 值。
点击
。调整了虚拟机的内存分配。
18.5.3. 使用命令行添加和删除虚拟机内存 复制链接链接已复制到粘贴板!
要提高虚拟机(VM)的性能或释放它使用的主机资源,您可以使用 CLI 来调整使用 memballoon
设备分配给虚拟机的内存量。
仅使用 memballoon
设备来调整分配给 IBM Z 系统上虚拟机的内存量。在所有其他系统中,添加和删除虚拟机内存的建议解决方案是通过 virtio-mem
设备。
先决条件
客户端操作系统正在运行内存 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
18.5.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
)。差距是正在运行的虚拟机所使用的巨页数。
18.5.5. 使用 virtio-mem 添加和删除虚拟机内存 复制链接链接已复制到粘贴板!
RHEL 9 提供 virtio-mem
半虚拟化内存设备。此设备使得可以在虚拟机(VM)中动态添加或删除主机内存。例如,您可以使用 virtio-mem
在正在运行的虚拟机之间移动内存资源,或者根据您的当前要求在云设置中调整虚拟机内存的大小。
18.5.5.1. virtio-mem 概述 复制链接链接已复制到粘贴板!
virtio-mem
是一个半虚拟化内存设备,可用于在虚拟机中动态添加或删除主机内存。例如,您可以使用这个设备在运行的虚拟机之间移动内存资源,或者根据您当前的要求在云设置中调整虚拟机内存大小。
通过使用 virtio-mem
,您可以将虚拟机的内存增加到超过其初始大小,并将其缩小回其原始大小,大小可以是 4 到几百兆(MiB)。但请注意,virtio-mem
也依赖于特定的客户机操作系统配置,特别是为了可靠地拔出内存。
virtio-mem 功能限制
virtio-mem
目前与以下功能不兼容:
- 对主机上的实时应用程序使用内存锁定
- 在主机上使用加密的虚拟化
-
在主机上将
virtio-mem
与memballoon
膨胀和收缩合并 -
在虚拟机中卸载或重新载入
virtio_mem
驱动程序 -
使用 vhost-user 设备,但
virtiofs
除外
18.5.5.2. 在虚拟机中配置内存在线 复制链接链接已复制到粘贴板!
在使用 virtio-mem
将内存附加到正在运行的虚拟机(也称为内存热插拔)之前,您必须配置虚拟机(VM)操作系统,以便可将热插拔内存自动设置为在线状态。否则,客户端操作系统无法使用额外的内存。您可以从以下内存在线的配置中选择:
-
online_movable
-
online_kernel
-
auto-movable
要了解这些配置之间的区别,请参阅:内存在线配置比较
RHEL 中默认内存在线是使用 udev 规则配置的。但是,在使用 virtio-mem
时,建议直接在内核中配置内存在线。
先决条件
- 主机使用 Intel 64、AMD64 或 ARM 64 CPU 架构。
主机使用以下操作系统版本之一:
- 在 Intel 64 和 AMD64 主机上: RHEL 9.4 或更高版本
- 在 ARM 64 主机上: RHEL 9.6 或更高版本
主机上运行的虚拟机使用以下操作系统版本之一:
在 Intel 64 和 AMD64 主机上: RHEL 8.10 或 RHEL 9.4 或更高版本
重要从正在运行的虚拟机中拔出内存默认在 RHEL 8.10 虚拟机中被禁用。
- 在 ARM 64 主机上: RHEL 9.6 或更高版本
- 在任何支持的主机上: RHEL 10
流程
要在虚拟机中设置内存在线,以使用
online_movable
配置:将
memhp_default_state
内核命令行参数设置为online_movable
:grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online_movable
# grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online_movable
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 重启虚拟机。
要在虚拟机中设置内存在线,以使用
online_kernel
配置:将
memhp_default_state
内核命令行参数设置为online_kernel
:grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online_kernel
# grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online_kernel
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 重启虚拟机。
要在虚拟机中使用
auto-movable
内存在线策略:将
memhp_default_state
内核命令行参数设置为online
:grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online
# grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
memory_hotplug.online_policy
内核命令行参数设置为auto-movable
:grubby --update-kernel=ALL --remove-args="memory_hotplug.online_policy" --args=memory_hotplug.online_policy=auto-movable
# grubby --update-kernel=ALL --remove-args="memory_hotplug.online_policy" --args=memory_hotplug.online_policy=auto-movable
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:要进一步调优
auto-movable
在线策略,请更改memory_hotplug.auto_movable_ratio
和memory_hotplug.auto_movable_numa_aware
参数:grubby --update-kernel=ALL --remove-args="memory_hotplug.auto_movable_ratio" --args=memory_hotplug.auto_movable_ratio=<percentage> grubby --update-kernel=ALL --remove-args="memory_hotplug.memory_auto_movable_numa_aware" --args=memory_hotplug.auto_movable_numa_aware=<y/n>
# grubby --update-kernel=ALL --remove-args="memory_hotplug.auto_movable_ratio" --args=memory_hotplug.auto_movable_ratio=<percentage> # grubby --update-kernel=ALL --remove-args="memory_hotplug.memory_auto_movable_numa_aware" --args=memory_hotplug.auto_movable_numa_aware=<y/n>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
与可用于任何分配的内存相比,
memory_hotplug.auto_movable_ratio 参数
设置仅可用于可移动分配的最大内存比率。比率以百分比表示,默认值为 301 (%),它是 3:1 的比率。 memory_hotplug.auto_movable_numa_aware
参数控制memory_hotplug.auto_movable_ratio
参数是否应用到跨所有可用 NUMA 节点的内存,或仅应用到单个 NUMA 节点上的内存。默认值为:y (yes)例如,如果最大比率设置为 301%,并且
memory_hotplug.auto_movable_numa_aware
设置为 y (yes),即使在附加了virtio-mem
设备的 NUMA 节点内也应用 3:1 比率。如果参数设置为 n (no),则最大 3:1 比率仅应用于整个 NUMA 节点。另外,如果没有超过比率,则新热插拔内存将只可用于可移动分配。否则,新热拔插内存将同时可用于可移动和不可移动分配。
-
与可用于任何分配的内存相比,
- 重启虚拟机。
验证
要查看
online_movable
配置是否已正确设置,请检查memhp_default_state
内核参数的当前值:cat /sys/devices/system/memory/auto_online_blocks online_movable
# cat /sys/devices/system/memory/auto_online_blocks online_movable
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看
online_kernel
配置是否已正确设置,请检查memhp_default_state
内核参数的当前值:cat /sys/devices/system/memory/auto_online_blocks online_kernel
# cat /sys/devices/system/memory/auto_online_blocks online_kernel
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看
auto-movable
配置是否已正确设置,请检查以下内核参数:memhp_default_state
:cat /sys/devices/system/memory/auto_online_blocks online
# cat /sys/devices/system/memory/auto_online_blocks online
Copy to Clipboard Copied! Toggle word wrap Toggle overflow memory_hotplug.online_policy
:cat /sys/module/memory_hotplug/parameters/online_policy auto-movable
# cat /sys/module/memory_hotplug/parameters/online_policy auto-movable
Copy to Clipboard Copied! Toggle word wrap Toggle overflow memory_hotplug.auto_movable_ratio
:cat /sys/module/memory_hotplug/parameters/auto_movable_ratio 301
# cat /sys/module/memory_hotplug/parameters/auto_movable_ratio 301
Copy to Clipboard Copied! Toggle word wrap Toggle overflow memory_hotplug.auto_movable_numa_aware
:cat /sys/module/memory_hotplug/parameters/auto_movable_numa_aware y
# cat /sys/module/memory_hotplug/parameters/auto_movable_numa_aware y
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.5.5.3. 将 virtio-mem 设备附加到虚拟机 复制链接链接已复制到粘贴板!
要将额外内存附加到正在运行的虚拟机(也称为内存热插拔),之后能够调整热插拔内存的大小,您可以使用 virtio-mem
设备。特别是,您可以使用 libvirt XML 配置文件和 virsh
命令来定义并将 virtio-mem
设备附加到虚拟机(VM)。
先决条件
- 主机使用 Intel 64、AMD64 或 ARM 64 CPU 架构。
主机使用以下操作系统版本之一:
- 在 Intel 64 和 AMD64 主机上: RHEL 9.4 或更高版本
- 在 ARM 64 主机上: RHEL 9.6 或更高版本
主机上运行的虚拟机使用以下操作系统版本之一:
在 Intel 64 和 AMD64 主机上: RHEL 8.10 或 RHEL 9.4 或更高版本
重要从正在运行的虚拟机中拔出内存默认在 RHEL 8.10 虚拟机中被禁用。
- 在 ARM 64 主机上: RHEL 9.6 或更高版本
- 在任何支持的主机上: RHEL 10
- 虚拟机配置了内存在线。具体说明,请参阅:在虚拟机中配置内存在线
流程
确保目标虚拟机的 XML 配置包含
maxMemory
参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,
testguest1
虚拟机的 XML 配置定义了一个 128 gibibyte (GiB)大小的maxMemory
参数。maxMemory
大小指定虚拟机可以使用的最大内存,其包括初始内存和热插拔内存。创建并打开 XML 文件,来在主机上定义
virtio-mem
设备,例如:vim virtio-mem-device.xml
# vim virtio-mem-device.xml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在文件中添加
virtio-mem
设备的 XML 定义并保存:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,使用以下参数定义了两个
virtio-mem
设备:-
size
:这是设备的最大大小。在示例中,它是 48 GiB。size
必须是block
大小的倍数。 -
node
:这是为virtio-mem
设备分配的 vNUMA 节点。 -
block
:这是设备的块大小。它必须至少是透明巨页(THP)的大小,在 Intel 64 和 AMD64 CPU 构架上是 2 MiB。在 ARM64 架构上,THP 的大小可以是 2 MiB 或 512 MiB,具体取决于基本页大小。Intel 64 或 AMD64 架构上的 2 MiB 块大小通常是好的默认选择。当使用带有 虚拟功能 I/O(VFIO) 或 中介设备(mdev) 的virtio-mem
时,跨所有virtio-mem
设备的总块数不能大于 32768,否则 RAM 的插入可能会失败。 -
requested
:这是您附加到具有virtio-mem
设备的虚拟机的内存量。但是,它只对虚拟机的请求,可能无法成功解决,例如如果虚拟机没有正确配置。requested
大小必须是block
大小的倍数,且不能超过定义的size
最大值。 -
current
:这代表提供给虚拟机的当前virtio-mem
设备的大小。current
大小可能与requested
不同,例如当请求无法完成或重启虚拟机时。 alias
:这是一个可选d 用户定义的别名,您可用来指定预期的virtio-mem
设备,例如使用 libvirt 命令编辑设备时。libvirt 中所有用户定义的别名必须以 "ua-" 前缀开头。除了这些特定的参数外,
libvirt
像处理任何其他 PCI 设备一样处理virtio-mem
设备。有关管理附加到虚拟机的 PCI 设备的更多信息,请参阅 管理虚拟设备
-
使用 XML 文件将定义的
virtio-mem
设备附加到虚拟机。例如,要将virtio-mem-device.xml
中定义的两个设备永久附加到正在运行的testguest1
虚拟机:virsh attach-device testguest1 virtio-mem-device.xml --live --config
# virsh attach-device testguest1 virtio-mem-device.xml --live --config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow --live
选项仅将设备附加到正在运行的虚拟机,不会在引导之间保持持久性。--config
选项使配置更改持久化。您还可以将设备附加到没有--live
选项的关闭的虚拟机。可选:要动态更改附加到正在运行的虚拟机的
请求的
virtio-mem
设备的大小,请使用virsh update-memory-device
命令:virsh update-memory-device testguest1 --alias ua-virtiomem0 --requested-size 4GiB
# virsh update-memory-device testguest1 --alias ua-virtiomem0 --requested-size 4GiB
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中:
-
testguest1
是您要更新的虚拟机。 -
--alias ua-virtiomem0
是之前由定义的别名指定的virtio-mem
设备。 --requested-size 4GiB
将virtio-mem
设备的requested
大小更改为 4 GiB。警告通过减少
所需的
大小,从正在运行的虚拟机中拔下内存可能不可靠。此过程是否成功取决于各种因素,如所使用的内存在线策略。在某些情况下,客户机操作系统无法成功完成请求,因为那时可能无法更改热插拔内存量。
另外,从正在运行的虚拟机中拔出内存默认在 RHEL 8.10 虚拟机中被禁用。
-
可选:要从关闭的虚拟机中拔出
virtio-mem
设备,请使用virsh detach-device
命令:virsh detach-device testguest1 virtio-mem-device.xml
# virsh detach-device testguest1 virtio-mem-device.xml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:要从正在运行的虚拟机中拔出
virtio-mem
设备:将
virtio-mem
设备的请求的
大小改为 0,否则尝试从正在运行的虚拟机中拔出virtio-mem
设备将失败。virsh update-memory-device testguest1 --alias ua-virtiomem0 --requested-size 0
# virsh update-memory-device testguest1 --alias ua-virtiomem0 --requested-size 0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从正在运行的虚拟机中拔出
virtio-mem
设备:virsh detach-device testguest1 virtio-mem-device.xml --config
# virsh detach-device testguest1 virtio-mem-device.xml --config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在虚拟机中,检查可用的 RAM ,并查看总内存现在是否包含热插拔内存:
free -h
# free -h total used free shared buff/cache available Mem: 31Gi 5.5Gi 14Gi 1.3Gi 11Gi 23Gi Swap: 8.0Gi 0B 8.0Gi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 也可以通过显示正在运行的虚拟机的 XML 配置来查看主机上当前的插入的 RAM 量:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中:
-
<currentMemory unit='GiB'>31</currentMemory>
代表虚拟机中所有源的可用 RAM 总量。 -
<current unit='GiB'>16</current>
代表virtio-mem
设备提供的插入的 RAM 的当前大小。
-
18.5.5.4. 内存在线配置的比较 复制链接链接已复制到粘贴板!
将内存附加到正在运行的 RHEL 虚拟机(也称为内存热插拔)时,您必须在虚拟机(VM)操作系统将热插内存设置为在线状态。否则,系统将无法使用内存。
下表总结了在可用内存在线配置间选择时的主要注意事项。
配置名称 | 从虚拟机中拔出内存 | 创建内存区不平衡的风险 | 一个潜在的用例 | 预期工作负载的内存要求 |
---|---|---|---|---|
| 热插内存可以可靠地拔出。 | 是 | 热插拔相对较少的内存 | 主要是用户空间内存 |
| 热插内存的可移动部分可以可靠地拔出。 | 最小 | 热插拔大量内存 | 主要是用户空间内存 |
| 热插拔内存无法可靠地拔出。 | 否 | 不可靠内存拔出是可以接受的。 | 用户空间或内核空间内存 |
区域不平衡 是某个 Linux 内存区域中缺少可用内存页。区域不平衡 会对系统性能造成负面影响。例如,如果内核用完了不可移动分配的可用内存,则内核可能会崩溃。通常,可移动分配主要包含用户空间内存页,不可移动分配主要包含内核空间内存页。