'niceness'대 'priority'프로세스


104

를 실행할 때 top다음과 같은 (단축 된) 예제 출력을 볼 수 있습니다.

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 4586 ipc-adm+  20   0 1303900 605152  92844 S  30,6 29,3   3:52.88 firefox
 3985 ipc-adm+  20   0  258588 124508  63072 S  12,2  6,0   0:40.04 compiz
 3092 root      20   0  172392  56164  25980 S   6,1  2,7   0:30.13 Xorg

내가 관심있는 두 가지 값이 있습니다 : PR(우선 순위) 및 NI(니스).

내가 이미 정확히 알고있는 것을 이해했다면, 둘 다 프로세스가 다른 프로세스와 대비되는 CPU 시간을 결정합니다. 그러나 그 값들 사이의 차이점은 무엇입니까?

프로세스의 해당 값을 조작하는 방법과 어떤 상황에서 유용 할 수 있는지 설명해 주시겠습니까?

답변:


103

좋은 가치는 사용자 공간이며 우선 순위 PR은 Linux 커널에서 사용하는 프로세스의 실제 우선 순위입니다. 리눅스에서 시스템 우선 순위는 0에서 139까지이며 실시간으로 0에서 99, 사용자에서 100에서 139입니다. 좋은 값 범위는 -20 ~ +19입니다. 여기서 -20이 가장 높고 기본값은 0이며 +19가 가장 낮습니다. 좋은 가치와 우선 순위의 관계는 다음과 같습니다.

PR = 20 + NI

따라서 PR = 20 + (-20 to +19)100 ~ 139를 매핑 하는 값 은 0 ~ 39입니다.

최고 매뉴얼에 따르면 :

PR-우선 순위 작업의 예약 우선 순위. 이 필드에 'rt'가 표시되면 작업이 '실시간'예약 우선 순위로 실행되고 있음을 의미합니다.

NI는 훌륭한 작업 가치입니다.

NI-Nice Value 작업의 가치. 음수 nice 값은 우선 순위가 높고 양수 nice 값은 우선 순위가 낮음을 의미합니다.

편집 : 기본적으로 프로그램이 Linux에서 시작되면 우선 순위 '0'으로 시작됩니다. 그러나 다음 방법 중 하나를 사용하여 프로그램의 우선 순위를 변경할 수 있습니다.

  1. 다음을 사용하여 필요한 우선 순위로 프로그램을 시작할 수 있습니다

    nice -n nice_value program_name
    
  2. 다음을 사용하여 이미 실행중인 프로세스의 우선 순위를 변경할 수도 있습니다

    renice -n nice_value -p process_id
    

1
당신은, 그들은 거의 역으로 ​​거의 같은 것입니다 (둘 다 우선 순위를 나타냄) 그러나 niceness우선 순위 niceness가 높은 작업을 수행 하는 작업이 부정적인 우선 순위를 부여하는 데 사용될 수 있습니까? (즉, nice다른 액세스 리소스를 사용하고 있는가? 아니면 이것이 혼란
Mark Kirby

1
내가 의미하는 것의 예, 두 개의 작업, 둘 다 pr20, 따라서 작업 1은 ni0, 작업 2는 ni20을 갖기 때문에 작업 2는 작업 1에 대한 자원을 포기한다는 것을 의미합니다.nicer
Mark Kirby

1
아시다시피, 우선 순위는 PR = 20 + NI로 계산됩니다. 따라서 작업 우선 순위 = 20 +0입니다.
선의

3
PR = 20 + NI 최대 값은 39 일 수 있습니다. 실제로 리눅스 시스템에서는 0부터 99까지의 실시간 우선 순위가 있으며, 사용자에게는 100부터 139까지의 우선 순위가 139입니다. 따라서 NI 값 -20 ~ +19는 우선 순위 100 ~ 139에 매핑됩니다. 조정할 수 있습니다. 그러나 여전히 커널이 NI 값을 변경하면 우선 순위가 변경된다는 것을 확신하지 못합니다. NI 값은 커널에 대한 제안입니다. 커널 언젠가는 무시
pl_rock

1
PR과 NI는 오프셋이 다르기 때문에 실제로 동일합니까? 그렇다면 왜 우리는 두 가지 가치를 모두 가지고 있습니까? 프로세스의 훌륭함을 <0으로 설정하려면 루트 권한이 필요하다는 것을 추가 할 수 있습니다.
바이트 사령관

26

우선 순위는 무엇이며 왜 관심을 가져야합니까?

프로세스 우선 순위에 관한 이야기는 프로세서 시간 관리에 관한 것입니다. 프로세서 또는 CPU는 여러 작업을 동시에 처리하는 사람과 같습니다. 때로는 여러 프로젝트를 수행하기에 충분한 공간이있을 수 있습니다. 때때로 우리는 한 번에 한 가지에만 집중할 수 있습니다. 다른 경우에는 중요한 것이 나타나고 우리는 모든 문제를 해결하기 위해 모든 에너지를이 문제를 해결하는 데 중점을 두면서 백 버너에 덜 중요한 작업을 수행하려고합니다.

Linux에서는 CPU가 수행해야 할 모든 작업을 볼 때 따라야 할 지침을 설정할 수 있습니다. 이러한 지침을 niceness 또는 nice value라고합니다. Linux niceness 척도는 -20에서 19까지입니다. 숫자가 낮을수록 작업의 우선 순위가 높아집니다. niceness 값이 19와 같이 높은 수이면 작업이 가장 낮은 우선 순위로 설정되고 CPU는 기회가있을 때마다 처리합니다. 기본 nice 값은 0입니다.

이 스케일을 사용하면 CPU 리소스를보다 적절하게 할당 할 수 있습니다. 중요하지 않은 우선 순위가 낮은 프로그램은 더 좋은 값으로 설정할 수있는 반면, 데몬 및 서비스와 같은 우선 순위가 높은 프로그램은 더 많은 CPU 포커스를 받도록 설정할 수 있습니다. 특정 사용자에게 모든 프로세스에 대해 낮은 가치를 부여하여 컴퓨터의 핵심 서비스 속도를 늦추는 기능을 제한 할 수도 있습니다.

출처

새로운 프로세스의 우선 순위를 설정 nice, 예를 들어,

nice -n 10 firefox

기존 프로세스

renice 10 -p $(pgrep firefox)

<0필요한 우선 순위를 설정하려면 다음과 같이하십시오 sudo.

renice -1 -p $(pgrep firefox)
renice: failed to set priority for 2769 (process ID): Permission denied

그러나 우선 순위가 아닙니다 >=0


% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox          19   0

% renice 10 -p 2769     # note, we don't need sudo here
2769 (process ID) old priority 0, new priority 10

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox           9  10

% sudo renice -19 -p 2769                    
 2769 (process ID) old priority 10, new priority -19

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox          38 -19

다른 예

특정 사용자에 대해 실행중인 모든 프로세스를 되 찾으려면

renice 20 -u user_name

귀하의 예에서는 renice 10없이도 작동 sudo합니까? 그리고 특정 사용자의 모든 프로세스를 더 좋게 만드는 예를 추가 할 수 있습니까? 누군가 다른 사람이 동시에 로그인하고 불필요하지만 리소스를 먹는 프로세스가 실행중인 경우 (파이어 폭스에서 일시 정지 된 플래시 게임처럼, 남동생은 그런 일을합니다 ... :-/)
바이트 사령관

@ByteCommander done =)
AB

잠시 후에 해당 사용자의 오래된 niceness 값을 어떻게 복원합니까? 다시 0으로 설정 하시겠습니까? 일부 프로세스는 이전에 다른 niceness 값을 가졌을 수도 있습니다. 이것을 할 수있는 간단한 가능성이 있습니까?
바이트 사령관

@ByteCommander 아니요, 간단하지 않습니다. 당신이 사용 0하거나 ... 문제가 있습니다;)
AB

2
renice 명령어 -19 후와 결과는 ps다음과 같습니다 PRI: 38, NI: -19, 그러나,로 top가되는 PR:1, NI -19이유입니까?
wakeup

14

짧은 답변

PR은 우선 순위 수준입니다. PR이 낮을수록 프로세스의 우선 순위가 높아집니다.

PR은 다음과 같이 계산됩니다.

  • 일반 프로세스의 경우 : PR = 20 + NI (NI는 훌륭하며 범위는 -20 ~ 19)
  • 실시간 프로세스의 경우 : PR =-1-real_time_priority (real_time_priority 범위는 1-99)

긴 답변

두 가지 유형의 프로세스가 있습니다. 일반 프로세스 와 실시간 일반 프로세스 (및 해당 프로세스에 대해서만)에는 nice가 다음과 같이 적용됩니다.

좋은

"niceness"척도는 -20에서 19로, 반면 -20은 가장 높은 우선 순위이고 19는 가장 낮은 우선 순위입니다. 우선 순위 수준은 다음과 같이 계산됩니다.

PR = 20 + NI

NI는 좋은 수준이고 PR은 우선 순위입니다. 보시다시피, -20은 실제로 0에, 19는 39에 매핑됩니다.

기본적으로 프로그램 nice 값은 0이지만 루트 사용자는 다음 명령을 사용하여 지정된 nice 값으로 프로그램을 시작할 수 있습니다.

nice -n <nice_value> ./myProgram 

실시간

우리는 더 나아갈 수있었습니다. 좋은 우선 순위는 실제로 사용자 프로그램에 사용됩니다. UNIX / LINUX 전체 우선 순위의 범위는 140 개의 값이지만 nice 값을 사용하면 프로세스가 범위의 마지막 부분 (100-139)에 맵핑 될 수 있습니다. 이 방정식은 0에서 99까지의 값을 도달 할 수없는 상태로두고 음의 PR 수준 (-100에서 -1)에 해당합니다. 해당 값에 액세스하려면 프로세스를 "실시간"으로 지정해야합니다.

LINUX 환경에는 다음 명령으로 표시 할 수있는 5 개의 스케줄링 정책이 있습니다.

chrt -m 

다음 목록이 표시됩니다.

1. SCHED_OTHER   the standard round-robin time-sharing policy
2. SCHED_BATCH   for "batch" style execution of processes
3. SCHED_IDLE    for running very low priority background jobs.
4. SCHED_FIFO    a first-in, first-out policy
5. SCHED_RR      a round-robin policy

스케줄링 프로세스는 2 개의 그룹, 정상 스케줄링 정책 (1 내지 3) 및 실시간 스케줄링 정책 (4 및 5)으로 나 could 수있다. 실시간 프로세스는 항상 일반 프로세스보다 우선합니다. 다음 명령을 사용하여 실시간 프로세스를 호출 할 수 있습니다 (예 : SCHED_RR 정책을 선언하는 방법).

chrt --rr <priority between 1-99> ./myProgram

실시간 프로세스에 대한 PR 값을 얻으려면 다음 방정식이 적용됩니다.

PR = -1-rt_prior

여기서 rt_prior는 1과 99 사이의 우선 순위에 해당합니다. 따라서 다른 프로세스보다 우선 순위가 높은 프로세스는 숫자 99로 호출 된 프로세스입니다.

실시간 프로세스의 경우 좋은 가치가 사용되지 않습니다.

프로세스의 현재 "niceness"및 PR 값을 보려면 다음 명령을 실행할 수 있습니다.

top

다음과 같은 출력이 표시됩니다.

여기에 이미지 설명을 입력하십시오

그림에서 PR 및 NI 값이 표시됩니다. 실시간 값에 해당하는 PR 값 -51의 프로세스를 기록하는 것이 좋습니다. PR 값이 "rt"로 지정된 일부 프로세스도 있습니다. 이 값은 실제로 -100의 PR 값에 해당합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.