5.4. 在 Compute 节点上配置巨页
作为云管理员,您可以配置 Compute 节点,使实例能够请求巨页。
即使没有请求 NUMA 拓扑,配置巨页也会在实例上创建一个隐式 NUMA 拓扑。不要在同一主机上运行 NUMA 和非 NUMA 虚拟机(VM)。
先决条件
-
oc命令行工具已安装在您的工作站上。 -
以具有
cluster-admin权限的用户身份登录 Red Hat OpenStack Services on OpenShift (RHOSO)。 -
您已选择了
OpenStackDataPlaneNodeSetCR,用于定义启用实例来请求巨页的节点。有关创建OpenStackDataPlaneNodeSetCR 的更多信息,请参阅 Deploying Red Hat OpenStack Services on OpenShift 指南中的使用预置备节点创建 OpenStackDataPlaneNodeSet CR。
流程
创建或更新名为
nova-extra-config.yaml的ConfigMapCR,并在 [default] 和 [libvirt] 下设置参数的值:apiVersion: v1 kind: ConfigMap metadata: name: nova-extra-config namespace: openstack data: 28-nova-huge-pages.conf: |1 [default] reserved_huge_pages = node:0,size:2048,count:64 reserved_huge_pages = node:1,size:1GB,count:1 [libvirt] cpu_mode = custom cpu_models = Haswell-noTSX cpu_model_extra_flags = vmx, pdpe1gb, +pcid- 1
- 新计算配置文件的名称。
nova-operator生成名为01-nova.conf的默认配置文件。不要使用默认名称,因为它会覆盖基础架构配置,如transport_url。nova-compute服务以字典顺序应用/etc/nova/nova.conf.d/下的每个文件,因此后续文件中定义的配置将覆盖之前文件中定义的相同配置。
注意- 不要配置 CPU 功能标记,以只允许实例请求 2 MB 的巨页。
- 只有主机支持 1G 巨页分配时,才能为实例分配 1G 巨页。
-
当
cpu_mode设为host-model或自定义时,您只需要将cpu_model_extra_flags设置为pdpe1gb。 如果主机支持
pdpe1gb,并且host-passthrough用作cpu_mode,则您不需要将pdpe1gb设为cpu_model_extra_flags。注意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。
有关创建
ConfigMap对象的更多信息,请参阅 创建和使用配置映射。创建新的
OpenStackDataPlaneDeploymentCR,以在 data plane 节点上配置服务并部署数据平面,并将它保存到工作站上名为compute_huge_pages_deploy.yaml的文件中:apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: openstack-edpm-huge-pages在
compute_huge_pages_deploy.yaml中,指定nodeSets以包含您要部署的所有OpenStackDataPlaneNodeSetCR。确保包含您选择的OpenStackDataPlaneNodeSetCR。该OpenStackDataPlaneNodeSetCR 定义您要为巨页指定的节点。警告您只能配置整个节点集。不支持在节点集合中重新配置节点的子集。如果您需要在节点集合中重新配置节点子集,您必须缩减节点设置,并从之前删除的节点创建新节点集。
警告如果您的部署有多个节点集,对
nova-extra-config.yamlConfigMap的更改可能会直接影响多个节点集。要检查节点集是否使用nova-extra-config.yamlConfigMap,因此会受到重新配置的影响,请完成以下步骤:-
导航到节点集的服务列表,再查找指向 nova 的
DataPlaneService'的名称。 确保
DataPlaneService的edpmServiceType字段的值设置为nova。如果
DataPlaneService的 dataSources 列表包含名为nova-extra-config的configMapRef,则此节点会使用此ConfigMap,因此会受到此ConfigMap中的配置更改的影响。如果某些受影响的节点集合不应重新配置,您必须创建一个指向这些节点集的单独ConfigMap的新DataPlaneService。
apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: openstack-edpm-huge-pages spec: nodeSets: - openstack-edpm - compute-huge-pages - ... - <nodeSet_name>-
将
<nodeSet_name> 替换为您要包含在 data plane 部署中的OpenStackDataPlaneNodeSetCR 的名称。
-
导航到节点集的服务列表,再查找指向 nova 的
-
保存
compute_huge_pages_deploy.yaml部署文件。 部署数据平面:
$ oc create -f compute_huge_pages_deploy.yaml验证 data plane 是否已部署:
$ oc get openstackdataplanenodeset NAME STATUS MESSAGE compute-huge-pages True Deployed访问
openstackclient的远程 shell,并验证部署的 Compute 节点是否在 control plane 上可见:$ oc rsh -n openstack openstackclient $ openstack hypervisor list
5.4.1. 为实例创建巨页类型 复制链接链接已复制到粘贴板!
要让您的云用户创建使用巨页的实例,您可以使用 hw:mem_page_size 额外 spec 键创建用于启动实例的类别。
要在云上执行 openstack 客户端命令,您必须指定 clouds.yaml 文件中详述的云名称。您可以使用以下方法之一指定云的名称:
在每个命令
中使用--os-cloud选项:$ openstack flavor list --os-cloud <cloud_name>如果您访问多个云,则使用此选项。
在
bashrc文件中为云名称创建一个环境变量:`export OS_CLOUD=<cloud_name>`
先决条件
- Compute 节点配置为巨页。如需更多信息,请参阅在 Compute 节点上配置巨页。
流程
为需要巨页的实例创建类别:
$ openstack flavor create --ram <size_mb> --disk <size_gb> \ --vcpus <num_reserved_vcpus> huge_pages要请求巨页,将类别的
hw:mem_page_size属性设置为所需的大小:$ openstack --os-compute-api=2.86 flavor set huge_pages --property hw:mem_page_size=<page_size>将
<page_size> 替换为以下有效值之一:-
大:选择主机上支持的最大页面大小,对于 x86_64 系统可能为 2 MB 或 1 GB。 -
small:(默认)选择主机上支持的最小页面大小。在 x86_64 系统中,这是 4 kB (常规页面)。 -
any:使用镜像上设置的hw_mem_page_size选择页面大小。如果镜像没有指定页面大小,请选择最大可用页面大小,具体由 libvirt 驱动程序决定。 -
<pageSize> :如果工作负载具有特定要求,则设置一个显式页面大小。使用整数值(以 KB 为单位)或任何标准后缀。例如:4KB、2MB、2048、1GB。
-
要验证该类别创建了带有巨页的实例,请使用您的新类别来启动实例:
$ openstack server create --flavor huge_pages \ --image <image> huge_pages_instance计算调度程序识别具有足够可用所需大小的巨页的主机,以支持实例的内存。如果调度程序无法找到具有足够页面的主机和 NUMA 节点,则请求将失败,并显示
NoValidHost错误。