9.7. HCI 및 DPDK를 사용하여 오버클라우드 배포
최적화된 리소스 사용을 위해 Compute 및 Ceph Storage 서비스를 함께 찾고 구성하여 하이퍼컨버지드 노드를 사용하여 NFV 인프라를 배포할 수 있습니다.
HCI(하이퍼 컨버지드 인프라)에 대한 자세한 내용은 다음을 참조하십시오. 하이퍼 컨버지드 인프라 가이드
사전 요구 사항
- Red Hat OpenStack Platform 16.1.
- 최신 버전의 Red Hat Ceph Storage 4.
-
rhceph-4-tools-for-rhel-8-x86_64-rpms 리포지토리에서 제공하는 최신 버전의 ceph-ansible 4입니다.
절차
언더클라우드에
ceph-ansible을 설치합니다.$ sudo yum install ceph-ansible -y
ComputeHCI 역할에
대한 roles_data.yaml파일을 생성합니다.$ openstack overcloud roles generate -o ~/<templates>/roles_data.yaml Controller \ ComputeHCIOvsDpdk
-
openstack flavor
create 및 openstack flavorset 명령을 사용하여 새 플레이버를생성하고 구성합니다. 플레이버 생성에 대한 자세한 내용은 Advanced Overcloud Customization Guide의 Create a new role(새 역할 만들기 )을 참조하십시오. 생성한 사용자 지정
roles_data.yaml파일을 사용하여 오버클라우드를 배포합니다.# time openstack overcloud deploy --templates \ --timeout 360 \ -r ~/<templates>/roles_data.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/ceph-ansible/ceph-ansible.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>
9.7.1. NUMA 노드 구성 예
성능을 높이기 위해 테넌트 네트워크 및 Ceph 개체 서비스 데몬(OSD)을 NUMA-0과 같은 하나의 NUMA 노드에 배치하고 VNF 및 모든 NFV VM을 NUMA-1과 같은 다른 NUMA 노드에 배치합니다.
CPU 할당:
| NUMA-0 | NUMA-1 |
|---|---|
| Ceph OSD 수 * 4 HT | VNF 및 비 NFV VM의 게스트 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 |
9.7.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" # 1
# cpu_limit 0 means no limit as we are limiting CPUs with cpuset above
ceph_osd_docker_cpu_limit: 0 # 2
# 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" # 3
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: SSD 디스크에 대해 각 OSD에 대해 4개의 CPU 스레드를 할당하거나, HDD 디스크의 각 OSD에 대해 CPU 1개를 할당합니다. ceph와 연결된 NUMA 노드의 코어 및 시블링 스레드 목록과 세 가지 목록에 없는 CPU를 포함합니다.
NovaComputeCpuDedicatedSet, andOvsPmdCoreList. - 2
- ceph_osd_docker_cpu_limit: ceph OSD를
ceph_osd_docker_cpuset_cpus의 CPU 목록에 고정하려면 이 값을0으로 설정합니다. - 3
- ceph_osd_numactl_opts: 이 값을 예방 조치로
cross-NUMA 작업에 사용하도록 설정합니다.
9.7.3. DPDK 구성 파일 예
parameter_defaults:
ComputeHCIParameters:
KernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=240 intel_iommu=on iommu=pt # 1
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
”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" # 3
OvsDpdkMemoryChannels: "4"
OvsPmdCoreList: "2,46,3,47" # 4
NumDpdkInterfaceRxQueues: 1- 1
- KernelArgs:
hugepages를계산하려면 총 메모리에서NovaReservedHostMemory매개변수 값을 풉니다. - 2
- IsolCpusList: 이 매개변수를 사용하여 호스트 프로세스에서 격리할 CPU 코어 세트를 할당합니다.
OvsPmdCoreList매개변수 값을NovaComputeCpuDedicatedSet매개변수 값에 추가하여IsolCpusList매개변수 값을 계산합니다. - 3
- OvsDpdkSocketMemory:
OvsDpdkSocketMemory매개변수를 사용하여 NUMA 노드당 hugepage 풀에서 사전 할당할 메모리 양을 지정합니다. OVS-DPDK 매개변수 계산에 대한 자세한 내용은 ovsdpdk 매개변수를참조하십시오. - 4
- OvsPmdCoreList: 이 매개변수와 함께 DPDK 폴링 모드 드라이버(PMD)에 사용되는 CPU 코어를 지정합니다. DPDK 인터페이스의 로컬 NUMA 노드와 연결된 CPU 코어를 선택합니다. 각 NUMA 노드에 2개의 HT 시블링 스레드를 할당하여
OvsPmdCoreList매개변수 값을 계산합니다.
9.7.4. nova 구성 파일 예
parameter_defaults:
ComputeHCIExtraConfig:
nova::cpu_allocation_ratio: 16 # 2
NovaReservedHugePages: # 1
- node:0,size:1GB,count:4
- node:1,size:1GB,count:4
NovaReservedHostMemory: 123904 # 2
# All left over cpus from NUMA-1
NovaComputeCpuDedicatedSet: # 3
['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매개변수를 사용하여 hugepage 풀에서 MB의 메모리를 사전 할당합니다.OvsDpdkSocketMemory매개 변수의 값과 동일한 메모리입니다. - 2
- NovaReservedHostMemory:
NovaReservedHostMemory매개 변수를 사용하는 호스트에서 작업을 위해 MB 단위의 메모리를 예약합니다. 다음 지침을 사용하여 예약해야 하는 메모리 양을 계산합니다.- 각 OSD에 대해 5GB.
- 각 VM에 대한 0.5GB 오버헤드.
- 4GB: 일반 호스트 처리용. 교차 NUMA OSD 작업으로 인한 잠재적인 성능 저하를 방지하기 위해 충분한 메모리를 할당했는지 확인합니다.
- 3
- NovaComputeCpuDedicatedSet:
NovaComputeCpuDedicatedSet매개변수가 있는OvsPmdCoreList또는Ceph_osd_docker_cpuset_cpus에서 찾을 수 없는 CPU를 나열합니다. CPU는 DPDK NIC와 동일한 NUMA 노드에 있어야 합니다.
9.7.5. HCI-DPDK 배포에 권장되는 설정
표 9.1. HCI 배포에 대한 조정 가능한 매개변수
| 블록 장치 유형 | OSD, 메모리, 장치당 vCPU |
|---|---|
| NVMe |
메모리 : OSD당 5GB |
| SSD |
메모리 : OSD당 5GB |
| HDD |
메모리 : OSD당 5GB |
다음 기능에 동일한 NUMA 노드를 사용합니다.
- 디스크 컨트롤러
- 스토리지 네트워크
- 스토리지 CPU 및 메모리
DPDK 공급자 네트워크의 다음 기능에 다른 NUMA 노드를 할당합니다.
- NIC
- PMD CPUs
- 소켓 메모리