от Uvigii(28-09-2005)

рейтинг (26)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

Да си поиграем с огъня

Да си поиграем с огъня. Динамична промяна на работната честота на АМД К7

2005-09-27 За контакти: uvigii@linux-bg.org. Оригиналът на този документ се намира тук

Следвайки описанията в следващите няколко реда Вие подлагате хардуерът си на опасност! Вероятноста да повредите нещо е много голяма и както правилно предполагате авторът не носи никаква отговорност за последствията реални или не.

Съдържание:
1. Предистория
2. Необходим хардуер
3. Необходим софтуер
4. Инсталиране
5. Заключение
6. Бележки и пояснения
7. Връзки

1. Предистория.
След прочитането на една доста интересна статия в мен се зароди желанието да намаля работната честота на процесора си а от там и потрблението на електроенергия и отделянето на топлина. За целата се сдобих с един мобилен процесор на AMD* за сокет А. Монтирах го в дънната си платка и започнах да експериментирам. Истината е, че доста рядко ми се налага да ползвам пълния потенциал на процесора си – но понякога наистина се изисква максималната производителност. Затова търсенето ми бе насочено по-скоро в посока динамична промяна на честотата на процесора. Докато това е лесно и отдавна се ползва в мобилните компютри при стационарните нещата не стоят точно така – за подробности потърсете в интернет ;). И тъй като не намерих това което търсих – просто си го направих. Ако не беше огромния труд на безброй много хора на базата на който да стъпя - аз не бих успял! Така, че тук е мястото да благодаря ня всички хора подарили дори една своя идея на обществото!!!
На кого може да е полезена тази статия : на хора желаещи да променят динамично честотата на процесора си както и за такива желаещи динамичен „overclock“** (а защо не и underclock***) Представете си че четете нещо на компютъра... нужно ли е процесорът Ви да работи на максимална честота ?! А в следващия момен си пускате любимата игра ... и Ви трябва и последната капчица производителност ... е следващите редове може и да Ви помогнат.

2. Необходим хардуер.
AMD K7 базирана система.

3. Необходим софтуер.
- Ядро версия 2.6.12 или по-висока (тествано е с ядра 2.6.12 до 2.6.13.2)
- Драйвер (powernow-k7) със следната кръпка: powernow-k7-manual_and_overclock.diff. Тази кръпка е допълнен от мен вариянт на кръпките които може да намерите тук
-Програма следяща натоварването и управляваща честотата на процесора: Аз предпочитам powernowd.

4. Инсталиране:
4.1. Кърпеж на ядрото: Просто приложете следната кръпка: powernow-k7-manual_and_overclock.diff
# patch --dry-run --verbose -p0 < powernow-k7-manual_and_overclock.diff

4.2. Настройка на таблиците: За да работи правилно драйверът се нуждае от таблици на множителите и напреженията поддържани от процесора. Точно тук изниква проблем- повечето БИОС-и за настолни компютри не съдърват такива таблици. За да се реши проблема трябва да ги дефинираме ние. За целта редактираме powernow-k7.c
Трябва да разрешим форсирането на нашите таблици:
static int overwrite_table=1;

да дефинираме самата таблица за множителите, където 30 означава множител 3х, 35= 3.5х , 40=4х и т.н (множителя умножен по 10)
static int multiplier[MAX_PST]= { 30, 60, .................

може да промените максималния (както и минималния/то) множител и напрежение – което определено е ОПАСНО и не се препоръчва (за подробности прегледайте изходния код).

4.3.Настройка на ядрото
[*] CPU Frequency scaling
[*] Enable CPUfreq debugging
<*> CPU frequency translation statistics
[*] CPU frequency translation statistics details
Default CPUFreq governor (userspace) --->
<*> 'performance' governor
<*> 'powersave' governor
--- 'userspace' governor for userspace frequency scaling
'ondemand' cpufreq policy governor
< > 'conservative' cpufreq governor
--- CPUFreq processor drivers
<*> ACPI Processor P-States driver
< > AMD Mobile K6-2/K6-3 PowerNow!
AMD Mobile Athlon/Duron PowerNow!

4.4. Компилиране и инсталация на ядрото и модулите. Консултирайте се с FAQ/HowTo на Вашата дистрибуция.

4.5. Инсталиране на PowernowD. Консултирайте се с FAQ/HowTo на Вашата дистрибуция.

4.6. Зареждане на драйвера: Заредете драйвера:
#modprobe powernow-k7

и прегледайте изхода на dmesg. Ето как изглежда на моята машина:
powernow: PowerNOW! Technology present. Can scale: frequency and voltage.
Detected 1503.812 MHz processor.
powernow: Trying ACPI perflib
powernow: ACPI perflib can not be used in this platform
powernow: ACPI and legacy methods faile
powernow: See
http://www.codemonkey.org.uk/projects/cpufreq/powernow-k7.shtml
powernow: Overwriting PST table with manual settings
powernow: Settling Time: 200 microseconds.
powernow: Max multiplayer:150. Max voltage:1450
powernow: Max multiplayer overwrited to:220
powernow: number_scales:10
powernow: number_scales:10
powernow: multipliers:0 – 30
powernow: Voltage:0 – 1200
powernow: FID: 0x10 (3.0x [300MHz]) VID:0x13 (1.200V)
powernow: multipliers:1 – 60
powernow: Voltage:1 – 1300
powernow: FID: 0x6 (6.0x [601MHz]) VID:0xe (1.300V)
powernow: multipliers:2 – 80
powernow: Voltage:2 – 1350
powernow: FID: 0xa (8.0x [802MHz]) VID:0xd (1.350V)
powernow: multipliers:3 – 90
powernow: Voltage:3 – 1400
powernow: FID: 0xc (9.0x [902MHz]) VID:0xc (1.400V)
powernow: multipliers:4 – 100
powernow: Voltage:4 – 1450
powernow: FID: 0xe (10.0x [1002MHz]) VID:0xb (1.450V)
powernow: multipliers:5 – 120
powernow: Voltage:5 – 1450
powernow: FID: 0x2 (12.0x [1203MHz]) VID:0xb (1.450V)
powernow: multipliers:6 – 130
powernow: Voltage:6 – 1450
powernow: FID: 0x14 (13.0x [1303MHz]) VID:0xb (1.450V)
powernow: multipliers:7 – 140
powernow: Voltage:7 – 1450
powernow: FID: 0x16 (14.0x [1403MHz]) VID:0xb (1.450V)
powernow: multipliers:8 – 180
powernow: Voltage:8 – 1450
powernow: FID: 0x1d (18.0x [1804MHz]) VID:0xb (1.450V)
powernow: multipliers:9 – 200
powernow: Voltage:9 – 1450
powernow: FID: 0x13 (20.0x [2005MHz]) VID:0xb (1.450V)
powernow: Minimum speed 300 MHz. Maximum speed 2005Mhz.

Ако всичко е наред може да пристъпите към следващата стъпка:

4.6. Зареждане на PowernowD. Обърнете внимание на това, че имате възможност да използвате няколко режима на работа: „-m“ особенно полезни са PASSIVE и AGGRESSIVE в зависимост от целта.
#powernowd -m PASSIVE
powernowd: PowerNow Daemon v0.90hun6, (c) 2003-2004 John Clemens
powernowd: Found 1 physical cpu and 1 virtualcpu:
powernowd: cpu0: 300762 kHz - 2005080 kHz


5. Заключение. Надявам се тези няколко реда да са Ви били полезни. Ето как изглежда функцията на честотата в зависимост от времето(и други случайни процеси) при мен:


6. Бележки и пояснения.
* Advanced Micro Devices, Inc Мобилните процесори на фирмата(от K7 поколението) са със същия начин на захващане към дънната платка(Socket A, Socket 462) както и процесорите предназначени за стационарни компютри. Някой източници даже твърдят, че това са на практика еднакви процесори, просто мобилните са показали по-добри резултати при фабричните тестове и работят на по-ниски напрежения спрямо десктоп еквивалентите. С малко сръчност вие бихте могли да "преработите" своя процесор следвайки тези указания.
** overclock - Повишаване работната честота на процесора над фабрично указаната. Динамичен overclock- overclock по заявка т.е. само когато ни е необходимо
*** underclock - Понижаване работната честота на процесора под фабрично указаната. При намаляне на честотата ( а от там и на напрежението) на процесора се понижава количеството употребена енергия - следователно и отделената топлина.


7. Връзки.
http://www.codemonkey.org.uk/projects/cpufreq/powernow-k7.shtml - Powernow-K7 BIOS problems.
http://www.yggdrasl.demon.co.uk/code/ - Linux 2.6 K7 PowerNow! MSR Support



<< Корпоративно използване на свободния софтуер | Алгоритми за разпределяне на процесорното време >>