2006/09/20

[솔라리스에서 애플리케이션/프로세스를 특정 cpu 혹은 cpu set에서만 수행하도록 구성하는 방법]


[솔라리스에서 애플리케이션/프로세스를 특정 cpu 혹은 cpu set에서만 수행하도록 구성하는 방법]

a.out 이란 실행화일을 쉘에서 실행하실때 특정 cpu에서만
bind되어서 실행하고자 하는 경우에는 다음과 같이 수행하도록 합니다.

1. 쉘 프롬프트에서 작업하는 방법

1) processor set을 구성합니다.
  • processor set이란 cpu들의 집합을 의미(이하 pset)하는 것인데 각 cpu set에는 최소 1개이상의 processor가 포함되어 있어야 하며, CPU(processor)는 각 한번에 한 processor set에만 귀속될 수 있습니다. n개의 processor를 가진 processor set에는 최대 n-1개의 processor set이 존재할 수 있습니다. processor set에 귀속되지 않은 cpu가 한개는 반드시 있어야 합니다(OS와 interrupt 수행)
    • ex) root@T2000-1[/]psrset -c -F 1
      created processor set 1
      processor 1: was not assigned, now 1
  • 2) 특정 cpu에서만 실행되길 원하는 애플리케이션(a.out)을 다음과 같은 방법
    으로 실행합니다.
    ex)#psrset -e 1 a.out arg0 arg1 ...

  • 3) 일단 a.out을 실행된 경우라면, processor set을 사용하지 않고서, 특정
    프로세서에 bind 시킬 수 있습니다. a.out의 pid 1223을 할당받고서 실행이 되었다면 다음과
    같이 실행해서 특정 cpu에 bind 할 수 있습니다.
    • ex)#pbind -b 1 1223
      pbind는 pset(processor set)이 구성이 안되어 있는 경우에도 사용 가능하면 한개의 CPU만 bind하는 경우에 사용합니다. 물론 이경우 pset을 만든 후 psrset을 이용해서 pid 1223을 bind하실 수도 있습니다.(pset이 앞의 예 1번대로 만들어져있다고 가정)

    • ex)#psrset -b 1 1223

    • 이렇게 실행되면, a.out은 자신과 자신의 LWP & child process 모두가
      processor set 1에 귀속된 프로세서에서만 수행됩니다. 일반적으로는 processor set을 이용하여 bind하는 것이 운용이나 관리면에서 월등합니다. bind하고나서 processor하나의 성능이 모자라는 경우에는 실질적으로 bind해서 사용하기가 불가능합니다. 따라서, 단일 cpu라 하더라도 psrset을 구성해서 bind하는 것이 바람직하며, psrset을 이용할 시에는 bind된 후라도 동적으로 online상태에서 cpu의 가감을 운영할 수 있습니다.

2. 시스템 콜을 이용하는 방법
C program 자체에서 자신이나 혹은 다른 애플리케이션을 특정 cpu에 bind하시
고 싶으시면 processor_bind(2), pset_bind(2) 을 이용합니다.
참고, www.opensolaris.org에서 pbind.c / psrset.c source를 참고하세요.


김봉환/