2008/11/24

일부 프로세스에게만 자원 조정 및 관리를 하고 싶을때

자식 프로세스를 생성하는 쉘 스크립트가 있다고 하죠.
편의상 start.sh이라고 할때 start.sh은 여러개의 자식 프로세스를 실행할 수 있습니다.

이런 경우, start.sh을 실행하는 사용자의 기본 프로젝트의 정책과 달리 다른 정책으로 start.sh과 그 자식 프로세스들을 관리하고 싶은 경우가 있습니다. 예를들면, start.sh를 포함한 자식 프로세스는  1 core의 50%만 최대 사용할 수 있도록 제한을 두고 싶다면 일단, 1 core의 50%만을 사용하도록 정책이 선언되어 있는 프로젝트를 하나 만들어야 합니다.

솔라리스10에서 새로이 추가된 cpu-cap은 cpu 사용의 최대를 제안할 수 있습니다. 참고로, 기존에 제공하던 FSS와는 완전히 반대로 무조건 주어진 값(%) 이상을 CPU를 점할 수 없도록 하는 정책입니다.

#projadd -U admin -K "project.cpu-cap=(privileged,50,deny)" cap50
와 같이 cap50이라는 프로젝트를 만듭니다.

이제 start.sh을 실행하려고 하는데, 최대 cpu를 50%만 사용할 수 있도록 하게 하고 싶으면 다음과 같이 실행합니다.

#newtask -p cap50  start.sh


혹은
#newtask -p cap50 bash
#start.sh
과 같이 실행해도 됩니다.

실제로 CPU가 50%만 사용하는 지 확인을 하고 싶으면
#prstat -J
를 실행해서 Project 목록을 보도록 합니다.


실행을 했는데 사용중에 cpu 자원을 바꿔보고 싶으면 다음과 같은 방법을 사용합니다.
우선 task id를 확인합니다.
# ps -o taskid -p 8982
TASKID
 1039

해당 ID의 관심 자원 (여기서는 cpu-cap입니다)의 값을 확인합니다.
# prctl -P -i task 1039 | grep -i cap
project.cpu-cap privileged 50 - deny -

다음과 같은 방법으로 실시간 교체를 실행합니다.
#prctl -t privileged -n project.cpu-cap -r -v 200 -i task 1039


관심 대상의 자원에 따라, 위 prctl의 명령의 아규먼트는 약간 씩 다를 수 있습니다.

댓글 없음: