3장. 성능을 위해 컴퓨팅 노드 구성
클라우드 관리자는 NFV 및 HPC(고성능 컴퓨팅)를 포함한 특수 워크로드를 대상으로 하는 맞춤형 플레이버를 만들어 최적의 성능을 위해 인스턴스의 스케줄링 및 배치를 구성할 수 있습니다.
다음 기능을 사용하여 최적의 성능을 위해 인스턴스를 조정합니다.
- CPU 고정: 가상 CPU를 물리적 CPU에 고정.
- 에뮬레이터 스레드: 인스턴스와 연결된 에뮬레이터 스레드를 물리적 CPU에 고정합니다.
- 대규모 페이지: 일반 메모리(4k 페이지) 및 대규모 페이지(2MB 또는 1GB 페이지)에 대해 인스턴스 메모리 할당 정책을 조정합니다.
이러한 기능을 구성하면 NUMA 토폴로지가 이미 없는 경우 인스턴스에 암시적 NUMA 토폴로지가 생성됩니다.
3.1. 컴퓨팅 노드에서 CPU 고정 구성 링크 복사링크가 클립보드에 복사되었습니다!
컴퓨팅 노드에서 CPU 고정을 활성화하여 전용 호스트 CPU에서 실행되도록 각 인스턴스 CPU 프로세스를 구성할 수 있습니다. 인스턴스에서 CPU 고정을 사용하는 경우 각 인스턴스 vCPU 프로세스에 다른 인스턴스 vCPU 프로세스가 사용할 수 없는 고유한 호스트 pCPU가 할당됩니다. CPU 고정이 활성화된 Compute 노드에서 실행되는 인스턴스에는 NUMA 토폴로지가 있습니다. 인스턴스 NUMA 토폴로지의 각 NUMA 노드는 호스트 Compute 노드의 NUMA 노드에 매핑됩니다.
동일한 컴퓨팅 노드에서 공유(유동) CPU를 사용하여 전용(고정) CPU를 사용하여 인스턴스를 예약하도록 Compute 스케줄러를 구성할 수 있습니다. NUMA 토폴로지가 있는 컴퓨팅 노드에서 CPU 고정을 구성하려면 다음을 완료해야 합니다.
- CPU 고정을 위해 컴퓨팅 노드 지정.
- 고정 인스턴스 vCPU 프로세스, 유동 인스턴스 vCPU 프로세스 및 호스트 프로세스에 대한 호스트 코어를 예약하도록 계산 노드를 구성합니다.
- Overcloud를 배포합니다.
- CPU 고정이 필요한 인스턴스를 시작하기 위한 플레이버를 만듭니다.
- 공유 또는 유동 CPU를 사용하는 인스턴스를 시작하기 위한 플레이버를 만듭니다.
3.1.1. 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
- Compute 노드의 NUMA 토폴로지를 알고 있습니다.
3.1.2. CPU 고정을 위해 컴퓨팅 노드 지정 링크 복사링크가 클립보드에 복사되었습니다!
고정 CPU가 있는 인스턴스의 Compute 노드를 지정하려면 CPU 고정 역할을 구성하는 새 역할 파일을 생성하고 CPU 고정을 위해 Compute 노드를 태그하는 데 사용할 새 오버클라우드 플레이버 및 CPU 고정 리소스 클래스를 구성해야 합니다.
절차
-
stack사용자로 언더클라우드에 로그인합니다. stackrc파일을 소싱합니다.source ~/stackrc
[stack@director ~]$ source ~/stackrcCopy to Clipboard Copied! Toggle word wrap Toggle overflow Controller,Compute 및 ComputeCPUPinning역할이 포함된roles_data_cpu_pinning.yaml이라는 새 역할 데이터 파일을 생성합니다.openstack overcloud roles \ generate -o /home/stack/templates/roles_data_cpu_pinning.yaml \ Compute:ComputeCPUPinning Compute Controller
(undercloud)$ openstack overcloud roles \ generate -o /home/stack/templates/roles_data_cpu_pinning.yaml \ Compute:ComputeCPUPinning Compute ControllerCopy to Clipboard Copied! Toggle word wrap Toggle overflow roles_data_cpu_pinning.yaml을 열고 다음 매개변수 및 섹션을 편집하거나 추가합니다.Expand 섹션/패랜드 현재 값 새 값 역할 설명
역할: 컴퓨팅역할: ComputeCPUPinning역할 이름
name: 컴퓨팅name: ComputeCPUPinningdescription기본 컴퓨팅 노드 역할CPU 고정 컴퓨팅 노드 역할HostnameFormatDefault%stackname%-novacompute-%index%%stackname%-novacomputepinning-%index%deprecated_nic_config_namecompute.yamlcompute-cpu-pinning.yaml-
노드 정의 템플릿 node.
json 또는 node.yaml에 추가하여 오버클라우드의 CPU 고정 컴퓨팅 노드를등록합니다. 자세한 내용은 Director 설치 및 사용 가이드 의 오버클라우드용 노드 등록을 참조하십시오. 노드 하드웨어를 검사합니다.
openstack overcloud node introspect \ --all-manageable --provide
(undercloud)$ openstack overcloud node introspect \ --all-manageable --provideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 자세한 내용은 Director 설치 및 사용 가이드 의 베어 메탈 노드 하드웨어 인벤토리 생성을 참조하십시오.
CPU 고정 Compute 노드에 대해
compute-cpu-pinningovercloud 플레이버를 생성합니다.openstack flavor create --id auto \ --ram <ram_size_mb> --disk <disk_size_gb> \ --vcpus <no_vcpus> compute-cpu-pinning
(undercloud)$ openstack flavor create --id auto \ --ram <ram_size_mb> --disk <disk_size_gb> \ --vcpus <no_vcpus> compute-cpu-pinningCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
<ram_size_mb>를 베어 메탈 노드의 RAM(MB)으로 바꿉니다. -
<disk_size_gb>를 베어 메탈 노드의 디스크 크기(GB)로 바꿉니다. <no_vcpus>를 베어 메탈 노드의 CPU 수로 바꿉니다.참고이러한 속성은 인스턴스를 예약하는 데 사용되지 않습니다. 그러나 계산 스케줄러는 디스크 크기를 사용하여 루트 파티션 크기를 결정합니다.
-
노드 목록을 검색하여 UUID를 확인합니다.
openstack baremetal node list
(undercloud)$ openstack baremetal node listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 사용자 정의 CPU 고정 리소스 클래스를 사용하여 CPU 고정을 지정할 각 베어 메탈 노드에 태그를 지정합니다.
openstack baremetal node set \ --resource-class baremetal.CPU-PINNING <node>
(undercloud)$ openstack baremetal node set \ --resource-class baremetal.CPU-PINNING <node>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <node>를 베어 메탈 노드의 ID로 바꿉니다.compute-cpu-pinning플레이버를 사용자 지정 CPU 고정 리소스 클래스와 연결합니다.openstack flavor set \ --property resources:CUSTOM_BAREMETAL_CPU_PINNING=1 \ compute-cpu-pinning
(undercloud)$ openstack flavor set \ --property resources:CUSTOM_BAREMETAL_CPU_PINNING=1 \ compute-cpu-pinningCopy to Clipboard Copied! Toggle word wrap Toggle overflow 베어 메탈 서비스 노드의 리소스 클래스에 해당하는 사용자 지정 리소스 클래스의 이름을 확인하려면 리소스 클래스를 대문자로 변환하려면 각 문장 부호 표시를 밑줄로 바꾸고 접두사는
CUSTOM_로 바꿉니다.참고플레이버는 베어 메탈 리소스 클래스의 인스턴스 하나만 요청할 수 있습니다.
Compute 스케줄러가 베어 메탈 플레이버 속성을 사용하여 인스턴스를 예약하지 못하도록 다음 플레이버 속성을 설정합니다.
openstack flavor set \ --property resources:VCPU=0 \ --property resources:MEMORY_MB=0 \ --property resources:DISK_GB=0 compute-cpu-pinning
(undercloud)$ openstack flavor set \ --property resources:VCPU=0 \ --property resources:MEMORY_MB=0 \ --property resources:DISK_GB=0 compute-cpu-pinningCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항:
ComputeCPUPinning 역할의 네트워크 토폴로지가 Compute역할의 네트워크 토폴로지와 다른 경우 사용자 지정 네트워크 인터페이스 템플릿을생성합니다. 자세한 내용은 Advanced Overcloud Customization 가이드의 Custom network interface templates 를 참조하십시오.ComputeCPUPinning역할의 네트워크 토폴로지가Compute역할과 동일한 경우compute.yaml에 정의된 기본 네트워크 토폴로지를 사용할 수 있습니다.network-environment.yaml 파일에서ComputeCPUPinning역할의Net::SoftwareConfig를 등록합니다.resource_registry: OS::TripleO::Compute::Net::SoftwareConfig: /home/stack/templates/nic-configs/compute.yaml OS::TripleO::ComputeCPUPinning::Net::SoftwareConfig: /home/stack/templates/nic-configs/<cpu_pinning_net_top>.yaml OS::TripleO::Controller::Net::SoftwareConfig: /home/stack/templates/nic-configs/controller.yaml
resource_registry: OS::TripleO::Compute::Net::SoftwareConfig: /home/stack/templates/nic-configs/compute.yaml OS::TripleO::ComputeCPUPinning::Net::SoftwareConfig: /home/stack/templates/nic-configs/<cpu_pinning_net_top>.yaml OS::TripleO::Controller::Net::SoftwareConfig: /home/stack/templates/nic-configs/controller.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow <cpu_pinning_net_top>을ComputeCPUPinning역할의 네트워크 토폴로지가 포함된 파일 이름으로 바꿉니다(예: 기본 네트워크 토폴로지를 사용하려면compute.yaml).다음 매개변수를
node-info.yaml파일에 추가하여 CPU 고정 컴퓨팅 노드 수와 CPU 고정 지정된 컴퓨팅 노드에 사용할 플레이버를 지정합니다.parameter_defaults: OvercloudComputeCPUPinningFlavor: compute-cpu-pinning ComputeCPUPinningCount: 3
parameter_defaults: OvercloudComputeCPUPinningFlavor: compute-cpu-pinning ComputeCPUPinningCount: 3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 역할이 생성되었는지 확인하려면 다음 명령을 입력합니다.
openstack baremetal node list --long -c "UUID" \ -c "Instance UUID" -c "Resource Class" -c "Provisioning State" \ -c "Power State" -c "Last Error" -c "Fault" -c "Name" -f json
(undercloud)$ openstack baremetal node list --long -c "UUID" \ -c "Instance UUID" -c "Resource Class" -c "Provisioning State" \ -c "Power State" -c "Last Error" -c "Fault" -c "Name" -f jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.3. CPU 고정을 위한 컴퓨팅 노드 구성 링크 복사링크가 클립보드에 복사되었습니다!
노드의 NUMA 토폴로지를 기반으로 Compute 노드에서 CPU 고정을 구성합니다. 호스트 프로세스의 효율성을 위해 모든 NUMA 노드에서 일부 CPU 코어를 예약합니다. 나머지 CPU 코어를 인스턴스 관리에 할당합니다.
이 절차에서는 CPU 고정 구성 방법을 설명하기 위해 8개의 CPU 코어가 2개의 NUMA 노드에 분산되어 있는 다음 NUMA 토폴로지를 사용합니다.
| NUMA 노드 0 | NUMA 노드 1 | ||
| 코어 0 | 코어 1 | 코어 2 | 코어 3 |
| 코어 4 | 코어 5 | 코어 6 | 코어 7 |
이 절차에서는 코어 0 및 4를 호스트 프로세스, 코어 1, 3, 5, 7을 CPU 고정이 필요한 인스턴스에 대해 예약하고, CPU 고정이 필요하지 않은 유동 인스턴스에 대해 코어 2 및 6을 예약합니다.
절차
-
환경 파일을 만들어 고정된 인스턴스, 유동 인스턴스 및 호스트 프로세스(예:
cpu_pinning.yaml)의 코어를 예약하도록 컴퓨팅 노드를 구성합니다. NUMA 사용 가능한 Compute 노드에 NUMA 토폴로지를 사용하여 인스턴스를 예약하려면 아직 없는 경우 Compute 환경
파일의Filter를 추가합니다.NovaSchedulerDefaultFilter 매개변수에NUMATopologyparameter_defaults: NovaSchedulerDefaultFilters: ['AvailabilityZoneFilter','ComputeFilter','ComputeCapabilitiesFilter','ImagePropertiesFilter','ServerGroupAntiAffinityFilter','ServerGroupAffinityFilter','PciPassthroughFilter','NUMATopologyFilter']
parameter_defaults: NovaSchedulerDefaultFilters: ['AvailabilityZoneFilter','ComputeFilter','ComputeCapabilitiesFilter','ImagePropertiesFilter','ServerGroupAntiAffinityFilter','ServerGroupAffinityFilter','PciPassthroughFilter','NUMATopologyFilter']Copy to Clipboard Copied! Toggle word wrap Toggle overflow NUMATopologyFilter에 대한 자세한 내용은 Compute Scheduler filters를 참조하십시오.전용 인스턴스의 물리적 CPU 코어를 예약하려면
cpu_pinning.yaml에 다음 구성을 추가합니다.parameter_defaults: ComputeCPUPinningParameters: NovaComputeCpuDedicatedSet: 1,3,5,7parameter_defaults: ComputeCPUPinningParameters: NovaComputeCpuDedicatedSet: 1,3,5,7Copy to Clipboard Copied! Toggle word wrap Toggle overflow 공유 인스턴스의 물리적 CPU 코어를 예약하려면
cpu_pinning.yaml에 다음 구성을 추가합니다.parameter_defaults: ComputeCPUPinningParameters: ... NovaComputeCpuSharedSet: 2,6parameter_defaults: ComputeCPUPinningParameters: ... NovaComputeCpuSharedSet: 2,6Copy to Clipboard Copied! Toggle word wrap Toggle overflow 호스트 프로세스에 예약할 RAM 크기를 지정하려면
cpu_pinning.yaml에 다음 설정을 추가합니다.parameter_defaults: ComputeCPUPinningParameters: ... NovaReservedHostMemory: <ram>parameter_defaults: ComputeCPUPinningParameters: ... NovaReservedHostMemory: <ram>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <ram>을 MB로 예약할 RAM 양으로 바꿉니다.호스트 프로세스가 인스턴스에 예약된 CPU 코어에서 실행되지 않도록 하려면
IsolCpusList매개변수를 인스턴스에 예약한 CPU 코어로 설정합니다.parameter_defaults: ComputeCPUPinningParameters: ... IsolCpusList: 1-3,5-7parameter_defaults: ComputeCPUPinningParameters: ... IsolCpusList: 1-3,5-7Copy to Clipboard Copied! Toggle word wrap Toggle overflow 쉼표로 구분된 CPU 인덱스의 목록 또는 범위를 사용하여
IsolCpusList매개변수 값을 지정합니다.다른 환경 파일을 사용하여 스택에 새 역할 및 환경 파일을 추가하고 오버클라우드를 배포합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.4. 인스턴스의 전용 CPU 플레이버 생성 링크 복사링크가 클립보드에 복사되었습니다!
클라우드 사용자가 전용 CPU가 있는 인스턴스를 만들 수 있도록 하려면 인스턴스를 시작하기 위한 전용 CPU 정책으로 플레이버를 만들 수 있습니다.
사전 요구 사항
- 호스트에서 동시 멀티스레딩(SMT)이 활성화됩니다.
- 컴퓨팅 노드는 CPU 고정을 허용하도록 구성되어 있습니다. 자세한 내용은 Compute 노드에서 CPU 고정 구성을 참조하십시오.
절차
overcloudrc파일을 소싱합니다.source ~/overcloudrc
(undercloud)$ source ~/overcloudrcCopy to Clipboard Copied! Toggle word wrap Toggle overflow CPU 고정이 필요한 인스턴스의 플레이버를 생성합니다.
openstack flavor create --ram <size_mb> \ --disk <size_gb> --vcpus <no_reserved_vcpus> pinned_cpus
(overcloud)$ openstack flavor create --ram <size_mb> \ --disk <size_gb> --vcpus <no_reserved_vcpus> pinned_cpusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 고정된 CPU를 요청하려면 플레이버의
hw:cpu_policy속성을 전용으로 설정합니다.openstack flavor set \ --property hw:cpu_policy=dedicated pinned_cpus
(overcloud)$ openstack flavor set \ --property hw:cpu_policy=dedicated pinned_cpusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 스레드 시블링에 각 vCPU를 배치하려면 다음을
요구하도록 플레이버의hw:cpu_thread_policy속성을 설정합니다.openstack flavor set \ --property hw:cpu_thread_policy=require pinned_cpus
(overcloud)$ openstack flavor set \ --property hw:cpu_thread_policy=require pinned_cpusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고-
호스트에 SMT 아키텍처 또는 사용 가능한 스레드 스레딩이 충분한 CPU 코어가 없는 경우 예약에 실패합니다. 이를 방지하려면
require대신hw:cpu_thread_policy를prefer로 설정합니다.prefer정책은 사용 가능한 경우 스레드를 사용하도록 하는 기본 정책입니다. -
hw:cpu_thread_policy=isolate을 사용하는 경우 SMT를 비활성화하거나 SMT를 지원하지 않는 플랫폼을 사용해야 합니다.
-
호스트에 SMT 아키텍처 또는 사용 가능한 스레드 스레딩이 충분한 CPU 코어가 없는 경우 예약에 실패합니다. 이를 방지하려면
검증
플레이버가 전용 CPU가 있는 인스턴스를 생성하는지 확인하려면 새 플레이버를 사용하여 인스턴스를 시작합니다.
openstack server create --flavor pinned_cpus \ --image <image> pinned_cpu_instance
(overcloud)$ openstack server create --flavor pinned_cpus \ --image <image> pinned_cpu_instanceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 새 인스턴스의 올바른 배치를 확인하려면 다음 명령을 입력하고 출력에
OS-EXT-SRV-ATTR:hypervisor_hostname을 확인합니다.openstack server show pinned_cpu_instance
(overcloud)$ openstack server show pinned_cpu_instanceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.6. SMT(동시 멀티스레딩)를 사용하여 컴퓨팅 노드에서 CPU 고정 구성 링크 복사링크가 클립보드에 복사되었습니다!
컴퓨팅 노드가 SMT(동시 멀티스레딩)를 지원하는 경우 전용 또는 공유 집합에 그룹 스레드를 함께 사용합니다. 스레드 스레딩은 몇 가지 일반적인 하드웨어를 공유하므로 한 스레드 시블링에서 프로세스를 실행하여 다른 스레드 스레딩의 성능에 영향을 줄 수 있습니다.
예를 들어 호스트는 SMT가 있는 듀얼 코어 CPU에서 4개의 논리적 CPU 코어를 식별합니다. 0, 1, 2 및 3. 이 4개 중 두 쌍의 스레드 시블링이 있습니다.
- 스레드 시블링 1: 논리 CPU 코어 0 및 2
- 스레드 시블링 2: 논리 CPU 코어 1 및 3
이 시나리오에서는 논리 CPU 코어 0과 1을 전용으로 할당하지 말고 2 및 3을 공유로 할당하지 마십시오. 대신 0과 2를 전용으로 할당하고 1 및 3을 공유로 할당합니다.
파일 /sys/devices/system/cpu/cpuN/topology/thread_siblings_list 여기서 N 은 논리 CPU 번호이며 스레드 쌍을 포함합니다. 다음 명령을 사용하여 스레드 에이전트인 논리적 CPU 코어를 식별할 수 있습니다.
grep -H . /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | sort -n -t ':' -k 2 -u
# grep -H . /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | sort -n -t ':' -k 2 -u
다음 출력은 논리 CPU 코어 0 및 논리적 CPU 코어 2가 동일한 코어의 스레드임을 나타냅니다.
/sys/devices/system/cpu/cpu0/topology/thread_siblings_list:0,2 /sys/devices/system/cpu/cpu2/topology/thread_siblings_list:1,3
/sys/devices/system/cpu/cpu0/topology/thread_siblings_list:0,2
/sys/devices/system/cpu/cpu2/topology/thread_siblings_list:1,3
3.1.7. 추가 리소스 링크 복사링크가 클립보드에 복사되었습니다!
- 네트워크 기능 가상화 계획 및 구성 가이드에서 NUMA 노드 토폴로지 검색.
- 네트워크 기능 가상화 제품 가이드 의 CPU 및 NUMA 노드.