2007년 07월 04일
CPU 전압을 낮춰서 CPU 온도를 낮추자... CPU Undervolt

그래서 두 페이지를 짬봉해서 전압을 낮췄는데, 이것이 생각했던 이상으로 온도를 낮춰주는 효과가 있었다. 난 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) */798Mhz에서 0.988V, 1.064Ghz에서 1.084V.... 이런식이다. 이것을 아래와 같이 바꾸어 준다.
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 }
};
/* Intel Pentium M processor 750 / 1.86 GHz (Sonoma) */클럭은 1.197(1.2)Ghz, 1.463(1.46)Ghz, 1.729(1.73)Ghz가 추가되어서 8단계로 클럭이 변하게 되며, 전압도 기존보다 0.3V 가량 낮추었다.
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 }
};
④ 커널 컴파일 옵션이 정의된 .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 | 2007/07/04 00:55 | :: C space :: 컴퓨터 | 트랙백 | 핑백(1) | 덧글(24)
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
... 하신 분들이 계신듯 하지만, 몇번 해봤는데 잘 되지 않아서 그냥 커널의 speedstep-centriono.c를 수정하는 방법으로 전압을 조정하였다. 이전에 포스팅 했던 이 글 역시 PHC를 이용한 것이 아닌, speedstep-centriono.c를 수정함으로써 커널 상에서 전압을 고정시키는 방법이다. 주의할 것은 앞으로 진행할 방법은 자신의 C ... more
E: apt-get의 소스 꾸러미를 찾을 수 없습니다
에러발생입니다...ㅎㅎ;; 리눅스 초짜라 잘 모르겠습니다~~ 알려주세요~~~
E: linux-image-2.6.20.16-generic의 소스 꾸러미를 찾을 수 없습니다
이케 에러 표시 됬는데...흑흑... 수정된거 복사해서 실행했더니 되네요...다시 설치 하겠습니다~~ㅎ;;ㄱㅅ
삼보노트북의 고질적인 따뜻하다 못해 뜨거운 발열현상 이것으로 좀 따뜻해지겠네요~~
좋은 자료가 너무 많아서 자주 들리게 됩니다~~ ㄱㅅ 합니다~~ㅎㅎ
저랑 같은 4280을 쓰시나요?
요즘 같은 여름에 전압 값 낮춘 효과를 톡톡히 보고 있죠.
기존의 온도가 얼마나 올라갔었는지를 알고 계셔야 비교가 되겠지만요.
ACPI를 사용하시면 보통 acpi -t 명령어로 온도 확인이 가능하구요.
혹은 http://sakuragis.egloos.com/2416500 이 포스팅에 나온 프로그램을 이용해도 온도 확인이 가능합니다.
도선 Pentium M 753 1.2Ghz는 설정란이 없네요.. 제가 칸을 만들어서(!) 넣어줬는데.. 컴파일 도중에 설정은 되어있는데 사용하지 않는다(?)이런 메시지 뿌리고 그냥 지나가더군요..근데 안된거 같아요~~전압도 그대로 먹네요(제 노트북은 온도감지를 못하더군요..ㅠㅠ)
어쨌든 실패했는데.. 커널 다시 복구할 수 없을까요~? 쓰는데 이상은 없긴 한데 영 찜찜해서.. 우분투에서 커널 패키지를 재설치하면 될까요~?
아니면 추가하신 부분을 빼고, 다시 작업 하셔도 원래대로 되겠지요. :)
CPU가 신형이라 아직 커널에 반영이 되지 않았나 보군요.
위의 방법은 사용자가 자신의 시스템이 다운되거나 오동작하지 않은 만큼 클럭별 시스템의 전압을 최저전압으로 셋팅해주는 거죠. :)
저는 특별히 퍼포먼스가 많이 감소한다고 느끼지 않았습니다. 노트북을 사용하는 입장에서는 감소한 퍼포먼스보다는 감소한 온도 쪽이 훨씬 와닿더군요. :D
(컴퓨터 살때 괜히 준슬림으로 샀네요 어휴.지금까진 커다란 케이스만 써오다가 그냥 심심해서 준슬림으로 맞췄는데 단점이 엄청나네요.)
윈도에서도 NHC없이는 사용이 힘들(?)정도로 발열이 심한 놋북이라서 리눅스만 돌리면 답답했는데.. 좋은 팁 감사합니다.
sudo tar zxvf phc_feisty.tar.gz -C /usr/src/linux-source-2.6.20-2.6.20/arch/i386/kernel/cpu/cpufreq/
이 부분에서 i386폴더가 없던데.. 어떻게 해야하죠?
/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에서 제가 사용하는 방법을 올려보도록 하겠습니다.