Linux에서 하나의 CPU 코어만 사용하도록 프로세스를 제한하는 방법은 무엇입니까? [복사]

Linux에서 하나의 CPU 코어만 사용하도록 프로세스를 제한하는 방법은 무엇입니까? [복사]

프로세스를 하나의 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 나중에 이에 대한 프로세스를 할당(실행)할 수 있습니다.

관련 정보