매우 낮은 우선 순위로 리눅스 프로세스를 실행 하시겠습니까?


12

나는 중요하지는 않지만 정기적으로 CPU 전력을 많이 소비 할 것이고, 정말로 중요한 또 다른 프로세스를 가지고 있지만 대부분의 시간을 유휴 상태로 보내지 만 일자리를 얻었을 때 실제로 높은 컴퓨팅 파워가 필요합니다.

나는 실행 시도 nice -20 ./low_priority_process하고 nice --20 ./high_priority_process우선 순위가 높은 프로세스가 정말 항복 또는 다른 프로세스가 CPU 파워를 사용하는 경우에도 자동으로 일시 중지하는 프로세스를 실행할 수있는 방법을, 필요로 CPU의 상당한 양을 소비하지만, 여전히 낮은 우선 순위


우선 순위가 높은 프로세스가 실제로 필요한지 어떻게 판단합니까?
muru

많은 스레드를 생성하거나 프로세스가 CPU 용량의 50 % 이상을 CPU를
소비

RR우선 순위가 높은 프로세스에 스케줄링을 사용하십시오 .
Ramesh

@Ramesh 가능한 차이점은 무엇입니까?
Ken Sharp

답변:


10

cgroups를 살펴보면 CPU 예약 등을 정확히 제공해야합니다. cgroups 사용하여 응용 프로그램의 우선 순위를 제어 하는 것을 읽는 것이 좋습니다 .

즉, 중요하지만 자주 유휴 상태 인 프로세스를 CPU의 95 %가 할당 된 그룹으로, 다른 응용 프로그램을 5 %가 할당 된 다른 애플리케이션으로 그룹화하면 필요할 때 작업에 필요한 모든 기능을 거의 대부분 얻을 수 있습니다. 전력 배고픈 프로세스는 그때 최대 5 % 만 얻을 것입니다. 계산 서지가 사라지면 모든 CPU 성능이 나머지 프로세스에서 발생합니다. 이점으로서, 프로세스와 같은 프로세스에 대해 특별한 cgroup (최소 성능 요구 사항)을 sshd만들면 가능한 모든 CPU를 가져 오려고 할 때마다 로그인 할 수 있습니다. 일부 CPU 시간은 예약됩니다 sshd.


1
프로세스의 cgroup 과 같은 명령 cpulimit이나 nice수정 명령이 있습니까? cgroup이 API 호출 인 경우 cgroup을 사용하도록 해당 앱을 다시 컴파일 할 수 없습니다.
uray

아니요, cgroup 계층을 어딘가에 마운트하고 그룹 별 디렉토리를 만들고 프로세스의 PID를 일부 파일에 작성하기 만하면됩니다. 이 모든 것은 루트 (또는 더 정확하게는 적절한 권한으로)로 수행되어야합니다. 일부 init 시스템 (즉 systemd, 경우에 따라 적어도 일부 경우)은 init 시스템 인터페이스를 사용해야하는 사용자 (일반적으로 특수 명령)의 cgroup 인터페이스를 "훔치는"것입니다. 링크 된 답변 및 Wikipedia 기사를 읽으십시오. 정말. :)
peterph

아, libcgroup패키지 도 있는데, cgrulesengd일부 조건에 따라 실제로 프로세스를 그룹으로 분류 할 수 있는 데몬 ( )을 포함한 cgroup 작업을위한 유틸리티가 포함되어 있습니다.
peterph

7

프로세스 우선 순위 (좋은 값)가 낮 으면 높은 우선 순위 프로세스를 방해하지 않습니다. 우선 순위가 높은 프로세스가 없기 때문에 당신이 더 높은 우선 순위 프로세스가 실행 중일 때 여전히 CPU의 상당한 양을 소비 우선 순위가 낮은 프로세스를보고있는 이유는 바쁜. 아마도 IO를 기다리고있을 것입니다. (여기서 리눅스에 대해 이야기하고 있다고 가정) chrt -p -i 0 $PID보다 우선 순위가 낮은 프로세스를 실행하는 데 사용하십시오 nice 19 -p $PID.

chrt -p -i 0 $PID 프로세스를 "참"유휴 스케줄러에 넣습니다.

http://linux.die.net/man/1/chrt


2
chrt -p -i 0 $ PID
Robert Foss

chrt는 여전히 충분하지 않습니다. 내가하려는 것은 백그라운드에서 다른 비디오를 다시 인코딩하면서 비디오를 보는 것입니다. chrt를 사용하면 YouTube 동영상에 도움이되었지만 고품질 mkv는 여전히 건너 뜁니다. 내가 원했던 것은 비디오를 정상적으로 재생하는 것이지만 큰 일괄 처리가 있기 때문에 재 코딩을 위해 남아있는 모든 CPU 전력을 사용하는 것입니다.
soger

0

프로세스를 낮은 프로세스로 실행하려면이 예제를 시도하십시오.

당신이 일을 잘하면 tar xvf asets.zip

사용하다

멋진 타르 xvf assets.zip

그 후, 발행

압축을 푼 프로세스를 모니터링하는 상단

PS AUX | grep "tar"

cpulimit에 특정한 것을 시도하십시오

wget -O cpulimit.zip https://github.com/opsengine/cpulimit/archive/master.zip
unzip cpulimit.zip
cd cpulimit-master
make
sudo cp src/cpulimit /usr/bin

cpulimit -l 50 파이썬 0 9999999999> / dev / null &


예, -20"낮은 우선 순위"이고 --20"높은 우선 순위"는 nice명령에 대한 이중 대시를보십시오 . 그리고 나는 좋은 가치에 대해 완전히 이해하고 있지만, 내 질문은, 좋은 가치를 사용하는 것 이외의 스케줄러에게 알리는 방법이
있는가입니다

2
@ user77710 확실합니까? 어느 쪽도 아니 우분투 맨 이나 POSIX는 맨 이 구문을 지정합니다. 둘 다 사용 -n -20, -n 20
muru

어떤 그래, 구문, 제 요점은 내가 원하는 것을의 결과를 제공하지 않습니다 두 프로세스에 대한 매우 높은 settng 좋은의 매우 낮은 값과하지 않는 것이 중요하다
uray

2
무엇입니까? "구문이 중요하지 않다"? 그러면 niceness 값을 설정하고 있는지 어떻게 확인할 수 있습니까?
muru

난에 프로세스 좋은 값을 볼 수 있기 때문에 htop또는 top또는 ps또는 무엇 이건
uray

-1

미래의 사람들을 위해 여기 nice스트레스 가있는 완전한 예가 있습니다.

  1. 테스트 머신에는 2 개의 CPU가 있습니다
$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              2 
On-line CPU(s) list: 0,1
Thread(s) per core:  2
...
  1. 설치 stress:apt-get install stress
  2. 스트레스 우선 순위가 낮은 2 개의 CPU를 사용 중으로 설정하십시오. nice -20 stress --cpu 2
  3. 다음을 사용하여 CPU 사용량을 확인하십시오 top.
                                                 v
                                                 v
                                                 v
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                   
15894 ubuntu    39  19    8240     96      0 R  99.7  0.0   0:06.43 stress                                                                                    
15895 ubuntu    39  19    8240     96      0 R  99.7  0.0   0:06.42 stress                                                                                    

이는 두 CPU가 모두 점유되었음을 나타냅니다.

  1. 우선 순위가 높은 단일 CPU 스트레스 프로세스를 시작하십시오. nice --20 stress --cpu 1
  2. CPU 사용량을 다시 확인하십시오. top
                                                 v
                                                 v
                                                 v
                                                 v
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                   
15928 ubuntu    20   0    8240    100      0 R  99.7  0.0   0:24.02 stress                                                                                    
15894 ubuntu    39  19    8240     96      0 R  51.2  0.0   1:12.46 stress                                                                                    
15895 ubuntu    39  19    8240     96      0 R  48.8  0.0   1:12.35 stress                                                                                    

이것은 단일 코어 스트레스 프로세스가 전체 CPU를 얻는 반면, 우선 순위가 낮은 프로세스는 나머지 1 CPU를 공유한다는 것을 보여줍니다

  1. 반면에 위의 모든 stress호출을 종료하고 단일 3 프로세스를 트리거하면 stress --cpu 3각 CPU에 66 %의 CPU가 제공됩니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.