코어가 많은 CPU가 있다고 가정해 보겠습니다. 주어진 프로세스가 일단 시작되면 코어 중 하나에 바인딩됩니까?
이는 사용되지 않은 코어가 여러 개 있어도 프로세스가 느려진다는 것을 의미합니까? 예를 들어, core0은 프로세스 A와 B에서 사용되고 있고, 프로세스 A는 코어를 100% 사용하고 있으며, core1이 완전히 유휴 상태이더라도 프로세스 B는 실행될 수 없습니다.
맞습니까?
답변1
프로세스는 본질적으로 커널에 연결되어 있지 않습니다. 프로세스 실행이 예약될 때마다 관련 목록에 있는 모든 코어에서 프로세스를 실행할 수 있습니다. 상관 관계 목록이 명시적으로 설정되지 않은 경우 프로세스는 모든 코어에서 실행될 수 있습니다.
이 명령을 사용하여 프로세스의 선호도 집합을 확인하거나 설정할 수 있습니다 taskset
( man taskset
해당 설명서 참조). 구체적으로 이렇게 쓴다.
Linux 스케줄러는 지정된 CPU 선호도를 존중하며 프로세스는 다른 CPU에서 실행되지 않습니다. Linux 스케줄러는 자연적인 CPU 선호도도 지원합니다. 성능상의 이유로 스케줄러는 가능할 때마다 프로세스를 동일한 CPU에 유지하려고 시도합니다. 따라서 특정 CPU 선호도를 강제하는 것은 특정 애플리케이션에서만 유용합니다.
예
sleep 1000 & slpid=$!
echo "PID of sleep is $slpid" # 5221
taskset --pid $slpid
pid 5221's current affinity mask: 3 # bitmask
taskset --cpu-list --pid $slpid
pid 5221's current affinity list: 0,1 # list of potential cores
taskset --cpu-list --pid 0 $slpid
pid 5221's current affinity list: 0,1
pid 5221's new affinity list: 0 # bound now only to core 0
kill $slpid # all done, tidy up