Tuesday, April 8, 2008

Process Priorities

프로세스의 우선 순위는 nice 라고 불리는 값으로 우선 순위가 결정된다. 다른 프로세스 들에게 "be-nice" 하자는 의미에서 우선순위 값이 nice로 정해졌덴다. -20에서 19까지 가질 수 있고, 낮을 수록 우선 순위가 높다. nice 값 자체가 프로세스의 timeslice를 알려주는 역할도 한다. 디폴트 nice 값은 0이다. 이 값을 올려주는 것이 다른 프로세스들에게는 "nice" 해보는 방법이다. nice는 아래와 같이 간단히 사용할 수 있다.

#include <unistd.h>

int nice(int inc);

inc 값만큼 nice 값을 올릴 수 있다. 내릴 수는 없다. 내리는 것 - 우선순위를 높이는 것은 (CAP_SYS_NICE capability가 있는)root만 할 수 있다. 리턴값으로 변환후의 우선 순위 값을 반환하기 때문에 간단히 현재 자신의 우선 순위를 볼 때는 nice(0)으로 확인 가능하다.

이 외에 프로세스, 프로세스 그룹, user 별로 우선순위를 지정할 수 있는 getpriority, setpriority함수들이 있는데, 간단히 살피면 아래와 같다.

#include <sys/time.h>
#include <sys/resource.h>
/* which - PRIO_PROCESS, PRIO_PGRP, PRIO_USER
* who - pid, pgid, user id..
*/
int getpriority (int which, int who);
int setpriority (int which, int who, int prio);

위에서 인자에 0을 주면 현재 프로세스/프로세스 그룹/사용자에 대해 동작한다. 비슷한 식으로 I/O 스케쥴러에 대해서도 우선순위를 조절하는 ioprio_get(...), ioprio_set(..)가 있으나 glibc에서 제공하지 않는다. 대신 ionice 라는 util-linux package를 통해 조절할 수 있다.

No comments:

Post a Comment