본문 바로가기
HPC

[HPC] CPU 성능 분석

by Yoon_estar 2025. 1. 24.
728x90

개요

HPC(고성능 컴퓨팅) 환경에서 CPU는 시스템 성능을 좌우하는 핵심 요소입니다. 모든 연산과 데이터 처리가 CPU를 통해 이루어지기 때문에, CPU 성능을 이해하고 최적화하는 것은 HPC 엔지니어에게 필수적인 역량입니다. 이 글에서는 CPU 성능 분석의 주요 개념과 기법을 정리하며, 이를 HPC 환경에 적용할 수 있는 방향을 제시합니다.

 

1. CPU 성능 분석의 중요성

CPU는 소프트웨어와 하드웨어 간의 인터페이스 역할을 하며, 모든 프로세스 실행을 담당합니다. 특히, HPC 환경에서는 다수의 프로세스와 스레드가 병렬로 실행되므로 CPU 성능이 병목 현상을 방지하는 데 중요한 역할을 합니다.

CPU 성능 분석 시 주요 초점은 다음과 같습니다:

  • 클럭 속도: 명령어 실행 속도를 결정.
  • 프로세스 기술: CPU의 전력 효율성과 집적도를 결정.
  • 코어와 스레드: 병렬 처리를 위한 물리적, 논리적 리소스.
  • 스케줄링: CPU 자원을 효율적으로 분배.

 

2. CPU 성능 요소 상세 분석

1) 클럭 속도

CPU 클럭 속도는 초당 실행할 수 있는 사이클 수를 의미합니다. 클럭 속도가 높을수록 명령어 실행 속도가 빨라지지만, 전력 소모와 발열도 증가합니다.

  • 속도 조정 기술:
    • x86 프로세서: P-State를 통해 클럭 조정.
    • ARM 프로세서: DVFS(Dynamic Voltage and Frequency Scaling) 기술 활용.
  • 클라우드 환경의 클럭 속도:
    • 클럭 속도는 일부 인스턴스에서만 조정 가능.
    • 클럭 기반 과금이 아닌 시간 단위 과금이 일반적.

2) 하이퍼스레딩

인텔의 하이퍼스레딩(Hyper-Threading) 또는 AMD의 SMT(Simultaneous MultiThreading)는 물리 코어 하나에서 둘 이상의 스레드를 실행할 수 있게 합니다. 이를 통해 최대 30%의 성능 향상이 가능하지만, 최적화되지 않은 코드에서는 오히려 성능 저하가 발생할 수 있습니다.

  • 운영체제 관점:
    • 2코어 4스레드의 CPU는 4개의 논리 코어로 인식.
  • 클라우드 환경의 하이퍼스레딩:
    • 예: AWS r4.2xlarge 인스턴스는 물리 코어 4개, 논리 프로세서 8개로 구성.

 

3) CPU 사용률

CPU 사용률은 특정 시간 동안 CPU가 작업을 수행한 비율로 나타냅니다.

  • 사용률 분석:
    • 높은 사용률은 시스템 성능의 병목을 유발할 수 있으나, 낮은 사용률은 리소스 낭비로 이어질 수 있습니다.
    • CPU 사용률이 100%라도 대부분의 경우 성능 저하는 크지 않음.
  • 사용자/커널 시간:
    • 사용자 시간: 애플리케이션 코드 실행.
    • 커널 시간: 운영체제 코드 실행.
    • HPC에서는 계산 중심 애플리케이션의 경우 사용자/커널 시간이 99/1 비율에 가까움.

 

3. CPU 스케줄링

CPU 스케줄러는 실행 중인 프로세스 간에 CPU 시간을 효율적으로 분배합니다. 리눅스 환경에서 주요 스케줄링 방식은 다음과 같습니다:

1) 리눅스 CFS 스케줄러

리눅스 커널 2.6.23부터 도입된 CFS(Completely Fair Scheduler)는 공정성을 기반으로 프로세스를 스케줄링합니다.

  • 가중치 기반 스케줄링:
    • 가중치와 이전 실행 시간을 기반으로 다음 실행 시간을 계산.
    • 프로세스의 vruntime 값을 레드-블랙 트리로 관리.
  • I/O 중심 vs CPU 중심 프로세스:
    • I/O 중심 프로세스는 대기 시간이 많아 낮은 vruntime을 가지므로 높은 응답성을 보장받음.

2) 실시간 스케줄링

  • 실시간 프로세스는 높은 우선순위를 가지며, FIFO 또는 라운드로빈 방식으로 스케줄링됩니다.
  • HPC에서는 고정된 우선순위의 실시간 작업을 설정해 병렬 작업을 최적화할 수 있습니다.

 

4. CPU 성능 분석 도구

HPC 환경에서 CPU 성능을 분석하는 데 유용한 리눅스 도구는 다음과 같습니다

 

도구 주요 기능
top 프로세스 / 스레드 별 CPU 사용률 실시간 확인
ps 프로세스 상태 확인
vmstat 시스템 전체 CPU 사용률 평균 표시
pidstat 프로세스 / 스레드 별 CPU 사용률 구분
perf CPU 성능 카운터 분석 및 트레이싱
mpstat CPU별 사용 통계 제공
sar 과거 CPU 사용 기록 분석

 

실습 (perf와 FlameGraph로 CPU 사용 시각화)

  1. 데이터 수집
    • perf를 사용해 CPU 성능 데이터를 수집합니다.
  2. 시각화
    • FlameGraph를 활용해 함수 단위의 CPU 사용을 시각화합니다.
  3. 예제
# perf record -g ./your_program
# perf script | ./flamegraph.pl > output.svg

 

5. HPC 환경에서 CPU 최적화

1) CPU 바인딩

HPC 작업에서 CPU 바인딩은 성능 최적화의 핵심입니다. 작업을 특정 코어에 고정해 캐시 효율성을 높일 수 있습니다.

  • SLURM에서는 --cpu-bind 옵션을 활용.

2) 하이퍼스레딩 최적화

하이퍼스레딩이 활성화된 환경에서는 HPC 작업의 병렬성을 최대화할 수 있지만, 필요에 따라 비활성화해 성능을 안정화할 수도 있습니다.

3) 고급 벡터 확장(AVX)

고급 벡터 확장(Advanced Vector Extensions, AVX)은 CPU가 하나의 명령어로 다수의 데이터를 처리할 수 있도록 돕는 기술입니다. 특히 과학 계산이나 머신러닝 워크로드에서 성능을 크게 향상시킬 수 있습니다.

  • 활용 방안:
    • 지원 여부 확인: cat /proc/cpuinfo 명령어를 사용해 AVX 지원 여부 확인.
    • 최적화된 라이브러리 사용: AVX 명령어를 활용한 라이브러리(OpenBLAS, MKL 등)를 활용해 성능 개선.