taskset을 사용하여 CPU 코어에 프로그램을 할당하는 방법

멀티 코어 프로세서가 서버, 랩톱 또는 데스크톱 PC, 심지어 모바일 장치에서 점점 더 보편화됨에 따라 점점 더 많은 애플리케이션이 이러한 유형의 시스템에 최적화되고 있습니다. 그러나 프로그램이나 프로세스를 하나 이상의 특정 커널에 연결하는 것이 유용 할 수 있습니다. 그것을 얻는 방법을 보자 ...

작업 세트 설치

taskset 도구는 "util-linux"패키지의 일부입니다. 대부분의 Linux 배포판은 기본적으로 사전 설치된 패키지와 함께 제공됩니다. taskset을 사용할 수없는 경우 다음과 같이 설치할 수 있습니다.

En 데비안 / 우분투 및 파생 상품 :

SUDO APT-GET 설치 사용-LINUX

En 페도라 및 파생 상품 :

sudo yum install 유틸리티-리눅스

실행중인 프로세스의 CPU 선호도보기

프로세스에 대한 CPU 선호도 정보를 검색하려면 다음 형식을 사용하십시오.

작업 세트 -p PID

예를 들어 PID 2915를 사용하여 프로세스의 CPU 선호도를 확인하려면 다음을 수행하십시오.

작업 세트 -p 2915

결과를 반환합니다.

pid 2915의 현재 선호도 마스크 : ff

taskset은 11111111 진수 비트 마스크 형식으로 현재 CPU 선호도를 반환합니다. 이 예에서 선호도 (0 진수 비트 마스크로 표시됨)는 바이너리 형식의 "7"에 해당합니다. 즉, 프로세스가 XNUMX 개의 서로 다른 CPU 코어 (XNUMX ~ XNUMX)에서 실행될 수 있음을 의미합니다.

0 진수 비트 마스크의 가장 낮은 비트는 코어 ID 1, 오른쪽에서 두 번째로 낮은 비트는 코어 ID 2, 세 번째로 낮은 비트는 코어 ID 0 등에 해당합니다. 예를 들어 CPU 선호도 "11x0"은 코어 ID 4과 XNUMX를 나타냅니다.

taskset은 CPU 선호도를 비트 마스크 대신 프로세서 목록으로 표시 할 수 있으므로 읽기가 훨씬 쉽습니다. 이 형식을 사용하려면 "-c"옵션을 사용하여 작업 세트를 실행해야합니다. 예를 들면 :

작업 세트 -cp 2915

결과를 반환합니다.

pid 2915의 현재 선호도 목록 : 0-7

특정 커널에서 프로세스를 강제 실행

작업 세트를 사용하면 실행중인 프로세스를 특정 CPU 코어에 할당 할 수 있습니다. 이렇게하려면 다음 형식을 사용해야합니다.

taskset -p COREMASK PID taskset -cp CORE-LIST PID

예를 들어 프로세스를 코어 0과 4에 할당하려면 다음을 실행합니다.

작업 세트 -p 0x11 9030

결과가 반환하는 내용 :

pid 9030의 현재 선호도 마스크 : ff pid 9030의 새 선호도 마스크 : 11

마찬가지로 다음을 실행할 수 있습니다.

작업 세트 -cp 0,4 9030

"-c"옵션을 사용하면 쉼표로 구분 된 숫자 커널 ID 목록을 지정하거나 범위 (예 : 0,2,5,6-10)를 포함 할 수도 있습니다.

특정 커널을 사용하여 프로그램 시작

taskset을 사용하면 여러 특정 커널을 사용하여 새 프로그램을 시작할 수도 있습니다. 이렇게하려면 다음 형식으로 사용해야합니다.

실행 가능한 COREMASK 작업 세트

예를 들어, CPU 코어 ID 0에서 VLC 프로그램을 시작하려면 다음 명령을 사용하십시오.

작업 세트 -c 0 vlc

특정 프로그램에만 코어 할당

taskset은 특정 커널에 프로그램을 할당 할 수 있지만, 이것이이를 사용하는 다른 프로그램이나 프로세스가 없음을 의미하지는 않습니다. 이를 방지하고 전체 커널을 특정 프로그램 전용으로 지정하려면 커널 매개 변수 "isolcpus"를 사용해야 시작 중에 커널을 예약 할 수 있습니다.

이렇게하려면 GRUB의 커널 줄에 "isolcpus ="매개 변수를 추가해야합니다. 예를 들어 ID 코어 0과 1을 예약하려면 "isolcpus = 0,1"을 추가합니다.

이 작업이 완료되면 Linux 스케줄러는 특별히 taskset을 할당하지 않는 한 예약 된 커널에 정규 프로세스를 할당하지 않습니다.

출처 : xmodulo & taskset man 페이지.


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   피터 체코

    좋은 게시물 :).

  2.   루이스

    좋은 게시물이지만 트롤링 정신이 없습니다 ...

    특정 커널에 프로그램을 할당하는 용도는 무엇입니까? ???

    내말은; 12 개의 코어가있는 컴퓨터가있는 경우 논리적 인 것은 특정 프로그램이 해당 12 개의 코어를 사용하여 실행되는 것이며 가능한 최고의 성능을 얻을 수 있기 때문에 제한하지 않는 것입니다.

    내가보기에 유용한 것은 특정 커널에 어떤 프로세스도 할당하지 않고 특정 프로그램에만 독점적으로 사용할 수있는 옵션입니다.

    1.    jvk85321

      플래너가 모든 코어를 사용하도록하면 리소스의 균형이 더 잘 잡히지 만 때로는 특정 작업으로 가상 머신을 실행하는 것과 같은 배타적 전용 코어가 필요할 때 해당 머신의 성능이 크게 향상됩니다. 할당 된 커널에서 더 이상 프로세스가 실행되지 않습니다.

      atte
      jvk85321

      1.    리눅스를 사용하자

        정확한! 감사합니다, jvk! 🙂

      2.    lf

        그러나 가상 머신을 생성 할 때 할당 된 CPU 양을 선택하라는 메시지가 표시됩니다. 결국 운영 체제가이 값을 생략하고 모든 CPU에서 실행하면이 값을 선택하는 용도는 무엇입니까?

        Windows 8.1 x64, AMD 및 Firefox에서 Flash가 작동하도록하려면 Flash가 하나의 CPU에서만 실행되도록 선택하는 것이 좋지만 저에게는 작동하지 않았습니다. 다른 DE의 작업 관리자 나 최소한 KDE의 작업 관리자에 추가하면 (아직없는 경우) 편리합니다.

      3.    lf

        아, 코멘트의 끝을 이해하지 못했습니다. 그러나이를 위해서는 가상 머신을 실행하는 CPU의 모든 프로세스를 금지해야합니다. 또는 다른 CPU에 할당하십시오. 흥미롭고 아주 좋은 코멘트.

    2.    페르난도

      천재적인 슈퍼 컴퓨터를 만드는 데 사용

  3.   루이스

    이해합니다.

    설명해 주셔서 감사합니다.

  4.   테크

    특정 프로그램에 대한 커널을 예약 할 때 실행 스레드는 어떻게됩니까? HT가있는 커널로 수행하는 경우 프로그램에 대해 2 개의 실행 스레드를 예약합니다.

  5.   스위처

    이 명령은 코어가 여러 개인 컴퓨터에서는 그다지 유용하지 않을 수 있지만 듀얼 코어가있는 사용자에게는 매우 실용적입니다. 예를 들어, 열 때 모든 프로세서 코어를 사용하고 CPU가 필요한 다른 프로그램 (대용량 파일에서 grep으로 검색)이있는 경우 시스템 속도가 느려지는 게임이 있습니다. 해결책은 게임이 코어 중 하나만 사용하도록 제한하는 것만 큼 간단합니다.
    나는 또한 동의합니다. 그들은 이것을 작업 관리자 (지금까지 Gentoo에서 시도한 것, 아무도 가지고 있지 않다고 생각합니다)에 통합해야합니다. 특히 Windows에서는 XP 이후 존재하는 것입니다 (오른쪽 클릭 process> "Set Affinity ...")하지만 얼마 전에 작업 세트를 좀 더 직관적 인 것으로 바꾸는 다음 스크립트를 발견했습니다. 여기에 코어 사용을 관리해야하는 경우도 있습니다.)
    #!/bin/bash
    read -p 'Ingrese el ID del proceso en cuestión: ' ID
    read -p 'Ingrese la lista de procesadores separados por comas: ' P
    echo 'Su ID es '$ID' y los procesadores son '$P
    sudo taskset -p -c $P $ID
    read -p 'Listo, presione enter para finalizar' P

    일부 수정을 통해 프로세스의 이름이 PID 대신 표시 될 수 있습니다 (또는 둘 모두를 허용하고 해당 매개 변수가 하나 또는 다른 것임을 결정 함).

  6.   조스

    새로운 사용자를위한 작업 세트를위한 그래픽 인터페이스가 없습니다.