3.3. 在 Compute 节点上配置巨页
作为云管理员,您可以配置 Compute 节点,使实例能够请求巨页。
流程
- 打开您的 Compute 环境文件。
配置巨页内存量,以便在每个 NUMA 节点上为不是实例的进程保留:
parameter_defaults: ComputeParameters: NovaReservedHugePages: ["node:0,size:1GB,count:1","node:1,size:1GB,count:1"]parameter_defaults: ComputeParameters: NovaReservedHugePages: ["node:0,size:1GB,count:1","node:1,size:1GB,count:1"]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将每个节点的
size值替换为分配的巨页的大小。设置为以下有效值之一:- 2048 (用于 2MB)
- 1GB
-
将每个节点的
count值替换为每个 NUMA 节点的 OVS 使用的巨页数量。例如,对于 Open vSwitch 使用的 4096 个套接字内存,请将其设置为 2。
在 Compute 节点上配置巨页:
parameter_defaults: ComputeParameters: ... KernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=32"parameter_defaults: ComputeParameters: ... KernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=32"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果配置多个巨页大小,还必须在第一次引导过程中挂载巨页文件夹。如需更多信息,请参阅 第一次引导 期间挂载多个巨页文件夹。
可选: 要允许实例分配 1GB 巨页,请配置 CPU 功能标记
NovaLibvirtCPUModelExtraFlags,使其包含pdpe1gb:parameter_defaults: ComputeParameters: NovaLibvirtCPUMode: 'custom' NovaLibvirtCPUModels: 'Haswell-noTSX' NovaLibvirtCPUModelExtraFlags: 'vmx, pdpe1gb'parameter_defaults: ComputeParameters: NovaLibvirtCPUMode: 'custom' NovaLibvirtCPUModels: 'Haswell-noTSX' NovaLibvirtCPUModelExtraFlags: 'vmx, pdpe1gb'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意- 不需要将 CPU 功能标记配置为只允许实例请求 2 MB 巨页。
- 只有主机支持 1G 巨页分配时,才能为实例分配 1G 巨页。
-
当将
NovaLibvirtCPUModelExtraFlags设置为host-model或custom时,您只需要将NovaLibvirtCPUModelExtraFlags设置为pdpe1gb。 -
如果主机支持
pdpe1gb,并且host-passthrough用作NovaLibvirtCPUMode,则不需要将pdpe1gb设为NovaLibvirtCPUModelExtraFlags。pdpe1gb标志仅包含在 10.0.0.1_G4 和 together_G5 CPU 模型中,它不包括在 QEMU 支持的任何 Intel CPU 模型中。 - 要缓解 CPU 硬件问题,如 Microarchitectural Data Sampling (MDS),您可能需要配置其他 CPU 标记。如需更多信息,请参阅 RHOS Mitigation for MDS ("Microarchitectural Data Sampling") Security Flaws。
要避免在应用 Meltdown 保护后性能会降低的问题,请配置 CPU 功能标志
NovaLibvirtCPUModelExtraFlags来包含+pcid:parameter_defaults: ComputeParameters: NovaLibvirtCPUMode: 'custom' NovaLibvirtCPUModels: 'Haswell-noTSX' NovaLibvirtCPUModelExtraFlags: 'vmx, pdpe1gb, +pcid'parameter_defaults: ComputeParameters: NovaLibvirtCPUMode: 'custom' NovaLibvirtCPUModels: 'Haswell-noTSX' NovaLibvirtCPUModelExtraFlags: 'vmx, pdpe1gb, +pcid'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提示-
将
NUMATopologyFilter添加到NovaSchedulerEnabledFilters参数(如果尚不存在)。 使用其他环境文件将计算环境文件添加到堆栈中,并部署 overcloud:
openstack overcloud deploy --templates \ -e [your environment files] \ -e /home/stack/templates/<compute_environment_file>.yaml
(undercloud)$ openstack overcloud deploy --templates \ -e [your environment files] \ -e /home/stack/templates/<compute_environment_file>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3.1. 为实例创建巨页类型 复制链接链接已复制到粘贴板!
要让您的云用户创建使用巨页的实例,您可以使用 hw:mem_page_size 额外 spec 键创建用于启动实例的类别。
先决条件
- Compute 节点配置为巨页。如需更多信息,请参阅在 Compute 节点上配置巨页。
流程
为需要巨页的实例创建类别:
openstack flavor create --ram <size_mb> --disk <size_gb> \ --vcpus <no_reserved_vcpus> huge_pages
$ openstack flavor create --ram <size_mb> --disk <size_gb> \ --vcpus <no_reserved_vcpus> huge_pagesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要请求巨页,将类别的
hw:mem_page_size属性设置为所需的大小:openstack flavor set huge_pages --property hw:mem_page_size=1GB
$ openstack flavor set huge_pages --property hw:mem_page_size=1GBCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
hw:mem_page_size设置为以下有效值之一:-
large- 选择主机上支持的最大页面大小,对于 x86_64 系统可能为 2 MB 或 1 GB。 -
small(默认)选择主机上支持的最小页面大小。在 x86_64 系统中,这是 4 kB (常规页面)。 -
任意- 选择最大可用巨页大小,由 libvirt 驱动程序决定。 - <pageSize>: (字符串)如果工作负载具有特定要求,则设置显式页面大小。使用整数值(以 KB 为单位)或任何标准后缀。例如:4KB、2MB、2048、1GB。
-
要验证该类别创建了带有巨页的实例,请使用您的新类别来启动实例:
openstack server create --flavor huge_pages \ --image <image> huge_pages_instance
$ openstack server create --flavor huge_pages \ --image <image> huge_pages_instanceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 计算调度程序识别具有足够可用所需大小的巨页的主机,以支持实例的内存。如果调度程序无法找到具有足够页面的主机和 NUMA 节点,则请求将失败,并显示
NoValidHost错误。
3.3.2. 第一次引导过程中挂载多个巨页文件夹 复制链接链接已复制到粘贴板!
您可以将 Compute 服务(nova)配置为处理多个页面大小,作为第一个引导过程的一部分。首次启动节点时,第一次引导过程会将 heat 模板配置添加到所有节点中。后续包含这些模板(如更新 overcloud 堆栈)不会运行这些脚本。
流程
创建第一个引导模板文件
hugepages.yaml,该文件运行一个脚本来为巨页文件夹创建挂载。您可以使用OS::TripleO::MultipartMime资源类型发送配置脚本:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此模板中的
config脚本执行以下任务:-
通过指定与
'co?mp'匹配的主机名,过滤主机以在 上为巨页文件夹创建挂载。您可以根据需要更新特定计算的过滤器 grep 模式。 -
屏蔽默认的
dev-hugepages.mount systemd单元文件,以便使用页大小创建新挂载。 - 确保首先创建文件夹。
-
为每个
pagesize创建systemd挂载单元。 -
在第一个循环后运行
systemd daemon-reload,使其包含新创建的单元文件。 - 为 2M 和 1G 页大小启用每个挂载。您可以根据需要更新此循环使其包含额外的 pagesize。
-
通过指定与
可选:
/dev文件夹自动绑定到nova_compute和nova_libvirt容器。如果您已将不同的目的地用于巨页挂载,则需要将挂载传递给nova_compute和nova_libvirt容器:parameter_defaults NovaComputeOptVolumes: - /opt/dev:/opt/dev NovaLibvirtOptVolumes: - /opt/dev:/opt/devparameter_defaults NovaComputeOptVolumes: - /opt/dev:/opt/dev NovaLibvirtOptVolumes: - /opt/dev:/opt/devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
~/templates/firstboot.yaml环境文件中,将 heat 模板注册为OS::TripleO::NodeUserData资源类型:resource_registry: OS::TripleO::NodeUserData: ./hugepages.yaml
resource_registry: OS::TripleO::NodeUserData: ./hugepages.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要您只能将
NodeUserData资源注册到每个资源的 heat 模板。后续用法会覆盖要使用的 heat 模板。使用其他环境文件将第一个引导环境文件添加到堆栈中,并部署 overcloud:
openstack overcloud deploy --templates \ -e [your environment files] \ -e /home/stack/templates/firstboot.yaml \ ...
(undercloud)$ openstack overcloud deploy --templates \ -e [your environment files] \ -e /home/stack/templates/firstboot.yaml \ ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow