본문 바로가기
허브 살리기 프로젝트

CPU Pinning

by jay-choe 2024. 2. 14.

 

하나의 어플리케이션이 작업을 병렬적으로 처리하기 위해 물리 코어 수로 작업 단위를 나누고

이 작업을 처리하는 Worker Thread가 물리 코어 수만큼 존재하는 경우 Worker Thread들은 매번 코어들이 바뀌면서 스케줄링 된다.

 

이렇게 되면 다른 코어에 스케줄링 될 때마다 CPU cache의 hit rate가 낮아지게 된다.

 

다르게 말하면 Worker Thread 혹은 Process들을 각각의 코어에 고정 할당하게 된다면 CPU cache의 hit rate가 높아져서 기존보다 성능 향상에 도움이 될 것이다.

 

CPU intensive한 작업의 경우 이는 유의미한 차이를 보인다.

 

이렇게 특정 코어에 프로세스나 쓰레드를 고정시키는 것을 CPU Pinning이라고 한다.

 

CPU PinningProcessor Affinity(CPU Affinity)를 통해 구현된다.

 

 

 

Processor Affinity

운영체제가 특정 코어에 특정 프로세스나 쓰레드를 할당하는 방식이다.

 

Processor Affinity는 특정 코어에 작업을 고정하므로 다음과 같은 이점이 있다.

 

  • 성능 최적화
    • 위의 예시에서 특정 프로세스가 특정 CPU 코어에 할당되면 cache hit rate이 높아진다.
  • 부하 분산
    • 특정 코어가 과부하되는 것을 방지하며 전체 시스템의 부하를 여러 코어로 균등하게 배분 할 수 있다.
  • 에너지 절약
    • ARM의 big.LITTLE 아키텍처의 경우 Processor Affinity를 통해서 에너지를 절약 할 수 있다.
      • 해당 아키텍처는 상대적으로 전력 소모가 적은 저성능 코어(LITTLE)와 전력 소모가 큰 고성능 코어(big)를 혼합하는 방식이다.
      • 상대적으로 고성능 CPU 작업이 필요하지 않은 백그라운드 작업들(배경 음악 재생, 알림등)을 저성능 코어에 pinning하고
      • 고성능 CPU 작업이 필요한 부분들 (게임, 데이터처리 등)을 고성능 코어에 pinning하면 에너지를 절약 할 수 있을 것이다.

 

정리

CPU Pinning은 멀티 프로세서 환경에서 상당한 장점이 있으며 이는 운영체제의 Processor Affinity를 통해서 설정할 수 있다.

 

물론 특정 코어에 작업이 몰리게 하는 등 잘못 된 설정으로 인한 리스크도 있겠지만, 용도에 맞게 적절히 잘 사용한다면 자원을 효율적으로 사용하는 것이라고 볼 수 있다.

 

 

 

참고

 

'허브 살리기 프로젝트' 카테고리의 다른 글

MySQL UTF8MB4  (0) 2024.02.19
DB가 내부 망에 존재하는 이유  (1) 2024.02.17
Connection Timeout Monitoring in Connection Pool  (1) 2024.02.11
Idle in ALB, Connection Pool  (1) 2024.02.07
TCP, HTTP/HTTPS keep-alive  (1) 2024.02.05