전체 CPU 소비를 제한하는 방법이 있습니까?


23

내 랩톱 (i3 칩이 장착 된 HP)은 리소스가 많은 프로세스 (예 : 큰 컴파일, 큰 타르볼 추출 또는 플래시 재생)를 실행할 때마다 미친 것처럼 과열됩니다.

현재 일부 냉각 솔루션을 찾고 있지만 전 세계 CPU 소비를 제한한다는 아이디어를 얻었습니다. CPU가 제한되면 온도가 급격히 증가하는 것을 멈출 가능성이 있으며 작업을 완료하기 위해 약간의 성능을 기꺼이 희생 할 것이라고 생각했습니다.

  1. 내가 추론하는 데 잘못인가?
  2. CPU 사용량을 전체적으로 제한하려면 어떻게해야합니까?

도움이된다면 데비안을 실행 중입니다.


나는 당신이 cgroup에와 이렇게 잘 모르겠어요 때문에 대답 대신 포인터로 여기를 떠날 수 있다고 생각하고, 나는 ... 정확히 어떻게 잘 모르겠어요
derobert

cgroup을 사용하려고 할 수 있습니다. 여기에 비슷한 문제를 가진 후 질문은 다음과 같습니다 unix.stackexchange.com/questions/14537/...
그르 Wierzowiecki

답변:


10

CPU를 전체 시스템으로 제한하는 것이 많은 해킹없이 가능하다는 것을 모르겠지만 cpulimit를 사용하여 단일 프로세스에서 사용하는 CPU의 양을 쉽게 제한 할 수 있습니다

내가 이것을 효과적으로 사용할 수 있다고 생각할 수있는 유일한 방법은 리소스 호그라는 응용 프로그램에 대해 래퍼 스크립트를 작성하는 것입니다 (실제로는 스크립트라고 할 수는 없으며 너무 작습니다). 예를 들어 google-chrome에서 많은 CPU를 사용한다고 가정하면 경로에서 google-chrome 바이너리를 다음과 같이 바꿀 수 있습니다.

#! /bin/bash
cpulimit --limit 70 /usr/bin/google-chrome-bin

나는 이것을 테스트하지 않았으므로 소금 한 알로 가져 가십시오. cpulimit의 웹 사이트에서 다른 응용 프로그램에 대한 CPU 제한에 대한 규칙을 설정할 수있는 것처럼 보입니다. 잘 모르겠습니다. 한번 살펴 봐야합니다.


10

언급되지 않은 또 다른 대안은 cpufrequtils데비안 6과 함께 랩톱에 설치하고 사용 했습니다. 커널이 응답으로 클럭 속도를 높이거나 낮추는 데 사용 하는 알고리즘 ( 지사 , cpufrequtils용어) 을 변경할 수 있습니다 로드하려면-특히, 관리자는 userspace사용자가 선택한 것 (물론 CPU가이 속도로 작동 할 수 있어야 함)으로 주파수를 잠글 수 있습니다.

예를 들어 1.6GHz 대신 800MHz로 Atom을 잠그는 데 사용했습니다. 사용하기 매우 쉽습니다.


1
이것이 정답입니다. (또는 temp_throttle)
Vajk Hermecz

6

temp_throttle 스크립트를 사용하여 온도에 따라 CPU 코어를 자동으로 제한 할 수 있습니다 . 더 중요한 것에 집중하면서 백그라운드에서 실행할 수 있습니다. 실행 방법에 대한 예 :

sudo ./temp_throttle.sh 80 # Will limit CPU cores when 80C is reached.

* 면책 조항-나는 temp_throttle의 저자이자 관리자입니다 *


3

BIOS로 가서 CPU를 언더 클럭하십시오. -영리 할 필요가 없습니다.


언더 클럭킹을 지원하지 않는 BIOS는 어떻습니까?
daboross

1
cgroups를 사용하지만 tbh 주파수 설정을 변경할 수없는 바이오스를 보지 못했습니다.
Sirex

내 (아마도 꽤 나쁘게 구축 된) Alienware m14x r1 랩톱에는 그러한 설정이 없으므로 부팅 순서 및 시스템 시간 외에 BIOS에서 변경할 수있는 것이 거의 없습니다.
daboross


1

주지사를 변경할 필요가 없으며 /sys/devices/system/cpu/*/cpufreq/scaling_max_freq각 CPU 코어 의 값만 변경하면 됩니다.

예를 들어이 for 루프는 다음과 같습니다.

for f in /sys/devices/system/cpu/*/cpufreq/scaling_max_freq; do
    sudo sh -c "echo $1 > $f" 
done

내 setcpu 스크립트 도 참조하십시오 .

( 원래 명령은 여기에 있습니다 )


-2

renice프로세스 또는 그룹 ID별로 프로세스 우선 순위를 변경하는 데 사용할 수 있습니다 . 의 예에서 renice:

  1. 프로세스 ID 987 및 32가 더 낮은 nice 값을 갖도록 nice 값을 조정하십시오.

    renice -n 5 -p 987 32

  2. 사용자에게 적절한 권한이있는 경우 그룹 ID 324 및 76이 더 좋은 값을 갖도록 nice 값을 조정하십시오.

    renice -n -4 -g 324 76

  3. 숫자 사용자 ID 8 및 사용자 sas가 nice 값을 낮추도록 nice 값을 조정하십시오. renice -n 4 -u 8 sas


4
답에 대한 추가 참고 사항 : renice, nice 또는 기타 유사한 도구는 CPU 온도에 영향을 미치지 않으며 문제가있는 프로세스는 CPU 사이클을 계속 먹습니다.
Rufo El Magufo

2
nice and renice는 CPU 소비를 제한하지 않습니다. 그들은 단순히 우선 순위를 정합니다. 다른 것도 동시에 실행되고 있지 않으면 프로세스는 여전히 모든 처리 능력을 소비합니다.
rahmu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.