전체 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.