• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

sched_getaffinity api man page에서 thread 의미

19.11.28 13:58 작성 조회수 193

2

description부분에서

A thread's CPU affinity mask determines the set of CPUs on which it is eligible to run.  by dedicating one CPU to particular thread. is is possible to ensure maximum execution speed for that thread.

1. 여기서 thread는 프로세스의 thread인가요? 그렇다면 

위 설명에 특정 스레드에 하나의 cpu를 할당해서, 하나의 스레드의 실행속도를 최대화할 수 있는 보장을 한다라고 설명하고 왜 첫번째 인자로는 특정 스레드id가 아닌 process id를 넘기는거죠? 

2. 만약 1cpu 4코어 8스레드라면 위에서 설명하는 CPU는  1cpu를 의미하는 거죠? 

답변 1

답변을 작성해보세요.

2

1. 말씀하신대로 process ID를 넘겨야 하는 것이 맞습니다. 하지만 여기에서 process ID 대신 TID(Thread ID)를 입력하시면 해당 Thread의 affinity가 설정됩니다. TID는 말 그대로 Thread 별 ID인데, PID와 동일한 체계로 구성되어 있습니다. 쉘에서 ps -efL로 조회하시면 프로세스에 포함되어 있는 thread까지 출력합니다. ps -efL의 조회 결과를 보시면 TID가 어떤 것인지 쉽게 이해하실 수 있을 것 같네요.

참고로, TID는 gettid()를 이용해 얻을 수 있지만, glibc에서는 이 system call을 구현해놓지 않았습니다. 따라서 TID를 가져오려면 아래와 같은 코드를 사용하셔야 합니다.

#include <unistd.h>
#include <sys/syscall.h>

#ifdef SYS_gettid
pid_t tid = syscall(SYS_gettid);
#else
#error "SYS_gettid unavailable on this system"
#endif

2. 일반적으로 멀티코어 시스템에서 CPU라 칭하는 것은 논리적으로 구분 가능한 연산장치 입니다. 즉, 2-core 4-thread 시스템이라면 4개의 CPU가 있다고 할 수 있는 것이죠. 그래서 예를 들어주신 멀티코어 시스템에서 CPU는 8-thread에 해당합니다.

예를 들어주신 부분을 좀 더 정확한 용어로 바꾸자면, "1-Processor, 4-Core, 8-Thread 인 시스템은 총 8개의 CPU가 있다" 라고 할 수 있습니다. 시스템 마더보드에 설치하는 물리적인 CPU 패키지는 Processor라고 부릅니다. 

답변이 되셨길 바랍니다. 그럼 수고하세요~~