10.8. 创建使用 DPDK 的 HCI overcloud
您可以通过共置(co-locating)并配置计算和 Ceph Storage 服务来优化资源使用量,通过部署带有超融合节点的 NFV 基础架构。
有关超融合基础架构(HCI)的更多信息,请参阅 超融合基础架构指南。
以下章节提供了各种配置示例。
10.8.1. NUMA 节点配置示例 复制链接链接已复制到粘贴板!
为提高性能,将租户网络和 Ceph 对象服务守护进程(OSD)放在一个 NUMA-0 中,如 NUMA-0,以及 VNF 和另一个 NUMA 节点上的任何非 NFV 虚拟机,如 NUMA-1。
CPU 分配:
| NUMA-0 | NUMA-1 |
|---|---|
| Ceph OSD 数量 * 4 HT | 用于 VNF 和非NFV 虚拟机的客户机 vCPU |
| DPDK lcore - 2 HT | DPDK lcore - 2 HT |
| DPDK PMD - 2 HT | DPDK PMD - 2 HT |
CPU 分配示例:
| NUMA-0 | NUMA-1 | |
|---|---|---|
| Ceph OSD | 32,34,36,38,40,42,76,78,80,82,84,86 | |
| DPDK-lcore | 0,44 | 1,45 |
| DPDK-pmd | 2,46 | 3,47 |
| Nova | 5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,49,51,53,55,57,59,61,63,65,67,69,71,73,75,77,79,81,83,85,87 |
10.8.2. ceph 配置文件示例 复制链接链接已复制到粘贴板!
parameter_defaults:
CephPoolDefaultSize: 3
CephPoolDefaultPgNum: 64
CephPools:
- {"name": backups, "pg_num": 128, "pgp_num": 128, "application": "rbd"}
- {"name": volumes, "pg_num": 256, "pgp_num": 256, "application": "rbd"}
- {"name": vms, "pg_num": 64, "pgp_num": 64, "application": "rbd"}
- {"name": images, "pg_num": 32, "pgp_num": 32, "application": "rbd"}
CephConfigOverrides:
osd_recovery_op_priority: 3
osd_recovery_max_active: 3
osd_max_backfills: 1
CephAnsibleExtraConfig:
nb_retry_wait_osd_up: 60
delay_wait_osd_up: 20
is_hci: true
# 3 OSDs * 4 vCPUs per SSD = 12 vCPUs (list below not used for VNF)
ceph_osd_docker_cpuset_cpus: "32,34,36,38,40,42,76,78,80,82,84,86" #
# cpu_limit 0 means no limit as we are limiting CPUs with cpuset above
ceph_osd_docker_cpu_limit: 0 #
# numactl preferred to cross the numa boundary if we have to
# but try to only use memory from numa node0
# cpuset-mems would not let it cross numa boundary
# lots of memory so NUMA boundary crossing unlikely
ceph_osd_numactl_opts: "-N 0 --preferred=0" #
CephAnsibleDisksConfig:
osds_per_device: 1
osd_scenario: lvm
osd_objectstore: bluestore
devices:
- /dev/sda
- /dev/sdb
- /dev/sdc
使用下列参数,为 ceph OSD 进程分配 CPU 资源。根据此超融合环境中的工作负载和硬件来调整值。
- 1
- ceph_osd_docker_cpuset_cpus:为每个 OSD 为 SSD 磁盘分配 4 个 CPU 线程,或为每个 OSD 为 HDD 磁盘分配 1 个 CPU。包括与 ceph 关联的 NUMA 节点的内核和同级线程列表,以及三个列表中的 CPU:
NovaComputeCpuDedicatedSet和OvsPmdCoreList。 - 2
- ceph_osd_docker_cpu_limit:将此值设置为
0,将 ceph OSD 固定到ceph_osd_docker_cpuset_cpus中的 CPU 列表。 - 3
- ceph_osd_numactl_opts:将此值设置为
首选跨 NUMA 操作,作为预ca。
10.8.3. DPDK 配置文件示例 复制链接链接已复制到粘贴板!
parameter_defaults:
ComputeHCIParameters:
KernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=240 intel_iommu=on iommu=pt #
isolcpus=2,46,3,47,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,49,51,53,55,57,59,61,63,65,67,69,71,73,75,77,79,81,83,85,87"
TunedProfileName: "cpu-partitioning"
IsolCpusList: #
”2,46,3,47,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,49,51,
53,55,57,59,61,63,65,67,69,71,73,75,77,79,81,83,85,87"
VhostuserSocketGroup: hugetlbfs
OvsDpdkSocketMemory: "4096,4096" #
OvsDpdkMemoryChannels: "4"
OvsPmdCoreList: "2,46,3,47" #
- 1
- KernelArgs:要计算
大页,从总内存中减去NovaReservedHostMemory参数的值。 - 2
- IsolCpusList:分配一组 CPU 内核,使用这个参数与主机进程隔离。将
OvsPmdCoreList参数的值添加到NovaComputeCpuDedicatedSet参数的值,以计算IsolCpusList参数的值。 - 3
- OvsDpdkSocketMemory:使用
OvsDpdkSocketMemory参数指定从每个 NUMA 节点的巨页池预先分配的内存量。有关计算 OVS-DPDK 参数的更多信息,请参阅 OVS-DPDK 参数。 - 4
- OvsPmdCoreList:指定用于带有这个参数的 DPDK 轮询模式驱动程序(PMD)的 CPU 核心。选择与 DPDK 接口本地 NUMA 节点关联的 CPU 核心。为每个 NUMA 节点分配 2 HT 同级线程,以计算
OvsPmdCoreList参数的值。
10.8.4. nova 配置文件示例 复制链接链接已复制到粘贴板!
parameter_defaults:
ComputeHCIExtraConfig:
nova::cpu_allocation_ratio: 16 # 2
NovaReservedHugePages: #
- node:0,size:1GB,count:4
- node:1,size:1GB,count:4
NovaReservedHostMemory: 123904 #
# All left over cpus from NUMA-1
NovaComputeCpuDedicatedSet: #
['5','7','9','11','13','15','17','19','21','23','25','27','29','31','33','35','37','39','41','43','49','51','|
53','55','57','59','61','63','65','67','69','71','73','75','77','79','81','83','85','87
- 1
- NovaReservedHugePages:使用
NovaReservedHugePages参数从巨页池中分配内存(以 MB 为单位)。它是与OvsDpdkSocketMemory参数的值相同的内存。 - 2
- NovaReservedHostMemory:使用
NovaReservedHostMemory参数为主机上的任务保留内存(以 MB 为单位)。使用以下指南计算您必须保留的内存量:- 每个 OSD 的 5 GB。
- 每个虚拟机的 0.5 GB 开销。
- 4GB 用于一般主机处理。请确定您分配足够内存,以防止由跨 NUMA OSD 操作导致的潜在性能下降。
- 3
- NovaComputeCpuDedicatedSet:列出
OvsPmdCoreList中未找到的 CPU,或使用NovaComputeCpuDedicatedSet参数列出Ceph_osd_docker_cpuset_cpus。CPU 必须与 DPDK NIC 位于同一 NUMA 节点上。
10.8.5. HCI-DPDK 部署的推荐配置 复制链接链接已复制到粘贴板!
| 块设备类型 | OSD、内存、每个设备的 vCPU |
|---|---|
| NVMe |
内存:每个 OSD 5GB |
| SSD |
内存:每个 OSD 5GB |
| HDD |
内存:每个 OSD 5GB |
为以下功能使用相同的 NUMA 节点:
- 磁盘控制器
- 存储网络
- 存储 CPU 和内存
为 DPDK 提供商网络的以下功能分配另一个 NUMA 节点:
- NIC
- PMD CPU
- 套接字内存
10.8.6. 部署 HCI-DPDK overcloud 复制链接链接已复制到粘贴板!
按照以下步骤部署使用 DPDK 的超融合 overcloud。
先决条件
- Red Hat OpenStack Platform (RHOSP) 16.2。
- 最新版本的 Red Hat Ceph Storage 4。
-
ceph-ansible4 的最新版本,如rhceph-4-tools-for-rhel-8-x86_64-rpms存储库提供。
流程
在 undercloud 上安装
ceph-ansible:$ sudo yum install ceph-ansible -y为 Controller 和 ComputeHCIOvsDpdk 角色生成
roles_data.yaml文件。$ openstack overcloud roles generate -o ~/<templates>/roles_data.yaml \ Controller ComputeHCIOvsDpdk使用
openstack flavor create和openstack flavor set命令创建和配置新类别。有关更多信息,请参阅高级 Overcloud 自定义指南中的创建新角色。https://access.redhat.com/documentation/zh-cn/red_hat_openstack_platform/16.2/html/advanced_overcloud_customization/assembly_composable-services-and-custom-roles#proc_creating-a-new-role_composable-services-and-custom-roles
使用您生成的自定义
roles_data.yaml文件部署 overcloud。示例
$ openstack overcloud deploy --templates \ --timeout 360 \ -r ~/<templates>/roles_data.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/\ cephadm/cephadm-rbd-only.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/services-docker/neutron-ovs-dpdk.yaml \ -e ~/<templates>/<custom environment file>重要本例在没有 Ceph RGW (对象存储)的情况下部署 Ceph RBD (块存储)。要在部署中包含 RGW,请使用
cephadm.yaml而不是cephadm-rbd-only.yaml。