웹사이트 검색

초보자를 위한 Linux taskset 명령 자습서(예제 포함)


이 페이지에서

  1. Linux taskset 명령
  2. Q1. 작업 세트를 사용하여 프로세스의 CPU 선호도를 검색하는 방법은 무엇입니까?\n
  3. Q2. 작업 세트를 사용하여 CPU 선호도를 변경하는 방법은 무엇입니까?\n
  4. Q3. 선호도를 변경하면서 CPU 범위를 할당하는 방법은 무엇입니까?\n
  5. Q4. 미리 정의된 CPU 친화도로 프로세스를 시작하는 방법은 무엇입니까?\n
  6. 결론

프로세서 선호도라는 용어를 들어본 적이 있습니까? 프로세스를 특정 중앙 처리 장치 또는 CPU 범위에 바인딩하거나 바인딩 해제할 수 있는 기능입니다. 예, 특정 프로세스를 실행하는 데 사용해야 하는 CPU 코어를 시스템에 알릴 수 있습니다. 프로세서 선호도가 존재하는 이유에 대한 이론적 세부 정보는 여기를 참조하십시오.

이 자습서에서는 프로세서 선호도를 달성할 수 있는 유틸리티(작업 세트라고 함)에 대해 설명합니다. 하지만 그 전에 이 튜토리얼의 모든 예제는 Ubuntu 22.04 LTS 머신과 Debian 11에서 테스트되었음을 언급할 가치가 있습니다.

Linux 작업 집합 명령

taskset 명령을 사용하면 프로세스 CPU 선호도를 설정하거나 검색할 수 있습니다. 구문은 다음과 같습니다.

taskset [options] mask command [argument...]
taskset [options] -p [mask] pid

도구 매뉴얼 페이지에서 설명하는 방법은 다음과 같습니다.

       taskset  is  used  to  set  or  retrieve  the CPU affinity of a running
       process given its pid, or to launch a new  command  with  a  given  CPU
       affinity.   CPU affinity is a scheduler property that "bonds" a process
       to a given set of CPUs on the system.  The Linux scheduler  will  honor
       the  given CPU affinity and the process will not run on any other CPUs.
       Note that the Linux scheduler also supports natural CPU  affinity:  the
       scheduler attempts to keep processes on the same CPU as long as practi?
       cal for performance reasons.  Therefore, forcing a specific CPU  affin?
       ity is useful only in certain applications.

       The CPU affinity is represented as a bitmask, with the lowest order bit
       corresponding to the first logical CPU and the highest order bit corre?
       sponding  to  the  last logical CPU.  Not all CPUs may exist on a given
       system but a mask may specify more CPUs than are present.  A  retrieved
       mask  will  reflect only the bits that correspond to CPUs physically on
       the system.  If an invalid mask is given (i.e., one that corresponds to
       no  valid  CPUs on the current system) an error is returned.  The masks
       may be specified in hexadecimal (with or without a leading "0x"), or as
       a CPU list with the --cpu-list option.  For example,

           0x00000001  is processor #0,

           0x00000003  is processors #0 and #1,

           0xFFFFFFFF  is processors #0 through #31,

           32          is processors #1, #4, and #5,

           --cpu-list 0-2,6
                       is processors #0, #1, #2, and #6.

       When  taskset returns, it is guaranteed that the given program has been
       scheduled to a legal CPU.

다음은 taskset 명령이 어떻게 작동하는지 더 잘 이해할 수 있는 몇 가지 Q&A 스타일의 예입니다.

Q1. 작업 세트를 사용하여 프로세스의 CPU 선호도를 검색하는 방법은 무엇입니까?

작업 집합에서 이미 실행 중인 프로세스의 CPU 선호도를 표시하려면 다음과 같은 방법으로 명령을 사용하십시오.

taskset -p [PID]

PID를 가져오려는 CPU 선호도가 있는 프로세스의 ID로 바꾸십시오. 예를 들어 프로세스의 프로세스 ID를 얻을 수 있습니다. ps 명령을 사용하여.

ps aux

프로세스 ID는 PID 열에 있습니다.

예를 들어:

taskset -p 2363

위의 명령은 다음 출력을 반환했습니다.

pid 2363's current affinity mask: 3

따라서 여기서 16진수 값 3은 프로세스가 4개의 프로세서 코어(0,1,2,3)에서 실행될 수 있음을 의미합니다.

출력을 CPU 범위로 표시하려면 -c 명령줄 옵션을 추가할 수 있습니다.

taskset -cp 9726

이 경우 출력은 다음과 같습니다.

pid 9726's current affinity list: 0-3

Q2. 작업 세트를 사용하여 CPU 선호도를 변경하는 방법은 무엇입니까?

기존 프로세스의 CPU 선호도를 조정하려면 새 선호도를 정의하는 16진수 마스크와 함께 프로세스 ID(이전 섹션에서 했던 것처럼)를 지정해야 합니다.

예를 들어, Gedit 프로세스(PID: 9726)의 현재 CPU 선호도는 f입니다.

선호도를 0x11로 변경하려면 다음 명령을 사용하십시오.

taskset -p 0x11 9726

그런 다음 다음 명령을 사용하여 새 선호도를 다시 확인할 수 있습니다.

taskset -p 9726

다음 스크린샷은 필자의 경우 이러한 명령에 대한 출력을 보여줍니다.

따라서 선호도가 변경되었음을 알 수 있습니다.

Q3. 선호도를 변경하면서 CPU 범위를 할당하는 방법은 무엇입니까?

이것은 큰 문제가 아닙니다. 이전 섹션에서 입력으로 CPU 코어 범위와 함께 사용한 명령에 -c 명령줄 옵션을 추가하기만 하면 됩니다.

다음은 예입니다.

작업 세트 -cp 0,3 9726

이 경우 생성된 출력은 다음과 같습니다.

pid 9726's current affinity list: 0
pid 9726's new affinity list: 0,3

Q4. 미리 정의된 CPU 친화도로 프로세스를 시작하는 방법은 무엇입니까?

예, 설정된 CPU 선호도로 프로세스를 시작할 수도 있습니다.

예를 들어 CPU 선호도 0xa로 텍스트 gedit 편집기를 시작했습니다.

작업 세트 0xa gedit

결론

동의합니다. taskset 명령은 일반 명령줄 사용자를 위한 것이 아닙니다. 멀티 코어 환경에서 프로세스 최적화를 위해 서버 측 전문가가 주로 사용합니다. 여기에서 도구 기본 사항에 대해 논의했습니다. 자세한 내용은 매뉴얼 페이지를 참조하십시오.