CPU 전압을 낮춰서 CPU 온도를 낮추자... CPU Undervolt

  오늘 HanIRC #fluxbox의 무달님께서 이런 페이지를 보여주시며, 효과가 좋다고 써보라고 하셨다. 처음에는 커널을 건드리고 커널 컴파일 하는 것이 귀찮아서 안한다고 했다가, 그렇지 않아도 윈도우즈에서는 NHC로 전압을 낮춰쓰던 중이고, 리눅스에서도 전압을 낮출 수 없을까? 하고 생각을 했던 적이 있다보니 우분투(Ubuntu Feisty Fawn 7.04)에서 적용 할 수 있는 방법이나 이미 적용된 패키지가 없나? 뒤져보다가 이런 페이지를 찾게 되었다.

 그래서 두 페이지를 짬봉해서 전압을 낮췄는데, 이것이 생각했던 이상으로 온도를 낮춰주는 효과가 있었다. 난 Intel Pentium-M 750(1.86Ghz) Sonoma CPU가 달린 노트북(에버라텍 4200)을 쓰는데, 기존에 최저 클럭(798Mhz)에서 간단히 작업 중일 때 48~50도 정도의 온도였는데, 전압을 낮추고 나서는 45~48도 정도의 온도를 유지하게 되었다.

 더 큰 수확은 기존에 CPU에 풀로드가 걸릴 때 최고 클럭(1.86Ghz)에서 온도가 80도까지 치솟았는데, 전압을 낮추고 1시간 동안 풀로드를 걸었을 때 최고 클럭(1.86Ghz)에서 64도를 기록했다. 무려 16도나 온도가 떨어졌고, 70도 전후로 팬이 세게 돌면서 소음이 한층 심해졌는데, 소음이 줄었음은 당연한 일이다.

 이 정도까지 온도가 낮춰질꺼라는 생각은 하지 않았는데, 오늘의 큰 수확인 셈이다.
 일단 시작전에 확실히 할 것은 이 방법은 기존의 CPU에 들어가는 전압을 기본 전압 이하로 낮추는 것이므로, 사용중 시스템이 다운되거나 할 수도 있고, 기기에 따라서 적용되는 범위의 차이가 있을 수도 있다. 그에 관한 문제는 쓰는 사람이 전적으로 책임을 져야한다. 난 내 노트북을 1년 반 동안 전압을 낮춰 쓰고 있지만(윈도우즈에서 NHC를 이용), 큰 문제는 없었기에 적용해서 쓰고 있다.

 이 방법은 Ubuntu Feisty Fawn 7.04를 기준으로 작성되었고, 테스트는 Intel Pentium M processor 750 / 1.86 GHz (Sonoma)를 장착한 에버라텍 4200(4280)에서만 해보았다. 권해주신 무달님께서는 맥북을 쓰신다.

① 우선 적절한 디렉토리에 커널 소스를 받는다. 나는 /usr/src에 소스를 받았다. 현재 최신 버전 커널은 2.6.20-16 이다. 앞으로 커널 소스를 /usr/src에 받았다는 가정하에 얘기하겠다.
sudo apt-get source linux-image-2.6.20-16-generic

② 그리고 다음의 파일을 받아서 아래와 같이 압축을 풀어준다.
phc_feisty.tar.gz
sudo tar zxvf phc_feisty.tar.gz -C /usr/src/linux-source-2.6.20-2.6.20/arch/i386/kernel/cpu/cpufreq/
위의 ② 부분은 이 포스팅에서는 전혀 상관 없는 부분이다. 이걸 알게 된 지는 상당히 오래 됐는데, 이제서야 수정한다.('08. 6. 6)

③ speedstep-centrino.c 수정을 통한 클럭/전압 조절한다.

 커널 소스의 아래의 디렉토리에 들어가보면 speedstep-centrino.c 라는 파일이 존재하는데, 이 파일을 열게 되면..
/usr/src/linux-source-2.6.20-2.6.20/arch/i386/kernel/cpu/cpufreq/
105번째 줄 부터 Intel의 노트북용(모바일) CPU 들에 관한 클럭과 전압이 정의 되어 있다. 이 부분부터 자신의 CPU에 해당하는 CPU 부분을 찾아서 전압을 적절히 고쳐주면 된다. 각 CPU에 적용 가능한 최저 전압 정보는 여기를 보면 사용자들이 자신의 사용 전압을 적어놓은 부분이 있는데, 그곳의 수치를 참고해서 수정하면 된다. 아니면 NHC와 관련해서 찾거나 해당 노트북 모임(예: nbinside.com) 같은 곳에 가면 찾을 수 있을 것이다.
내 CPU에 맞는 클럭/전압 정의는 378번째 줄부터 있는데, 기존에는 다음과 같이 되어 있었다.
/* Intel Pentium M processor 750 / 1.86 GHz (Sonoma) */
static struct cpufreq_frequency_table sonoma_1862[] =
{
    OPEX( 798, 133,  988,  988,  988,  988),
    OPEX(1064, 133, 1084, 1080, 1068, 1056),
    OPEX(1330, 133, 1180, 1172, 1132, 1124),
    OPEX(1596, 133, 1276, 1264, 1196, 1192),
    OPEX(1862, 133, 1356, 1356, 1260, 1260),
    { .frequency = CPUFREQ_TABLE_END }
};
798Mhz에서 0.988V, 1.064Ghz에서 1.084V.... 이런식이다. 이것을 아래와 같이 바꾸어 준다.
/* Intel Pentium M processor 750 / 1.86 GHz (Sonoma) */
static struct cpufreq_frequency_table sonoma_1862[] =
{
    OPEX( 798, 133,  700,  988,  988,  988),
    OPEX(1064, 133,  780, 1080, 1068, 1056),
    OPEX(1197, 133,  828, 1172, 1132, 1124),
    OPEX(1330, 133,  876, 1172, 1132, 1124),
    OPEX(1463, 133,  924, 1264, 1196, 1192),
    OPEX(1596, 133,  972, 1264, 1196, 1192),
    OPEX(1729, 133, 1020, 1356, 1260, 1260),
    OPEX(1862, 133, 1036, 1356, 1260, 1260),
    { .frequency = CPUFREQ_TABLE_END }
};
클럭은 1.197(1.2)Ghz, 1.463(1.46)Ghz, 1.729(1.73)Ghz가 추가되어서 8단계로 클럭이 변하게 되며, 전압도 기존보다 0.3V 가량 낮추었다.

④ 커널 컴파일 옵션이 정의된 .config 파일을 새로 받은 커널 소스 디렉토리에 복사한다.
sudo cp /boot/config-2.6.20-16-generic /usr/src/linux-source-2.6.20-2.6.20/.config

⑤ CPU 클럭/전압에 관련된 모듈만 컴파일 해준다.
/usr/src/linux-source-2.6.20-2.6.20 디렉토리에서 해야한다.
sudo make oldconfig
sudo make prepare
sudo make scripts
sudo make M=./arch/i386/kernel/cpu/cpufreq

⑥ 컴파일 된 새로운 모듈을 기존의 커널의 모듈과 바꾸어준다.
문제가 생길 수 있으니 기존의 모듈은 적절한 곳에 복사해두는 것도 좋은 방법이다.
sudo cp arch/i386/kernel/cpu/cpufreq/speedstep-centrino.ko /lib/modules/2.6.20-16-generic/kernel/arch/i386/kernel/cpu/cpufreq

⑦ 여기까지 완료됐다면 재부팅
을 해주면 새롭게 설정된 전압과 클럭이 적용되서 부팅이 된다.

위의 스크린샷처럼 그놈의 'CPU 클럭 스케일링' 애플릿에서 클럭 및 정책을 변경해주고 싶다면 아래와 같은 명령을 해줌으로 사용 할 수 있다. 우분투 포럼(http://ubuntu.or.kr/forum)의 snowboard975님의 팁이다.
sudo chmod +s /usr/bin/cpufreq-selector

by sakuragi | 2007/07/04 00:55 | :: C space :: 컴퓨터 | 트랙백 | 핑백(1) | 덧글(24)

트랙백 주소 : http://sakuragis.egloos.com/tb/3565899
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Linked at sakuragi's misce.. at 2008/06/06 22:17

... 하신 분들이 계신듯 하지만, 몇번 해봤는데 잘 되지 않아서 그냥 커널의 speedstep-centriono.c를 수정하는 방법으로 전압을 조정하였다. 이전에 포스팅 했던 이 글 역시 PHC를 이용한 것이 아닌, speedstep-centriono.c를 수정함으로써 커널 상에서 전압을 고정시키는 방법이다. 주의할 것은 앞으로 진행할 방법은 자신의 C ... more

Commented by 푸우 at 2007/07/05 00:35
1번부터 막혀 버리네요....ㅡ,.ㅡㅋ
E: apt-get의 소스 꾸러미를 찾을 수 없습니다
에러발생입니다...ㅎㅎ;; 리눅스 초짜라 잘 모르겠습니다~~ 알려주세요~~~
Commented by sakuragi at 2007/07/05 00:37
푸우, 죄송해요~ 명령어가 틀렸었네요. 수정했습니다. 다시 해보세요~ :D
Commented by 푸우 at 2007/07/05 00:52
쿨럭.. 분명히 명령어를 틀리게 적어셨구나 라고 생각 저렇게 적었을때
E: linux-image-2.6.20.16-generic의 소스 꾸러미를 찾을 수 없습니다
이케 에러 표시 됬는데...흑흑... 수정된거 복사해서 실행했더니 되네요...다시 설치 하겠습니다~~ㅎ;;ㄱㅅ
Commented by 푸우 at 2007/07/05 01:22
ㅎㅎ 설치 완료했습니다!!
삼보노트북의 고질적인 따뜻하다 못해 뜨거운 발열현상 이것으로 좀 따뜻해지겠네요~~
좋은 자료가 너무 많아서 자주 들리게 됩니다~~ ㄱㅅ 합니다~~ㅎㅎ
Commented by sakuragi at 2007/07/05 02:15
푸우, 온도는 좀 내려갔나요? 그런데 어떤 모델을 쓰시나요?
저랑 같은 4280을 쓰시나요?
Commented by 떠돌이곰 at 2007/07/07 18:19
마지막 팁 정말 좋은 팁이네요^^ 지금까지 CPU정책에 직접 에코로 값을 입력해주며 쓰고 있었는데..(그덕에 그때마다 비밀번호 눌러야 했다는) 정말 감사드립니다^^ 전압 값도 시도해보고 있는 중입니다~
Commented by sakuragi at 2007/07/07 19:08
떠돌이곰, CPU 정책은 저도 우분투 포럼의 snowboard975님에게서 얻은 팁이니까요. :)
요즘 같은 여름에 전압 값 낮춘 효과를 톡톡히 보고 있죠.
Commented by 떠돌이곰 at 2007/07/07 19:22
^^결과값은 어떨게 확인하면 되나요~? 전부 에러없이 하긴 했는데 적용된건지 모르겠네요~~
Commented by sakuragi at 2007/07/07 20:42
떠돌이곰, 결과는 온도를 확인해보시면 되죠. :)
기존의 온도가 얼마나 올라갔었는지를 알고 계셔야 비교가 되겠지만요.
ACPI를 사용하시면 보통 acpi -t 명령어로 온도 확인이 가능하구요.
혹은 http://sakuragis.egloos.com/2416500 이 포스팅에 나온 프로그램을 이용해도 온도 확인이 가능합니다.
Commented by 떠돌이곰 at 2007/07/07 21:08
으허어..ㅠㅠ실패입니다~ 어쩐지 이상하다 했는데..
도선 Pentium M 753 1.2Ghz는 설정란이 없네요.. 제가 칸을 만들어서(!) 넣어줬는데.. 컴파일 도중에 설정은 되어있는데 사용하지 않는다(?)이런 메시지 뿌리고 그냥 지나가더군요..근데 안된거 같아요~~전압도 그대로 먹네요(제 노트북은 온도감지를 못하더군요..ㅠㅠ)

어쨌든 실패했는데.. 커널 다시 복구할 수 없을까요~? 쓰는데 이상은 없긴 한데 영 찜찜해서.. 우분투에서 커널 패키지를 재설치하면 될까요~?
Commented by sakuragi at 2007/07/07 21:25
떠돌이곰, 네 커널을 재설치하셔도 원래대로 돌아 갈 것 같군요. (linux-image-2.6.20-16-generic)
아니면 추가하신 부분을 빼고, 다시 작업 하셔도 원래대로 되겠지요. :)
CPU가 신형이라 아직 커널에 반영이 되지 않았나 보군요.
Commented by 떠돌이곰 at 2007/07/07 21:50
도선 1.1이랑 1.4는 있는데..1.2만 없네요..ㅋㅋㅋ 어쨌든 감사합니다^ㅡ^ 이글루 링크해도 될런지요~?
Commented by sakuragi at 2007/07/07 21:59
떠돌이곰, 네, 링크해주시면 제가 고맙죠. :)
Commented by Mind$torm at 2007/07/18 13:08
시스템 퍼포먼스는 많이 감소하지 않던가요??? 흠흠...고사양 일수록 영향이 덜할텐데... 아마도 DVS를 썼을거라는 추측... ㅡㅡ DVFS를 쓴다면 사실 전압을 그리낮추지 않아도 온도가 확떨어질텐데말이죠.
Commented by sakuragi at 2007/07/19 13:42
Mind$torm, DVFS의 원리가 대충 이것과 비슷한 것 같더군요. 클럭을 유지할 수 있는 최저의 전압을 넣어주는 것.
위의 방법은 사용자가 자신의 시스템이 다운되거나 오동작하지 않은 만큼 클럭별 시스템의 전압을 최저전압으로 셋팅해주는 거죠. :)
저는 특별히 퍼포먼스가 많이 감소한다고 느끼지 않았습니다. 노트북을 사용하는 입장에서는 감소한 퍼포먼스보다는 감소한 온도 쪽이 훨씬 와닿더군요. :D
Commented by 이정현 at 2007/07/24 21:28
데스크탑에서도 적용되는건가요?요즘에 온도때문에 자꾸 다운이 되네요..온도센서에 문제가 있는지 리눅스에서는 온도를 볼 수가 없는상태입니다.
(컴퓨터 살때 괜히 준슬림으로 샀네요 어휴.지금까진 커다란 케이스만 써오다가 그냥 심심해서 준슬림으로 맞췄는데 단점이 엄청나네요.)
Commented by sakuragi at 2007/07/25 00:22
이정현, 클럭이 고정된 데스크탑의 경우 보통 메인보드 설정(BIOS)에서 전압을 조절할 수 있으니. 굳이 이런 방법이 필요하지 않을 것 같다는 생각도 드는군요. 굳이 전압 설정을 고치려고 한다면 할 수는 있을 듯하나. 방법은 저도 모르겠습니다. :)
Commented by qwas at 2007/07/28 09:32
저는 애버라텍7100을 쓰고 있는데 3d게임만 하면 컴퓨터의 열도 많이나고 전원이 10분도 안되어 나갑니다. 그래서 nhc를 다운받아 컴퓨터의 설정도 해보았지만 별로 효과가 없더군요 다른 방법이나 nhc에서 전압관련 셋팅이 있던데 님께서 코치좀 부탁드립니다.
Commented by sakuragi at 2007/07/28 13:38
qwas, 그 정도면 제품 결함인데요. 열이 나서 10분만에 전원이 나갈 정도면 그건 제품 결함입니다. 저는 전압 관련 셋팅을 하기 이전에도 열 때문에 전원이 나가는 일은 없었습니다. 정당한 A/S나 교환을 요구하세요. :)
Commented by crescent at 2007/10/19 19:25
헉... 애타게 찾던 팁입니다! 지금 바로 적용했고요, 정말 만족하고 있습니다.
윈도에서도 NHC없이는 사용이 힘들(?)정도로 발열이 심한 놋북이라서 리눅스만 돌리면 답답했는데.. 좋은 팁 감사합니다.
Commented by sakuragi at 2007/10/22 12:45
crescent, 넵, 저도 그런 문제 때문에 고생했죠. :)
Commented by umayloveme at 2008/05/29 16:22
이번에 8.04 나오면서 전압 조절이 안됩니다.
sudo tar zxvf phc_feisty.tar.gz -C /usr/src/linux-source-2.6.20-2.6.20/arch/i386/kernel/cpu/cpufreq/
이 부분에서 i386폴더가 없던데.. 어떻게 해야하죠?
Commented by sakuragi at 2008/06/06 19:36
폴더 구조에 변경이 생겼습니다.
/usr/src/linux-source-2.6.20-2.6.20/arch/i386/kernel/cpu/cpufreq/ 가 아닌
/usr/src/linux-source-버전명/arch/x86/kernel/cpu/cpufreq/ 입니다.
조만간 시간을 내서 Hardy에서 제가 사용하는 방법을 올려보도록 하겠습니다.
Commented by 오경석 at 2009/05/18 12:27
이 글 링크로 퍼 갑니다. 안 된다면 링크 삭제할께요^^

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶

:+: sakuragi's Steam :+: