프로세스를 하나의 CPU 코어로 제한하는 방법은 무엇입니까?
ulimit
또는 cpulimit
좋을 것 같은 것. (확인하기 위해: 사용률이나 실행 시간을 제한하고 싶지 않습니다. 애플리케이션(및 모든 하위 프로세스(스레드))이 하나의 CPU 코어(또는 'n'개의 CPU 코어)를 사용하도록 강제하고 싶습니다. )).
답변1
Linux에서는 다음을 실행합니다.sched_setaffinity
시스템 호출. 프로세스의 선호도는 프로세스가 실행될 수 있는 프로세서 집합입니다. 표준 쉘 래퍼가 있습니다:taskset
. 예를 들어 프로세스를 CPU #0에 고정하려면(특정 CPU를 선택해야 함):
taskset -c 0 mycommand --option # start a command with the given affinity
taskset -c -pa 0 1234 # set the affinity of a running process
Perl에는 타사 모듈(Sys::CpuAffinity
) 및 파이썬(affinity
) 프로세스의 선호도를 설정합니다. 둘 다 Linux와 Windows에서 실행됩니다(Windows에는 추가 타사 모듈이 필요할 수 있음 Sys::CpuAffinity
). Sys::CpuAffinity
다른 여러 UNIX 변형에서도 작동합니다.
프로세스가 탄생할 때부터 선호도를 설정하려면 를 호출하기 직전에 현재 프로세스의 선호도를 설정하세요 execve
. 이는 프로세스가 CPU 0에서 실행되도록 하는 간단한 래퍼입니다.
#!/usr/bin/env perl
use POSIX;
use Sys::CPUAffinity;
Sys::CpuAffinity::setAffinity(getpid(), [0]);
exec $ARGV[0] @ARGV
답변2
명령줄에서 CPU 세트를 구축할 수도 있습니다. man cpuset
나중에 이에 대한 프로세스를 할당(실행)할 수 있습니다.