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입니다.
절차
  1. 언더클라우드에 ceph-ansible 을 설치합니다.

    $ sudo yum install ceph-ansible -y
  2. ComputeHCI 역할에 대한 roles_data.yaml 파일을 생성합니다.

    $ openstack overcloud roles generate -o ~/<templates>/roles_data.yaml Controller \
     ComputeHCIOvsDpdk
  3. openstack flavor create 및 openstack flavor set 명령을 사용하여 새 플레이버를 생성하고 구성합니다. 플레이버 생성에 대한 자세한 내용은 Advanced Overcloud Customization Guide의 Create a new role(새 역할 만들기 )을 참조하십시오.
  4. 생성한 사용자 지정 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-0NUMA-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-0NUMA-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, and OvsPmdCoreList.
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
장치당 OSD: 4
장치당 vCPU: 3

SSD

메모리 : OSD당 5GB
장치당 OSD: 1
장치당 vCPU: 4

HDD

메모리 : OSD당 5GB
장치당 OSD: 1
장치당 vCPU: 1

다음 기능에 동일한 NUMA 노드를 사용합니다.

  • 디스크 컨트롤러
  • 스토리지 네트워크
  • 스토리지 CPU 및 메모리

DPDK 공급자 네트워크의 다음 기능에 다른 NUMA 노드를 할당합니다.

  • NIC
  • PMD CPUs
  • 소켓 메모리