CPU 온도를 조절하려면 하나의 프로세스만 속도를 늦추세요.

CPU 온도를 조절하려면 하나의 프로세스만 속도를 늦추세요.
  1. 프로그램이 있습니다. 실행 중에 CPU 온도가 50도에서 80도로 올라가는 것이 가장 큰 고민이었습니다.

    CPU 주파수를 제어하여 속도를 늦출 수 있지만 다른 프로세스도 느려지므로 원하지 않습니다.

    다른 프로세스에 영향을 주지 않고 CPU를 시원하게 유지하기 위해 특정 프로세스의 속도를 늦출 수 있습니까?

    내 운영 체제는 Ubuntu 10.10입니다.

  2. 프로세스의 우선순위를 설정해 보았지만 nice -n 15 myprogram이것이 작동하는지 확실하지 않습니다. CPU 최대 온도는 섭씨 77도입니다.

    nice다른 프로세스에 비해 한 프로세스의 상대적 우선순위만 설정 합니까 ? 즉, 다른 프로세스가 실행되고 있지 않으면 이 좋은 프로세스가 더 빠르게 실행됩니까? 항상 느리게 실행되도록 프로세스를 설정하고 싶습니다.

답변1

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%를 사용할 수 있습니다.

답변2

당신은 할 수레니스실행 중인 프로세스에 더 높거나 낮은 우선순위를 부여합니다(소위 "좋은 값"). UNIX 우선 순위 척도는 다소 직관적이지 않습니다. 음수 값은 프로세스가 동시 프로세스보다 선호된다는 의미입니다. 즉, "더 많은" 우선 순위를 갖습니다.

따라서 다음과 같이 특정 PID에 대한 프로세스를 "느리게" 시도할 수 있습니다.

# lower priority of a process
renice +1 "PID"

이 프로그램이 실행될 때마다 프로세스 "nice value"가 1씩 증가합니다. 물론 이 이상의 정수 값을 사용할 수도 있습니다 +1.

주문하다좋아요+10의 적절한 값 조정으로 프로세스를 시작할 수 있습니다(이 값을 변경하려면 옵션을 사용하십시오 -n). 예를 들어:

# start a CPU-intensive task with low priority
nice ./cpu-hog

그러나 "좋은 값"은 스케줄러가 시스템의 다른 프로세스에 비해 특정 프로세스를 실행하는 것을 얼마나 선호하는지에만 영향을 미칩니다. 컴퓨터가 대부분 유휴 상태인 경우 개별 프로세스의 "좋은 값"을 높이면아니요이 프로세스가 CPU를 100% 차지하지 않도록 하세요. 나는 인용한다getpriority(2) 맨페이지: (강조는 제가 추가했습니다.)

상대 값이 프로세스 스케줄링에 영향을 미치는 정도는 Unix 시스템마다 다르며 Linux에서는 커널 버전마다 다릅니다. 커널 2.6.23부터 리눅스는 좋은 값의 상대적 차이가 더 강한 효과를 내는 알고리즘을 채택한다. 이로 인해 매우 낮은 Nice 값(+19)이 발생하여 실제로 프로세스에 CPU가 거의 제공되지 않습니다.다른 일이 있을 때마다 _시스템의 우선순위가 더 높은 로드입니다._

그 이유는 UNIX와 유사한 커널에서 프로세스가 실행되는 방식에 있습니다. 커널이 프로세스를 실행하기로 결정할 때마다 해당 프로세스는 특정(고정 및 짧은) 기간 동안 CPU 코어를 완전히 제어합니다. "좋은 값"은 커널 스케줄러가 프로세스에 시간 슬롯을 제공하는 빈도에 영향을 미칠 수 있지만 일단 예약되면 프로세스가 중단 없이 고정된 시간 동안 실행된다는 사실을 변경할 수 없습니다.

따라서 시스템에 CPU 액세스를 놓고 경쟁할 수 있는 다른 프로세스가 없으면 CPU 속도를 늦추지 않고는 프로세스 속도를 늦출 수 없습니다.

답변3

cgroup바로 이런 이유로 만들어졌습니다.

http://www.kernel.org/doc/Documentation/cgroups/ http://www.serverwatch.com/tutorials/article.php/3921001/Setting-Up-Linux-Cgroups.htm

익숙해지려면 시간이 좀 걸리고 설정하려면 루트 액세스가 필요하지만 모두 스크립트 가능합니다. 최신 Ubuntu에는 .conf 파일이 있으므로 스크립트를 직접 작성할 필요가 없습니다. 10.10은 잘 모르겠네요.

이 답변은 좋은 출발점입니다. https://askubuntu.com/a/94743/170177

cgroups는 아직 개발 중이므로 현재 커널에서는 일부 기능을 사용하지 못할 수도 있습니다.

cgroup 사용'CPU 공유아무것도하지 마세요좋아요그럴 가치가 없어. 실제로 프로세스를 제한하려는 것처럼 들리는데, 이는 확실히 수행될 수 있습니다.

한두 개의 스크립트를 사용하거나 편집해야 합니다./etc/cgconfig.conf원하는 매개변수를 정의합니다.

특히 값을 편집하고 싶습니다.CPU.cfs_기간_us그리고CPU.cfs_quota_us. 그러면 프로세스가 실행될 수 있습니다.CPU.cfs_quota_us마이크로초마다CPU.cfs_기간_us마이크로초.

예를 들어:

만약에CPU.cfs_기간_us = 50000그리고cpu.cfs_quota_us = 10000그러면 무슨 일이 일어나더라도 프로세스는 CPU 시간의 최대 20%를 차지하게 됩니다.

이 스크린샷에서는 CPU 시간의 2%를 프로세스에 할당했습니다.

2% CPU 시간

프로세스에 관한 한 100% 속도로 실행되고 있습니다.

설정CPU 공유반면 유휴 CPU 시간은 100% 계속 사용될 수 있습니다.

이 비슷한 예에서 나는 프로세스를 제공합니다CPU.shares = 100(총 1024개 항목):

CPU 공유

보시다시피 프로세스는 여전히 모든 유휴 CPU 시간을 소비하고 있습니다.

인용하다:

http://manpages.ubuntu.com/manpages/precise/man5/cgconfig.conf.5.html http://kennystechtalk.blogspot.co.uk/2015/04/throttle-cpu-usage-with-linux-cgroups.html

관련 정보