Linux,Mac) Python Script 돌릴 때 core 수 제한하는 방법

2023. 3. 31. 21:43꿀팁 분석 환경 설정/Linux 관련 팁

728x90

taskset은 Linux 운영체제에서 실행 중인 프로세스의 CPU 코어 할당을 제어하는 명령어입니다. CPU 코어 할당을 제어함으로써 프로세스의 성능을 최적화할 수 있습니다.

taskset 명령어는 프로세스를 실행할 때, 실행할 CPU 코어를 선택하도록 합니다. 이를 통해 멀티코어 CPU 시스템에서 여러 프로세스가 병렬로 실행될 때, 각각의 프로세스가 서로 다른 코어를 사용하도록 할 수 있습니다. 이는 CPU의 활용도를 높이고, 성능을 향상시키는 데 도움이 됩니다.

taskset 명령어는 간단하게 사용할 수 있습니다. 명령어 뒤에 실행할 프로세스의 PID를 입력하고, 원하는 CPU 코어 번호를 지정하면 됩니다. 예를 들어, "taskset -c 0,1 ./myprocess" 명령어는 "myprocess"라는 프로세스를 CPU 코어 0과 1에서 실행하도록 합니다.

또한, taskset 명령어는 "CPU 마스크"라는 개념을 사용합니다. CPU 마스크는 각 CPU 코어에 대한 비트맵 값으로 표현됩니다. 예를 들어, CPU 코어 0, 1, 2를 사용하려면 "00000111"과 같은 비트맵 값을 사용합니다. taskset 명령어에서는 "-c" 옵션을 사용하여 CPU 마스크 값을 지정할 수 있습니다.

taskset 명령어는 멀티스레드 애플리케이션 및 CPU 집약적인 작업을 수행하는 애플리케이션에서 유용합니다. 적절한 CPU 코어 할당을 통해 성능을 개선할 수 있으며, 시스템 전반적인 부하를 분산시킬 수 있습니다.

 

예시 

 

예시를 들어보겠습니다.

가정용 컴퓨터에서 동영상 인코딩 프로그램을 실행한다고 가정해 봅시다. 이 프로그램은 멀티스레드를 사용하여 여러 코어를 사용할 수 있습니다. 이때, taskset 명령어를 사용하여 프로그램이 사용할 CPU 코어를 지정할 수 있습니다.

만약, 가정용 컴퓨터가 4코어를 가지고 있다면, taskset 명령어를 사용하여 이 프로그램이 CPU 코어 2와 3을 사용하도록 할 수 있습니다. 이렇게 함으로써, 이 프로그램은 다른 프로그램이 사용하는 코어와 충돌하지 않고, 최적의 성능으로 동영상을 인코딩할 수 있습니다.

실제로 taskset 명령어를 사용하면 다음과 같이 사용할 수 있습니다.

taskset -c 2,3 ./video_encoding_program


이와 같이, taskset 명령어를 사용하여 프로세스가 실행될 CPU 코어를 선택함으로써, 프로그램의 성능을 최적화하고, 시스템 전반적인 부하를 분산시킬 수 있습니다.

예시 (파이썬)

 

아래 코드를 사용하면 cpu를 제한할 수 있습니다.

taskset -c 0,1,2 python ##.py

여러개를 선택하는 방법도 존재 (0번부터 2번까지)

taskset -c 0-2 python ##.py

예를 들어 중간에 cpu를 빼고 싶다면?

0번부터 20번까지 중에서 5번과 10번 제외

taskset -c 0-4,6-9,11-20 python ##.py

 

파라미터에 대해서는 다음과 같이 있다고 합니다.

  • -a, --all-tasks: 모든 작업에 대해 CPU 바인딩을 적용합니다.
  • -p, --pid: 지정한 PID의 프로세스에 대해 CPU 바인딩을 적용합니다.
  • -c, --cpu-list: 사용할 CPU 코어를 지정합니다. 예를 들어, 0,1,2와 같은 형식으로 지정할 수 있습니다.
  • -h, --help: 도움말을 출력합니다.
taskset -p 1234 -c 0,1

이 명령어는 PID가 1234인 프로세스가 0번과 1번 CPU 코어에서만 실행되도록 제한합니다.

728x90