16.5. 인프라 및 애플리케이션 컨테이너의 CPU 제한
일반 하우스키핑 및 워크로드 작업에서는 대기 시간에 민감한 프로세스에 영향을 줄 수 있는 방식으로 CPU를 사용합니다. 기본적으로 컨테이너 런타임은 모든 온라인 CPU를 사용하여 모든 컨테이너를 함께 실행하므로 컨텍스트 스위치와 대기 시간이 급증할 수 있습니다. CPU를 분할하면 대기 시간에 민감한 프로세스를 분리하여 프로세스에서 서로 분리할 수 없습니다. 다음 표에서는 Performance Add-On Operator를 사용하여 노드를 조정한 후 CPU에서 프로세스를 실행하는 방법을 설명합니다.
프로세스 유형 | 세부 정보 |
---|---|
| 대기 시간이 짧은 워크로드가 실행되는 경우를 제외하고 모든 CPU에서 실행 |
인프라 Pod | 대기 시간이 짧은 워크로드가 실행되는 경우를 제외하고 모든 CPU에서 실행 |
인터럽트 | 예약된 CPU로 리디렉션(OpenShift Container Platform 4.7 이상에서 선택 사항) |
커널 프로세스 | 예약된 CPU에 고정 |
대기 시간에 민감한 워크로드 Pod | 분리된 풀에서 특정 전용 CPU 세트에 고정 |
OS 프로세스/systemd 서비스 | 예약된 CPU에 고정 |
모든 QoS 프로세스 유형, Burstable
,BestEffort
또는 Guaranteed
의 Pod에 대한 노드에 있는 코어의 할당 용량은 분리된 풀의 용량과 동일합니다. 예약된 풀의 용량은 클러스터 및 운영 체제 하우스키핑 작업에서 사용하기 위해 노드의 총 코어 용량에서 제거됩니다.
예시 1
노드에는 100개의 코어 용량이 있습니다. 클러스터 관리자는 성능 프로필을 사용하여 격리된 풀에 50개의 코어를 할당하고 예약된 풀에 코어 50개를 할당합니다. 클러스터 관리자는 BestEffort
또는 Burstable
Pod에 대해 QoS Guaranteed
Pod 및 25 코어를 할당합니다. 이는 격리된 풀의 용량과 일치합니다.
예시 2
노드에는 100개의 코어 용량이 있습니다. 클러스터 관리자는 성능 프로필을 사용하여 격리된 풀에 50개의 코어를 할당하고 예약된 풀에 코어 50개를 할당합니다. 클러스터 관리자는 QoS Guaranteed
Pod에 50개의 코어와 BestEffort
또는 Burstable
Pod에 하나의 코어를 할당합니다. 이는 하나의 코어로 격리된 풀의 용량을 초과합니다. CPU 용량이 부족하여 Pod 예약이 실패합니다.
사용할 정확한 파티션 패턴은 하드웨어, 워크로드 특성 및 예상 시스템 로드와 같은 여러 요인에 따라 다릅니다. 일부 샘플 사용 사례는 다음과 같습니다.
- 대기 시간에 민감한 워크로드가 NIC(네트워크 인터페이스 컨트롤러)와 같은 특정 하드웨어를 사용하는 경우 분리된 풀의 CPU가 이 하드웨어에 최대한 가깝게 있는지 확인합니다. 최소한 동일한 NUMA(Non-Uniform Memory Access) 노드에 워크로드를 배치해야 합니다.
- 예약된 풀은 모든 인터럽트를 처리하는 데 사용됩니다. 시스템 네트워킹에 따라 들어오는 모든 패킷 인터럽트를 처리할 수 있도록 충분히 크기 조정된 예약 풀을 할당합니다. 4.7 이상 버전에서는 워크로드에 선택적으로 민감한 것으로 라벨이 지정될 수 있습니다.
예약 및 분리된 파티션에 특정 CPU를 사용해야 하는 결정에는 자세한 분석 및 측정이 필요합니다. 장치 및 메모리의 NUMA 선호도와 같은 요소가 역할을 합니다. 선택 사항은 워크로드 아키텍처 및 특정 사용 사례에 따라 달라집니다.
예약되고 분리된 CPU 풀은 중복되지 않아야 하며 작업자 노드에서 사용 가능한 모든 코어에 걸쳐 있어야 합니다.
하우스키핑 작업 및 워크로드가 서로 간섭하지 않도록 성능 프로필의 spec
섹션에 두 개의 CPU 그룹을 지정합니다.
-
isolated
- 애플리케이션 컨테이너 워크로드에 대한 CPU를 지정합니다. 이러한 CPU는 대기 시간이 가장 짧습니다. 이 그룹의 프로세스에는 중단이 발생하지 않으므로 예를 들어 프로세스가 훨씬 더 높은 DPDK 제로 패킷 손실 대역폭에 도달할 수 있습니다. -
reserved
- 클러스터 및 운영 체제 하우스키핑 작업의 CPU를 지정합니다.예약된
그룹의 스레드는 종종 바쁘다.예약된
그룹에서 대기 시간에 민감한 애플리케이션을 실행하지 마십시오. 대기 시간에 민감한 애플리케이션은격리된
그룹에서 실행됩니다.
프로세스
- 환경의 하드웨어 및 토폴로지에 적합한 성능 프로필을 생성합니다.
인프라 및 애플리케이션 컨테이너에 대해
reserved
및isolated
하려는 CPU와 함께 예약 및 격리된 매개변수를 추가합니다.apiVersion: performance.openshift.io/v2 kind: PerformanceProfile metadata: name: infra-cpus spec: cpu: reserved: "0-4,9" 1 isolated: "5-8" 2 nodeSelector: 3 node-role.kubernetes.io/worker: ""