검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 프로그램과 명령어/관리와 유지보수
참조 원문 : Using Taskset for Priority Tasks
관련 글 : cpulimit - CPU 점유율 제한 프로그램과 응용 스크립트

  이전에 CPU 사용률을 제한하는 것과 관련된 포스팅했었는데 이번에는 멀티프로세서(멀티 코어 포함) 시스템에서 특정 CPU(들)에 작업을 할당하는 것과 관련된 포스팅입니다. taskset 명령어를 사용하면 특정 프로세스를 특정 CPU에 할당할 수 있습니다. 아래는 구글 크롬 웹 브라우저를 하나의 CPU(정확히는 0번 CPU)만 사용하도록 실행하는 모습입니다.
taskset 0x00000001 google-chrome
  그리고 아래는 이미 실행 중인 크롬 프로세스에 대해 동일한 명령을 내리는 모습입니다.
taskset -p 0x00000001 크롬의_PID
  위의 명령어로 인해 크롬은 하나의 CPU(0x00000001은 CPU 0번에 대한 mask)만 사용하게 됩니다. 만약 2개의 CPU(정확히는 0번과 1번 CPU)를 사용하게 하고 싶다면 0x00000003(2진수로 '11')을 쓰면 됩니다. mask를 2진수로 고쳤을 때 가장 오른쪽이 0번 CPU를 뜻하고 왼쪽으로 가면서 CPU 번호가 하나씩 증가합니다.

  직접 마스크 값을 입력하는 방법 대신 -c 옵션과 함께 CPU의 번호(개수가 아님)를 콤마와 함께 나열(예: -c 0,1,3)하거나 범위(예: -c 0-3)로 쓰거나 둘을 혼합(예: -c 0,2-3)해서 사용할 CPU를 지정할 수도 있습니다.

  특정 프로세스가 어떤 CPU를 사용하는지 보려면 -p 옵션과 함께 대상 프로세스의 PID를 적습니다.
$ taskset -p 19992
pid 19992's current affinity mask: f
  위의 결과를 보면 해당 프로세스가 사용하는 CPU의 마스크 값이 f인데 이것은 0번~3번까지 총 4개의 CPU를 사용하고 있다는 뜻입니다. f를 2진수로 바꾸면 '1111'이며 이것이 "mask"라는 것을 생각하면 왜 f가 CPU 4개를 뜻하는지 알 수 있습니다.

  참고로 위 명령어를 실행한 시스템은 하나의 물리적인 프로세서에 2개의 코어가 있으며 하이퍼쓰레딩이 작동중이기 때문에 논리적으로 총 4개의 프로세서가 존재합니다. taskset으로 프로세스가 사용할 CPU를 별도로 지정하지 않는다면 기본적으로 저렇게 모든 CPU를 사용하게 됩니다. 그러므로 만약 논리적으로 2개의 코어가 있었다면 위에서 f가 아닌 3이 출력됩니다.

2010/12/15 17:37 2010/12/15 17:37