[Linux]Processor Affinity or CPU Pinning

Jeongkyu(Jun)·2023년 3월 20일
0

Linux

목록 보기
4/4

출처:Intel Docs
출처:selfish-developer.com/
위 출처에서 언급되는 Big/Little 멀티코어 하드웨어는 ARM big.LITTLE솔루션내용으로 보임.

  • 하드웨어 수준제어를 통해 소프트웨어 성능을 높이는 트릭중 하나가 CPU에 프로세스 할당을 컨트롤하는 것임.
  • 일반적으로 태스크 또는 스레드가 스케줄 정책에 따라 선점(Preemption)되고 예약될 때, OS는 가용 코어에 해당 태스크 또는 스레드를 할당해줌.
  • 이러한 이유로 스레드 또는 프로세스가 할당되는 코어는 매번 달라질 수 있음.
  • 특히, 스레드가 코어에 할당될 때마다 데이터가 아직 캐시에 없는 경우 프로세서는 스레드의 관련 데이터 또는 명령어(instruction)을 캐시에 복사해야하므로 성능저하 가능성이 있음.
  • Processor Affinity or CPU Pinning을 사용하면 애플리케이션이 프로세스 또는 스레드를 특정 코어나 코어 또는 CPU 범위에 바인딩하거나 바인딩 해제할 수 있도록함.
  • 운영 체제는 지정된 스레드가 코어에 고정된 경우 예약될 때마다 할당된 코어 또는 CPU에서만 실행되도록 함.
  • 이는 동일한 글로벌 메모리를 공유하고 로컬 캐시(UMA 아키텍처)를 갖는 다중 코어 프로세서 아키텍처에서 성능을 높일 수 있음.

  • Linux OS에서 CPU Pinning을 지원하는 명령은taskset임.
  • 현재 프로세스에 pinning된 CPU 정보를 볼 수 있고 역으로 설정 가능함.
// taskset -pc {pid} : pinning 정보 보기
// taskset -pc {Masking ex) 0-3 or 1,2,3,4} {pid} : pinning 설정하기
user@user:/proc/4007/task/4007$ taskset -pc 4007
pid 4007's current affinity list: 0-3
user@user:/proc/4007/task/4007$ taskset -pc 1,2,3 4007
pid 4007's current affinity list: 0-3
pid 4007's new affinity list: 1-3

출처:didalsgur.tistory.com/

  • 기본적인 물리적인 cpu 확인 방법은 /proc/cpuinfo에서 가능함.
  • 그냥 봐도 가능하지만, grep을 이용하여 간략히 걸러서 볼 수 있음.
// 물리적인 cpu 개수
$ grep "physical id" /proc/cpuinfo | sort -u wc -l
// cpu 1개 당 물리적 코어 개수
$ grep "physical id" /proc/cpuinfo | sort -u wc -l
// cpu 전체 코어 개수
$ grep "physical id" /proc/cpuinfo | sort -u wc -l
profile
안녕하세요

0개의 댓글