Pinterest, 좀비 cgroup과의 사투: CPU 병목 현상 해결기

by DD
1개월 전
조회수 18

Pinterest의 ML 훈련 작업(Training Jobs) 중 네트워크 연결 문제로 인한 작업 실패(Job Failure) 발생

AWS ENA 네트워크 드라이버(ENA Network Driver)의 리셋(Reset) 현상과 높은 CPU 사용률(CPU Utilization)이 문제의 원인으로 지목됨

perf, mpstat, Flamescope 등 프로파일링 도구를 활용하여 Kubelet 프로세스(Kubelet Process)가 과도한 CPU 자원을 사용함을 확인

ECS 에이전트(ECS Agent)의 지속적인 실패로 인해 좀비 메모리 cgroup(Zombie Memory cgroup)이 생성되어 CPU 병목 현상 유발

ECS 에이전트 비활성화 및 시스템 재부팅을 통해 문제 해결(Problem Resolution), 시스템 안정성 확보

ENA 네트워크 드라이버(ENA Network Driver) 리셋(Reset) 현상 분석

본문에 따르면 Pinterest는 AWS EC2 인스턴스(Instance)에서 ENA 네트워크 드라이버(ENA Network Driver)를 사용하며, ML 훈련 작업 중 네트워크 연결 문제 발생 시 드라이버 리셋(Reset) 현상이 관찰되었다.

ENA 드라이버 리셋: 5초 이상 CPU 점유(CPU Consumption) 시 발생하는 자가 치유 메커니즘(Self-healing Mechanism)

문제 원인: CPU 자원 부족으로 인한 드라이버 스레드(Driver Thread) 기아(Starvation), 패킷 손실(Packet Loss) 발생

해결 과정: CPU 사용률(CPU Utilization)을 높이는 프로세스(Process)를 찾아내고, ECS 에이전트(ECS Agent) 비활성화 및 시스템 재부팅을 통해 해결

결과적으로 네트워크 드라이버(Network Driver) 리셋은 CPU 자원 부족으로 인한 문제이며, 시스템 전반의 CPU 사용률(CPU Utilization) 관리가 중요하다.

프로파일링 도구(Profiling Tool) 활용: perf, mpstat, Flamescope

Pinterest는 CPU 병목 현상(CPU Bottleneck)의 원인을 찾기 위해 다양한 프로파일링 도구(Profiling Tool)를 활용했다. perf, mpstat, Flamescope를 사용하여 문제 해결에 접근했다.

perf: CPU 사용량(CPU Usage) 분석을 위한 기본 도구, 핫 스팟(Hotspot) 코드 경로 식별

mpstat: 코어별 CPU 사용률(CPU Utilization)을 초 단위로 측정하여 특정 코어(Core)의 과도한 사용(Excessive Usage) 확인

Flamescope: 시간 여행(Time Travel) 기능을 통해 특정 시점의 CPU 스택(CPU Stack)을 시각화하여 Kubelet 프로세스(Kubelet Process)의 문제점을 발견

결론적으로, 프로파일링 도구(Profiling Tool)를 적절히 활용하면 시스템 성능 문제의 근본 원인(Root Cause)을 효과적으로 파악할 수 있다.

좀비 메모리 cgroup(Zombie Memory cgroup) 문제와 해결

본문에서는 Kubelet 프로세스(Kubelet Process)가 과도한 CPU 자원을 사용하게 된 원인으로 좀비 메모리 cgroup(Zombie Memory cgroup) 문제를 지목한다.

좀비 cgroup: 삭제되지 않은 메모리 cgroup(Memory cgroup)이 커널(Kernel)에 남아 있어 시스템 자원 낭비

문제 발생 원인: AWS Deep Learning AMI(Deep Learning AMI)의 기본 설정으로 인한 ECS 에이전트(ECS Agent)의 지속적인 실패

해결 방법: ECS 에이전트(ECS Agent) 비활성화 및 시스템 재부팅을 통해 좀비 cgroup 제거(Zombie cgroup Removal)

결과적으로, 시스템 기본 설정(System Default)에 대한 이해 부족은 예기치 않은 문제를 발생시킬 수 있으며, 지속적인 모니터링(Continuous Monitoring)을 통해 문제를 조기에 감지해야 한다.

가용 영역(Availability Zone) 간의 문제 차이 분석

Pinterest는 동일한 환경(Identical Environment)에서 특정 가용 영역(Availability Zone)에서만 네트워크 문제(Network Issue)가 발생하는 것을 확인하고, 그 원인을 분석했다.

문제 상황: 동일한 Kubernetes 클러스터(Kubernetes Cluster) 설정에도 불구하고 특정 AZ(Availability Zone)에서만 네트워크 리셋(Network Reset) 발생

원인 분석: 서로 다른 URL을 통해 Kubernetes 바이너리(Kubernetes Binary)를 배포하여 ECS 에이전트(ECS Agent)의 실행 여부 차이 발생

교훈: 환경 설정의 미세한 차이(Subtle Difference)가 문제를 발생시킬 수 있으며, 자동화된 툴링(Automated Tooling)을 통한 환경 일치(Environment Consistency) 유지가 중요

결론적으로, 시스템의 모든 구성 요소(Component)에 대한 정확한 이해와 환경 간의 일관성(Consistency) 유지가 문제 해결의 핵심이다.

Pinterest의 시스템 문제 해결 과정에서 얻은 교훈

Pinterest는 CPU 병목 현상(CPU Bottleneck) 문제를 해결하는 과정에서 얻은 교훈을 공유하며, 시스템 운영의 중요성을 강조한다.

문제 감지: 플랫폼 차원의 지표(Fleet-wide Metrics) 도입을 통해 문제 패턴(Failure Pattern) 식별

문제 재현: PinCompute와 ML 플랫폼 팀 간의 협업을 통해 재현 가능한 환경(Reproducible Environment) 구축

프로파일링 도구 활용: 시간 기반 프로파일링 도구(Temporal Profiling Tool) 활용을 통해 문제 해결 시간 단축

기본 설정 이해: 기본 OS 이미지(Base OS Image)에서 실행되는 프로세스(Process)에 대한 이해의 중요성 강조

결과적으로, 시스템 문제 해결을 위해서는 다양한 도구와 기술을 활용하고, 문제 발생 원인에 대한 깊이 있는 이해가 필요하다.

Finding zombies in our systems: A real-world story of CPU bottlenecks

댓글 0

첫 번째 댓글을 남겨보세요!