-
프로그램이 있습니다. 그것이 실행될 때 CPU 온도가 50에서 80 섭씨로 상승하는데, 이것이 나의 주요 관심사입니다.
CPU 주파수를 제어하여 속도를 늦출 수 있지만 원하지 않는 다른 프로세스도 느려집니다.
CPU를 시원하게 유지하기 위해 다른 프로세스에 영향을주지 않고 특정 프로세스 속도를 늦출 수 있습니까?
내 OS는 Ubuntu 10.10입니다.
-
에 의해 프로세스의 우선 순위를 설정하려고 시도했지만
nice -n 15
작동하는지 확실하지 않습니다. CPU는 77 Celcius high입니다.
myprogram않습니다
nice
만 다른 프로세스 WRT 프로세스의 상대적 우선 순위를 설정? 즉, 다른 프로세스가 실행되고 있지 않으면이 멋진 프로세스가 빠르게 실행됩니까? 프로세스가 전반적으로 느리게 실행되도록 설정하고 싶습니다.
답변
CPULimit가 정확히 필요한 것입니다. 프로그램을 시작한 다음 프로그램 이름 또는 PID에 대해 cpulimit를 실행하여 원하는 백분율을 지정하십시오.
다음 명령은 PID 7777의 프로세스를 CPU 사용량으로 5 %로 제한합니다.
cpulimit -p 7777 -l 5
또는 실행 파일 이름을 사용할 수 있습니다.
cpulimit -e myprogram -l 5
또는 실행 파일의 절대 경로 :
cpulimit -P /path/to/myprogram -l 5
백분율은 모든 코어의 비율입니다. 따라서 코어가 4 개인 경우 400 %를 사용할 수 있습니다.
답변
실행중인 프로세스를 취소 하여 우선 순위 (소위 “nice value”)에 우선 순위를 부여 할 수 있습니다 . UNIX 우선 순위 척도는 다소 반 직관적입니다. 음수 값은 프로세스가 동시 프로세스보다 선호됩니다. 즉 “더 많은”우선 순위를 갖습니다.
따라서 PID를 통해 프로세스를 “느리게”시도 할 수 있습니다.
# lower priority of a process
renice +1 "PID"
이것을 실행할 때마다 “nice value”프로세스는 1 씩 증가합니다. +1
물론 정수 값을 사용할 수 있습니다 .
nice 명령을 사용하면 +10 nice 값 조정으로 프로세스를 시작할 수 있습니다 (옵션으로 변경 -n
). 예를 들면 다음과 같습니다.
# start a CPU-intensive task with low priority
nice ./cpu-hog
그러나 “nice value”는 시스템의 다른 프로세스보다 특정 프로세스를 실행하는 스케줄러가 선호하는 정도에만 영향을 미칩니다. 컴퓨터가 기본적으로 유휴 상태 인 경우 하나의 단일 프로세스의 “nice value”를 높이면 해당 프로세스가 100 %를 차지 하지 않습니다. CPU. 나는 getpriority (2) 맨 페이지 에서 인용합니다 : (Emphasis added by me.)
상대적으로 좋은 가치가 프로세스 스케줄링에 영향을 미치는 정도는 Unix 시스템과 Linux에서 커널 버전에 따라 다릅니다. 커널 2.6.23부터 Linux는 좋은 값의 상대적인 차이가 훨씬 더 강한 효과를 갖는 알고리즘을 채택했습니다. 이로 인해 시스템에 다른
우선 순위로드 가있을 때마다 매우 낮은 값 (+19)이 프로세스에 CPU를 거의 제공하지 않습니다 ._
그 이유는 프로세스가 UNIX와 유사한 커널에서 실행되는 방식에 있습니다. 커널이 프로세스를 실행하기로 결정할 때마다 해당 프로세스는 특정 (고정 및 짧은) 시간 동안 CPU 코어를 완전히 제어합니다. “좋은 값”은 커널 스케줄러가 프로세스에 시간 슬롯을 제공하려는 빈도에 영향을 줄 수 있지만, 일단 스케줄되면 프로세스가 일정 시간 동안 방해받지 않고 실행된다는 사실을 변경할 수는 없습니다.
따라서 CPU 속도를 늦추지 않으면 시스템에 CPU 액세스를 위해 경쟁 할 수있는 다른 프로세스가없는 경우 프로세스를 느리게 실행할 수있는 방법이 없습니다.
답변
cgroup 은이 이유로 정확하게 만들어졌습니다.
http://www.kernel.org/doc/Documentation/cgroups/
http://www.serverwatch.com/tutorials/article.php/3921001/Setting-Up-Linux-Cgroups.htm
그것들에 익숙해지는 데 약간의 시간이 걸리며, 그것들을 설정하려면 루트 액세스 권한이 필요하다고 생각하지만 모두 스크립트 할 수 있습니다. 최신 Ubuntus에는 .conf 파일이 있으므로 사용자가 직접 스크립트를 작성할 필요가 없습니다. 10.10에 대해 잘 모르겠습니다.
시작하기 좋은 곳은이 답변에 있습니다 :
https://askubuntu.com/a/94743/170177
cgroup은 아직 개발 중이므로 현재 커널에서 일부 기능을 사용하지 못할 수 있습니다.
cgroups의 cpu.shares를 사용 하면 좋은 가치가하지 않을 것입니다. 실제로 프로세스를 조절하고 싶은 것처럼 들립니다.
원하는 매개 변수를 정의 하려면 스크립트를 한두 개 사용하거나 /etc/cgconfig.conf 를 편집 해야 합니다.
특히 cpu.cfs_period_us 및 cpu.cfs_quota_us 값을 편집하려고합니다 . 그러면 프로세스는 cpu.cfs_period_us 마이크로 초당 cpu.cfs_quota_us 마이크로 초 동안 실행될 수 있습니다 .
예를 들면 다음과 같습니다.
만약 cpu.cfs_period_us = 50000 및 cpu.cfs_quota_us이 = 10000 프로세스는 상관없이 진행되는 다른 어떤 CPU 시간의 최대 20 %를 받게됩니다.
이 스크린 샷에서 프로세스 2 %의 CPU 시간을 부여했습니다.
프로세스와 관련하여 100 %로 실행 중입니다.
반면 설정 cpu.shares 는 유휴 CPU 시간의 100 %를 계속 사용할 수 있습니다.
이 비슷한 예에서 프로세스 cpu.shares = 100 (의 1024)을 지정했습니다.
보시다시피 프로세스는 여전히 모든 유휴 CPU 시간을 소비하고 있습니다.
참고 문헌 :
http://manpages.ubuntu.com/manpages/precise/man5/cgconfig.conf.5.html
http://kennystechtalk.blogspot.co.uk/2015/04/throttling-cpu-usage-with-linux-cgroups .html