文件支持的内存

重要提示

从 18.0.0 Rocky 版本开始,以下描述的功能仅受 libvirt/KVM 驱动程序支持。

Openstack 中的文件支持的内存功能允许 Nova 节点从文件后端存储提供客户机内存。此机制使用 libvirt 文件内存源,导致客户机实例内存作为 libvirt 内存后端目录中的文件分配。

由于实例性能将与后端存储的速度相关,因此该功能在使用非常快的块设备或虚拟文件系统(例如闪存或 RAM 设备)时效果最佳。

配置后,nova-compute 将配置的文件支持的内存容量报告给 placement,以代替总系统内存容量。这允许节点运行比通常适合系统内存更多的实例。

在 libvirt 和 qemu 中可用时,qemu 将在关闭时通过调用 madvise(MADV_REMOVE) 来丢弃实例内存,以避免在退出时将任何脏内存刷新到后端存储。

要启用文件支持的内存,请按照以下步骤操作

  1. 配置后端存储

  2. 配置 Nova Compute 以支持文件支持的内存

重要提示

无法从运行不支持文件支持的内存的 OpenStack 版本的节点迁移到启用文件支持的内存的节点。建议在启用文件支持的内存之前,将所有 Nova compute 节点升级到 Rocky。

先决条件和限制

Libvirt

文件支持的内存需要 libvirt 版本 4.0.0 或更高版本。丢弃功能需要 libvirt 版本 4.4.0 或更高版本。

Qemu

文件支持的内存需要 qemu 版本 2.6.0 或更高版本。丢弃功能需要 qemu 版本 2.10.0 或更高版本。

内存超额提交

文件支持的内存与内存超额提交不兼容。 ram_allocation_ratio 必须在 nova.conf 中设置为 1.0,并且主机不得添加到具有 ram_allocation_ratio 设置为任何值(不为 1.0)的 主机聚合

保留内存

配置后,文件支持的内存报告为 placement 的总系统内存,RAM 用作缓存。保留内存对应于未为文件支持的内存预留的磁盘空间。 reserved_host_memory_mb 应该在 nova.conf 中设置为 0

Huge pages

文件支持的内存与大页不兼容。配置了大页的实例将无法在启用文件支持的内存的主机上启动。建议使用主机聚合来确保配置了大页的实例不会放置在配置了文件支持的内存的主机上。

未来可以通过调度器过滤器优化处理这些限制。

配置后端存储

注意

/dev/sdbext4 文件系统用作示例。这在不同的环境中会有所不同。

注意

/var/lib/libvirt/qemu/ram 是默认位置。可以通过 memory_backing_dir/etc/libvirt/qemu.conf 中设置该值,并且挂载点必须与在那里配置的值匹配。

默认情况下,使用 qemu/KVM 的 Libvirt 在 /var/lib/libvirt/qemu/ram/ 中分配内存。要利用此功能,需要在该位置(或其上方)挂载后端存储。

  1. 在后端设备上创建文件系统

    # mkfs.ext4 /dev/sdb
    
  2. 挂载后端设备

    将后端设备添加到 /etc/fstab 以自动挂载到 /var/lib/libvirt/qemu/ram

    挂载设备

    # mount /dev/sdb /var/lib/libvirt/qemu/ram
    

配置 Nova Compute 以支持文件支持的内存

  1. nova-compute 中启用文件支持的内存

    配置 Nova 以使用后端存储的容量(以 MiB 为单位)来利用文件支持的内存。在此示例中使用了 1048576 MiB(1 TiB)。

    编辑 /etc/nova/nova.conf

    [libvirt]
    file_backed_memory=1048576
    
  2. 重新启动 nova-compute 服务