首页/云/云平台与虚拟化速查/KVM 大页内存与内存后端配置
虚拟化操作94 条

KVM 大页内存与内存后端配置

大页(hugepages)减少 TLB 缺失、降低页表开销,适合内存密集型虚机;需先在宿主预留静态大页,再在域 XML 的 memoryBacking 中声明。

云平台与虚拟化速查云更新于 2026-10-13

KVM 大页内存配置

大页把内存页从常规的 4KiB 放大到 2MiB 或 1GiB,减少 TLB 缺失与页表层级,对内存密集、随机访问多的负载收益明显。KVM 里用大页要两步配合:先在宿主静态预留大页,再在域 XML 的 memoryBacking 中声明使用大页。只改 XML 不预留,虚机启动时会直接报内存分配失败。

基本信息

查看现状cat /proc/meminfo | grep -i huge 查看已预留与已用大页数
预留 2MiB 页向 hugepages-2048kB/nr_hugepages 写入页数
1GiB 页通过 hugepagesz 与 default_hugepagesz 内核参数在启动时预留
域侧声明域 XML 中使用 memoryBacking 的大页标签
校验virsh dumpxml 与宿主 meminfo 对照,确认大页真的被用上

典型使用场景

  • 数据库虚机:内存随机访问密集,减少页表开销收益明显
  • 大数据与内存计算:工作集大,TLB 缺失是主要开销来源
  • 低延迟业务:对内存访问抖动敏感的服务
  • 性能基准对比:验证大页对特定负载的实际收益
  • 宿主规划:按业务虚机需求统一预留大页并纳入容量管理

预留 4096 个 2MiB 大页(约 8GiB)

预留 4096 个 2MiB 大页(约 8GiB)
echo 4096 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
cat /proc/meminfo | grep -i hugepages      # 核对总数与空闲数
# 域 XML:<memoryBacking><hugepages/></memoryBacking>
virsh dumpxml vm1 | grep -i hugepages      # 确认定义已生效
# 持久化:写入 sysctl 或内核启动参数,重启后仍保留预留

大页规格对比

页规格特点适用
4KiB(默认)无需预留,管理简单通用场景
2MiB可在运行时预留,粒度适中多数虚机与数据库
1GiBTLB 收益最大,必须在启动时预留超大内存虚机
静态大页长期占用宿主内存:虚机内存与预留页数要匹配,预留不足会导致虚机启动失败,预留过多则闲置内存无法被其他虚机使用。
大页预留量与虚机内存要对得上账:一台 8GiB 内存的虚机需要 4096 个 2MiB 页,扩容内存时预留量也要同步增加。
大页与超分、气球回收存在冲突:大页内存通常不可换出,启用后虚机的内存基本被锁定,宿主可用于弹性的余量随之减少,容量规划时要把这部分单独算清楚,不要在两套策略之间互相挤占。

易错点

  • 只改 XML 未预留宿主大页:启动报内存分配失败
  • 把大页预留量当作可用内存重复分配,超出后新虚机一律起不来
  • 预留不持久化,宿主重启后配置丢失,虚机无法自动恢复
  • 把大页用到内存超分的虚机上:超分依赖换页,而大页通常不可换出

数据来源与参考

  • libvirt 文档:Memory backing(hugepages)
  • Linux 内核文档:hugetlbpage
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌