В сучасних десктопних і (особливо) мобільних процесорах застосовується цілий ряд енергозберігаючих технологій: ODCM, CxE, EIST і ін. Сьогодні нас буде цікавити, мабуть, сама Високорівнева з них: гнучке управління частотою і напругою процесорного ядра під час роботи - Cool "n "Quiet, PowerNow! у AMD і Enhanced SpeedStep (EIST) у Intel.

Найчастіше користувачеві комп'ютера або ноутбука досить просто включити (поставити галочку) підтримку тієї чи іншої технології в BIOS і / або операційній системі - ніякої тонкої настройки зазвичай не передбачено, хоча, як показує практика, вона може виявитися досить корисною. У цій статті я розповім про те, як можна управляти робочим напругою ядра процесора з операційної системи (на прикладі Intel Pentium M і FreeBSD), і навіщо це може знадобитися.

Незважаючи на велику кількість посібників, рідко де зустрінеш докладний опис технології Enhanced SpeedStep з точки зору операційної системи (а не кінцевого користувача), особливо на російській мові, тому значна частина статті присвячена деталям реалізації і носить в деякій мірі теоретичний характер.

Сподіваюся, стаття виявиться корисною не тільки користувачам FreeBSD: ми також трохи торкнемося GNU / Linux, Windows і Mac OS X. Втім, в даному випадку конкретна операційна система має другорядне значення.

Передмова

У минулому році я проапгрейділі процесор в своєму старенькому ноутбуці: поставив Pentium M 780 замість штатного 735-го, добив до максимуму, так би мовити. Ноут став більше грітися під навантаженням (за рахунок збільшеного на 10 Вт тепловиділення); я не особливо звертав на це увагу (хіба що про всяк випадок почистив і змастив кулер), але в один прекрасний день, під час тривалої компіляції комп'ютер ... просто виключився (температура таки-досягла критичних ста градусів). Я вивів значення системної змінної hw.acpi.thermal.tz0.temperature в трей, щоб поспостерігати за температурою і, якщо що, вчасно перервати «важку» завдання. Але через якийсь час я втратив пильність (температура завжди залишалася в межах норми), і все повторилося. У цей момент я вирішив, що більше не хочу ні постійно побоюватися аварійного вимкнення під час тривалого навантаження CPU і тримати руку на Ctrl-C, ні гвалтувати процесор.

Зазвичай зміна штатного напруги на увазі його підвищення з метою забезпечити стабільну роботу процесора при розгоні (тобто на підвищеній частоті). Грубо кажучи, кожному значенню напруги відповідає деякий діапазон частот, на яких він може працювати, і завдання оверклокера - знайти максимальну частоту, на якій процесор ще не «глючить». У нашому випадку завдання стоїть в деякому сенсі симетрична: для відомої частоти (точніше, як ми незабаром з'ясуємо, набору частот) знайти найменше напруження, що забезпечує стабільну роботу CPU. Знижувати ж робочу частоту не хочеться, щоб не втратити в продуктивності - ноут і так вже далеко не топовий. Крім того, знижувати напругу вигідніше.

трохи теорії

Як відомо, тепловиділення процесора пропорційно його ємності, частоті і квадрату напруги (кому цікаво, чому це так, можуть спробувати вивести залежність самостійно, розглянувши процесор як набір елементарних CMOS-інверторів (логічних тих, хто заперечує), або сходити за такими адресами: раз, два, три).

Сучасні мобільні процесори можуть споживати до 50-70 Вт, які в підсумку розсіюють в тепло. Це дуже багато (згадайте лампи розжарювання), особливо для ноутбука, який в автономному режимі під навантаженням буде «їсти» акумулятор як та свиня апельсини. В умовах обмеженого простору тепло, швидше за все, доведеться відводити активно, а це означає додаткові витрати енергії на обертання вентилятора кулера (можливо, декількох).

Природно, такий стан справ нікого не влаштовувало, і виробники процесорів стали думати, як би оптимізувати енергоспоживання (і, відповідно, тепловіддачу), а заодно і запобігти процесор від перегріву. Тим, хто цікавиться рекомендую до прочитання ряд чудових статей Дмитра Бесєдіна, а я тим часом перейду безпосередньо до справи.

Трішки історії

Вперше технологія SpeedStep (версія 1.1) з'явилася в другому поколінні третє пентіум (вироблені по.18 мкм техпроцесу мобільні Coppermine для ноутбуків, 2000 г.), які в залежності від навантаження або джерела живлення комп'ютера - мережа або акумулятор - могли перемикатися між високою і низькою частотами за рахунок змінного множника. В економному режимі процесор споживав приблизно вдвічі менше енергії.

З переходом на.13 мкм техпроцес технологія отримує номер версії 2.1 і стає «поліпшеною» (enhanced) - тепер процесор вміє знижувати не тільки частоту, але і напруга. Версія 2.2 - адаптація для архітектури NetBurst, а до третьої версії (платформа Centrino) технологія стане офіційно називатися Enhanced Intel SpeedStep (EIST).

Версія 3.1 (2003 рік) вперше застосовується в першому і другому поколіннях процесорів Pentium M (ядра Banias і Dothan). Частота варіювалася (спочатку - лише переключалася між двома значеннями) від 40% до 100% від базової, з кроком 100 МГц (для Banias) або 133 МГц (для Dothan, наш випадок). Одночасно Intel вводить динамічне управління ємністю кеша другого рівня (L2), що дозволяє ще краще оптимізувати енергоспоживання. Версія 3.2 (Enhanced EIST) - адаптація для багатоядерних процесорів із загальним L2-кешем. (Невеликий FAQ від Intel за технологією SpeedStep.)

Тепер, замість того, щоб сліпо слідувати численним howto і туторіали, скачати pdf "ку і спробуємо розібратися в принципі роботи EST (я буду далі використовувати цю абревіатуру, тому що вона універсальніше і коротше).

Як працює EST

Отже, EST дозволяє управляти продуктивністю і енергоспоживанням процесора, причому динамічно, Під час його роботи. На відміну від більш ранніх реалізацій, які вимагали апаратної підтримки (в чіпсеті) для зміни робочих параметрів процесора, EST дозволяє програмно, Тобто засобами BIOS або операційної системи, змінювати множник (відношення частоти процесора до частоті шини) і напруга ядра (V cc) в залежності від навантаження, типу джерела живлення комп'ютера, температурного режиму CPU і / або налаштувань (політики) ОС.

Під час роботи процесор знаходиться в одному з декількох станів (power states): T (throttle), S (sleep), C (idle), P (performance), перемикаючись між ними за певними правилами (с. 386 специфікації ACPI 5.0).

Кожен процесор, присутній в системі, повинен бути описаний в таблиці DSDT, найчастіше в просторі імен \\ _PR, і зазвичай надає ряд методів, через які відбувається взаємодія з операційною системою (драйвером PM), і які описують можливості процесора (_PDC, _PPC) , підтримувані стану (_CST, _TSS, _PSS) і управління ними (_PTC, _PCT). Потрібні значення для кожного CPU (якщо він входить в т.зв. CPU support package) визначаються BIOS "ом материнської плати, який заповнює відповідні таблиці і методи ACPI (с. 11 pdf" ки) при завантаженні машини.

EST управляє роботою процесора в P-стані (P-state), вони-то і будуть нас цікавити. Наприклад, Pentium M підтримує шість P-станів (див. Рис. 1.1 і таб. 1.6 pdf "ки), що відрізняються напругою і частотою:

У загальному випадку, коли процесор заздалегідь невідомий, єдиним більш-менш надійним (і рекомендованим Intel) методом роботи з ним є ACPI. З конкретним процесором можна взаємодіяти безпосередньо, минаючи ACPI, - через регістри MSR (Model-Specific Register), в тому числі і безпосередньо з командного рядка: починаючи з версії 7.2, у FreeBSD для цього використовується утиліта cpucontrol (8).

Дізнатися, чи підтримує ваш процесор EST, можна поглянувши на 16-й біт в регістрі IA_32_MISC_ENABLE (0x1A0), він повинен бути встановлений:

# Kldload cpuctl # cpucontrol -m 0x1a0 / dev / cpuctl0 | (Read _ msr hi lo; echo $ ((lo \u003e\u003e 16 & 1))) 1
Аналогічна команда для GNU / Linux (потрібно пакет msr-tools):

# Modprobe msr # echo $ (( `rdmsr -c 0x1a0` \u003e\u003e 16 & 1)) 1
Перехід між станами відбувається під час запису в регістр IA32_PERF_CTL (0x199). Дізнатися поточний режим роботи можна прочитавши регістр IA32_PERF_STATUS (0x198), який оновлюється динамічно (таб. 1.4 pdf "ки). Надалі префікс IA32_ я буду для стислості опускати.

# Cpucontrol -m 0x198 / dev / cpuctl0 MSR 0x198: 0x0612112b 0x06000c20
З документації випливає, що поточний стан кодується в нижніх 16 бітах (якщо виконати команду кілька разів, їх значення може змінюватися - це означає, що EST працює). Якщо подивитися уважніше на інші біти, в них теж явно не сміття. Погуглити, можна з'ясувати, що ж вони означають.

Структура регістра PERF_STATUS

Дані, що читаються з PERF_STATUS, представляються наступною структурою (між іншим, що дані зберігаються як little-endian):

Struct msr_perf_status (unsigned curr_psv: 16; / * Current PSV * / unsigned status: 8; / * Status flags * / unsigned min_mult: 8; / * Minimum multiplier * / unsigned max_psv: 16; / * Maximum PSV * / unsigned init_psv: 16; / * Power-on PSV * /);
Три 16-бітних поля - це так звані Performance State Values \u200b\u200b(PSV), їх структуру ми розглянемо нижче: поточне значення PSV, максимальне (залежить від процесора) і значення на старті системи (при включенні). Поточне значення (curr_psv), очевидно, змінюється при зміні режиму роботи, максимальне (max_psv) зазвичай залишається постійним, стартове значення (init_psv) не змінюється: як правило, воно дорівнює максимальному значенню для десктопів і серверів, але мінімального для мобільних CPU. Мінімальний множник (min_mult) для процесорів Intel майже завжди дорівнює шести. Поле status містить значення деяких прапорів, наприклад, при настанні подій EST або THERM (тобто в момент зміни P-стани або перегріву процесора, відповідно).

Тепер, коли ми знаємо призначення всіх 64 біт регістра PERF_STATUS, ми можемо розшифрувати прочитане вище слово: 0x0612 112b 0x06 00 0c20 ⇒ PSV на старті 0x0612, максимальне значення 0x112b, мінімальний множник 6 (як і очікувалося), прапори скинуті, поточне значення PSV \u003d 0x0c20. Що саме означають ці 16 біт?

Структура Performance State Value (PSV)

Знати і розуміти, що з себе представляє PSV, дуже важливо, адже саме в такому вигляді задаються режими роботи процесора.

Struct psv (unsigned vid: 6; / * Voltage Identifier * / unsigned _reserved1: 2; unsigned freq: 5; / * Frequency Identifier * / unsigned _reserved2: 1; unsigned nibr: 1; / * Non-integer bus ratio * / unsigned slfm: 1; / * Dynamic FSB frequency (Super-LFM) * /);
Dynamic FSB frequency switching вказує пропускати кожен другий такт FSB, тобто вдвічі знижувати робочу частоту; ця можливість вперше реалізована в процесорах Core 2 Duo (ядро Merom) і нас не стосується, як і Non-integer bus ratio - спеціальний режим, підтримуваний деякими процесорами, що дозволяє, як випливає з назви, більш тонко управляти їх частотою.

До власне технології EST мають відношення два поля - ідентифікатори частоти (Frequency Identifier, Fid), який чисельно дорівнює множнику, і напруги (Voltage Identifier, Vid), який відповідає рівню напруги (він же зазвичай і найменш документований).

Ідентифікатор напруги (Voltage Identifier)

Intel вельми неохоче розкриває інформацію (зазвичай потрібно підписати NDA) про те, як саме кодується ідентифікатор напруги для кожного процесора. Але для більшості популярних CPU, на щастя, ця формула відома; зокрема, для нашого Pentium M (і багатьох інших): V cc \u003d Vid 0 + (Vid × V step), де V cc - поточний (дійсне) напруга, Vid 0 - базове напруга (коли Vid \u003d\u003d 0), V step - крок. Таблиця для деяких популярних процесорів (всі значення в мілівольтах):
процесор Vid 0 V step V boot V min V max
Pentium M 700,0 16,0 xxxx, x xxx, x xxxx, x
E6000, E4000 825,0 12,5 1100,0 850,0 1500,0
E8000, E7000 825,0 12,5 1100,0 850,0 1362,5
X9000 712,5 12,5 1200,0 800,0 1325,0
T9000 712,5 12,5 1200,0 750,0 1300,0
P9000, P8000 712,5 12,5 1200,0 750,0 1300,0
Q9000D, Q8000D 825,0 12,5 1100,0 850,0 1362,5
Q9000M 712,5 12,5 1200,0 850,0 1300,0
Множник (тобто Fid) записується в PSV зсунутим на 8 біт вліво, молодші шість біт займає Vid. Оскільки в нашому випадку іншими битами можна знехтувати, то PSV, частота процесора, системної шини і фізичне напруження пов'язані простою формулою (для Pentium M):
Тепер розглянемо регістр управління (PERF_CTL). Запис в нього повинна проводитися наступним чином: спочатку зчитується поточне значення (64-бітове слово цілком), в ньому змінюються потрібні біти, і записується назад в регістр (т.зв. read-modify-write).

Структура регістра PERF_CTL

struct msr_perf_ctl (unsigned psv: 16; / * Requested PSV * / unsigned _reserved1: 16; unsigned ida_diseng: 1; / * IDA disengage * / unsigned _reserved2: 31;);
IDA (Intel Dynamic Acceleration) disengage-біт дозволяє тимчасово відключати адаптивне (opportunistic) управління частотою на процесорах Intel Core 2 Duo T7700 і більш пізніх, - знову ж таки, нас не цікавить. Молодші 16 біт (PSV) - режим, в який ми «просимо» перейти процесор.

Таблиця _PSS

Таблиця _PSS являє собою масив станів ( Package в термінології ACPI) або метод, який повертає такий масив; кожне стан (P-state) в свою чергу визначається наступною структурою (с. 409 специфікації ACPI):

Struct Pstate (unsigned CoreFrequency; / * Core CPU operating frequency, MHz * / unsigned Power; / * Maximum power dissipation, mW * / unsigned Latency; / * Worst-case latency of CPU unavailability during transition, μs * / unsigned BusMasterLatency; / * Worst-case latency while Bus Masters are unable to access memory, μs * / unsigned Control; / * Value to be written to the PERF_CTL to switch to this state * / unsigned Status; / * Value (should be equal to the one read from PERF_STATUS) * /);
Таким чином, кожне P-стан характеризується якийсь робочою частотою ядра, максимальної розсіюваною потужністю, транзитними затримками (фактично цей час переходу між станами, в перебігу яких недоступні CPU і пам'ять), нарешті, найцікавіше: PSV, яке відповідає даному стану і яке треба записати в PERF_CTL, щоб в цей стан перейти (Control). Щоб переконатися, що процесор успішно перейшов в новий стан, потрібно прочитати регістр PERF_STATUS і порівняти зі значенням, записаним в поле Status.

EST-драйвер операційної системи може «знати» про деякі процесори, тобто зуміє ними управляти і без підтримки ACPI. Але це рідкість, особливо в наші дні (хоча для undervolting "а на Linux, десь до версії 2.6.20, треба було патчить таблиці в драйвері, і ще в 2011 році цей метод був дуже поширений).

Варто відзначити, що EST-драйвер може працювати навіть в разі відсутності таблиці _PSS і невідомого процесора, тому що максимальне і мінімальне значення можна дізнатися з PERF_STATUS (при цьому, очевидно, число P-станів вироджується в два).

Досить теорії. Що з цим усім робити?

Тепер, коли ми знаємо 1) призначення всіх бітів в потрібних словах MSR, 2) як саме кодується PSV для нашого процесора, і 3) де в DSDT шукати потрібні налаштування, саме час скласти таблицю частот і напруг за замовчуванням. Сдампім DSDT і пошукаємо там таблицю _PSS. Для Pentium M 780 вона повинна виглядати якось так:

Default _PSS values

Name (_PSS, Package (0x06) (// Всього визначено 6 станів (P-states) Package (0x06) (0x000008DB, // 2267 MHz (cf. Fid × FSB clock) 0x00006978, // 27000 mW 0x0000000A, // 10 μs (відповідає специфікації) 0x0000000A, // 10 μs 0x0000112B, // 0x11 \u003d 17 (множник, Fid), 0x2b \u003d 43 (Vid) 0x0000112B), Package (0x06) (0x0000074B, // тисячу вісімсот шістьдесят сім MHz (82% від максимальної) 0x000059D8, // 23000 mW 0x0000000A, 0x0000000A, 0x00000E25, // Fid \u003d 14, Vid \u003d 37 0x00000E25), Package (0x06) (0x00000640, // 1600 MHz (71% від максимальної) 0x00005208, // 21000 mW 0x0000000A, 0x0000000A , 0x00000C20, // Fid \u003d 12, Vid \u003d 32 0x00000C20), Package (0x06) (0x00000535, // 1333 MHz (59% від максимальної) 0x00004650, // 18000 mW 0x0000000A, 0x0000000A, 0x00000A1C, // Fid \u003d 10, Vid \u003d 28 0x00000A1C), Package (0x06) (0x0000042B, // 1067 MHz (47% від максимальної) 0x00003E80, // 16000 mW 0x0000000A, 0x0000000A, 0x00000817, // Fid \u003d 8, Vid \u003d 23 0x00000817), Package (0x06 ) (0x0 0000320, // 800 MHz (35% від максимальної) 0x000032C8, // 13000 mW 0x0000000A, 0x0000000A, 0x00000612, // Fid \u003d 6, Vid \u003d 18 0x00000612)))


Отже, ми знаємо дефолтні Vid для кожного P-рівня: 43, 37, 32, 28, 23, 18, що відповідає напруженням від 1388 mV до 988 mV. Суть undervolting "а в тому, що напевно ці напруги дещо вищий, ніж реально необхідно для стійкої роботи процесора. Спробуємо визначити« межі дозволеного ».

Я написав для цього простий shell-скрипт, який поступово знижує Vid і виконує нескладний цикл (демон powerd (8) перед цим, зрозуміло, необхідно прибити). Таким чином я визначив напруги, що дозволяють процесору хоча б не виснути, потім прогнав кілька разів тест Super Pi і перезбирання ядра; вже пізніше я підняв значення Vid для двох максимальних частот ще на один пункт, інакше gcc зрідка вилітав з-за помилки illegal instruction. В результаті всіх експериментів протягом декількох днів вийшов такий набір "стабільних" Vid: 30, 18, 12, 7, 2, 0.

Аналіз результатів

Тепер, коли ми емпірично визначили мінімальні безпечні напруги, цікаво порівняти їх з вихідними:
Зниження максимальної напруги навіть на 15% принесло досить відчутні результати: тривале навантаження не тільки не призводить більше до перегріву процесора і аварійного відключення, температура взагалі тепер майже ніколи не перевищує 80 ° C. Прогнозований час роботи від акумулятора в «офісному» режимі, судячи з acpiconf -i 0, збільшилася з 1 ч. 40 м. До 2 год. 25 м. (Поганенько багато, але літій-іонні елементи з часом «втомлюються», а акумулятор я не міняв з моменту покупки ноутбука років сім тому.)

Тепер треба зробити так, щоб настройки застосовувалися автоматично. Можна, наприклад, модифікувати драйвер cpufreq (4), щоб значення PSV бралися з власної таблиці, а не через ACPI. Але це незручно вже хоча б тим, що потрібно не забувати патчить драйвер при оновленні системи, та й взагалі - більше схоже на брудний хак, ніж на рішення. Можна, напевно, ще якось пропатчити powerd (8), що погано приблизно з тих же причин. Можна просто запускати скрипт, знижуючи напругу прямим записом в MSR (що, власне, я і робив для визначення «стабільних» напруг), але тоді доведеться пам'ятати про і самостійно обробляти переходи між станами (не тільки P-states, взагалі будь-якими, наприклад, при виході ноутбука з сну). Теж не діло.

Якщо ми отримуємо значення PSV через ACPI, то логічніше за все змінити саме таблицю _PSS в DSDT. На щастя, BIOS для цього колупати не доведеться: FreeBSD вміє завантажувати DSDT з файлу (про модифікацію таблиць ACPI на Хабре вже не раз писали, тому зараз докладно на цьому зупинятися не будемо). Замінюємо потрібні поля в DSDT:

Undervolting patch for _PSS

@@ -7385,8 +7385,8 @@ 0x00006978, 0x0000000A, 0x0000000A, - 0x0000112B, - 0x0000112B + 0x0000111D, + 0x0000111D), Package (0x06) @@ -7395,8 +7395,8 @@ 0x000059D8, 0x0000000A, 0x0000000A, - 0x00000E25, - 0x00000E25 + 0x00000E12, + 0x00000E12), Package (0x06) @@ -7405,8 +7405,8 @@ 0x00005208, 0x0000000A, 0x0000000A, - 0x00000C20, - 0x00000C20 + 0x00000C0C, + 0x00000C0C), Package ( 0x06) @@ -7415,8 +7415,8 @@ 0x00004650, 0x0000000A, 0x0000000A, - 0x00000A1C, - 0x00000A1C + 0x00000A07, + 0x00000A07), Package (0x06) @@ -7425,8 +7425,8 @@ 0x00003E80, 0x0000000A, 0x0000000A, - 0x00000817, - 0x00000817 + 0x00000802, + 0x00000802), Package (0x06) @@ -7435,8 +7435,8 @@ 0x000032C8, 0x0000000A, 0x0000000A, - 0x00000612, - 0x00000612 + 0x00000600, + 0x00000600)) )


Компілюємо новий AML-файл (байткод ACPI) і модифікуємо /boot/loader.conf так, щоб FreeBSD завантажувала нашу модифіковану DSDT замість дефолтной:

Acpi_dsdt_load \u003d "YES" acpi_dsdt_name \u003d "/ root / undervolt.aml"
Ось, загалом, і все. Єдине, не забудьте закомментировать ці дві строчки в /boot/loader.conf, якщо будете міняти процесор.

Навіть якщо ви не збираєтеся знижувати штатні напруги, вміння налаштовувати управління власністю процесора (не тільки P-states) може стати в нагоді. Адже нерідко буває, що «кривий» BIOS заповнює таблиці невірно, не повністю, або не заповнює їх зовсім (наприклад тому, що коштує не підтримує EST целерон, а виробник офіційно не передбачає його заміну). В цьому випадку вам доведеться виконати всю роботу самостійно. Зверніть увагу, що додати одну лише таблицю _PSS може виявитися недостатньо; так, C-states задаються таблицею _CST, і крім того, може знадобитися описати самі процедури управління (Performance Control, _PCT). На щастя, це нескладно і досить докладно, з прикладами, описано в восьмому розділі специфікації ACPI.

Undervolting в GNU / Linux

По правді кажучи, спочатку я думав, що мені досить буде прочитати Gentoo Undervolting Guide і просто адаптувати його для FreeBSD. Це виявилося не так-то просто, бо документ на перевірку виявився на рідкість безглуздим (що взагалі-то дивно для Gentoo Wiki). На жаль, на їхньому новому сайті я нічого схожого не знайшов, довелося задовольнятися старою копією; і хоча я розумію, що це керівництво багато в чому втратило актуальність, я все ж його трохи покритикую. :-)

Мені чомусь відразу, без оголошення війни, пропонують патчить ядро \u200b\u200b(у FreeBSD, на хвилиночку, нам взагалі жодної системний код модифікувати не довелося). Забивати у нутрощі драйвера або записувати в якісь init-скрипти значення деяких «безпечних» напруг, незрозуміло ким і яким чином отримані, зі спеціальної таблиці (в якій Pentium M 780 знущально представлений рядком, що складається з одних знаків). Слідувати порадам, серед яких є написання людьми, які явно взагалі не розуміють, про що говорять. А головне, зовсім незрозуміло, чому і як саме ці магічні заміни одних цифр на інші працюють; не пропонується способу «помацати» EST, перш ніж щось патчить і збирати заново ядро, жодного разу не згадуються регістри MSR і робота з ними з командного рядка. Чи не розглядається модифікація таблиць ACPI як альтернативний і більш кращий варіант.

Макось досить щільно взаємодіє з (і розраховує на коректну роботу) ACPI, і модифікація таблиць - один з основних методів її налаштування під конкретний залізо. Тому перше, що спадає на думку - точно так же сдампіть пропатчити свою DSDT. Альтернативний метод: google: //IntelEnhancedSpeedStep.kext, наприклад, раз, два, три.

Ще одна «чудова» утиліта (на щастя, вже застаріла) пропонує купити за $ 10 можливість змінювати напругу і частоту. :-)

В сучасних десктопних і (особливо) мобільних процесорах застосовується цілий ряд енергозберігаючих технологій: ODCM, CxE, EIST і ін. Сьогодні нас буде цікавити, мабуть, сама Високорівнева з них: гнучке управління частотою і напругою процесорного ядра під час роботи - Cool "n "Quiet, PowerNow! у AMD і Enhanced SpeedStep (EIST) у Intel.

Найчастіше користувачеві комп'ютера або ноутбука досить просто включити (поставити галочку) підтримку тієї чи іншої технології в BIOS і / або операційній системі - ніякої тонкої настройки зазвичай не передбачено, хоча, як показує практика, вона може виявитися досить корисною. У цій статті я розповім про те, як можна управляти робочим напругою ядра процесора з операційної системи (на прикладі Intel Pentium M і FreeBSD), і навіщо це може знадобитися.

Незважаючи на велику кількість посібників, рідко де зустрінеш докладний опис технології Enhanced SpeedStep з точки зору операційної системи (а не кінцевого користувача), особливо на російській мові, тому значна частина статті присвячена деталям реалізації і носить в деякій мірі теоретичний характер.

Сподіваюся, стаття виявиться корисною не тільки користувачам FreeBSD: ми також трохи торкнемося GNU / Linux, Windows і Mac OS X. Втім, в даному випадку конкретна операційна система має другорядне значення.

Передмова

У минулому році я проапгрейділі процесор в своєму старенькому ноутбуці: поставив Pentium M 780 замість штатного 735-го, добив до максимуму, так би мовити. Ноут став більше грітися під навантаженням (за рахунок збільшеного на 10 Вт тепловиділення); я не особливо звертав на це увагу (хіба що про всяк випадок почистив і змастив кулер), але в один прекрасний день, під час тривалої компіляції комп'ютер ... просто виключився (температура таки-досягла критичних ста градусів). Я вивів значення системної змінної hw.acpi.thermal.tz0.temperature в трей, щоб поспостерігати за температурою і, якщо що, вчасно перервати «важку» завдання. Але через якийсь час я втратив пильність (температура завжди залишалася в межах норми), і все повторилося. У цей момент я вирішив, що більше не хочу ні постійно побоюватися аварійного вимкнення під час тривалого навантаження CPU і тримати руку на Ctrl-C, ні гвалтувати процесор.

Зазвичай зміна штатного напруги на увазі його підвищення з метою забезпечити стабільну роботу процесора при розгоні (тобто на підвищеній частоті). Грубо кажучи, кожному значенню напруги відповідає деякий діапазон частот, на яких він може працювати, і завдання оверклокера - знайти максимальну частоту, на якій процесор ще не «глючить». У нашому випадку завдання стоїть в деякому сенсі симетрична: для відомої частоти (точніше, як ми незабаром з'ясуємо, набору частот) знайти найменше напруження, що забезпечує стабільну роботу CPU. Знижувати ж робочу частоту не хочеться, щоб не втратити в продуктивності - ноут і так вже далеко не топовий. Крім того, знижувати напругу вигідніше.

трохи теорії

Як відомо, тепловиділення процесора пропорційно його ємності, частоті і квадрату напруги (кому цікаво, чому це так, можуть спробувати вивести залежність самостійно, розглянувши процесор як набір елементарних CMOS-інверторів (логічних тих, хто заперечує), або сходити за такими адресами: раз, два, три).

Сучасні мобільні процесори можуть споживати до 50-70 Вт, які в підсумку розсіюють в тепло. Це дуже багато (згадайте лампи розжарювання), особливо для ноутбука, який в автономному режимі під навантаженням буде «їсти» акумулятор як та свиня апельсини. В умовах обмеженого простору тепло, швидше за все, доведеться відводити активно, а це означає додаткові витрати енергії на обертання вентилятора кулера (можливо, декількох).

Природно, такий стан справ нікого не влаштовувало, і виробники процесорів стали думати, як би оптимізувати енергоспоживання (і, відповідно, тепловіддачу), а заодно і запобігти процесор від перегріву. Тим, хто цікавиться рекомендую до прочитання ряд чудових статей Дмитра Бесєдіна, а я тим часом перейду безпосередньо до справи.

Трішки історії

Вперше технологія SpeedStep (версія 1.1) з'явилася в другому поколінні третє пентіум (вироблені по.18 мкм техпроцесу мобільні Coppermine для ноутбуків, 2000 г.), які в залежності від навантаження або джерела живлення комп'ютера - мережа або акумулятор - могли перемикатися між високою і низькою частотами за рахунок змінного множника. В економному режимі процесор споживав приблизно вдвічі менше енергії.

З переходом на.13 мкм техпроцес технологія отримує номер версії 2.1 і стає «поліпшеною» (enhanced) - тепер процесор вміє знижувати не тільки частоту, але і напруга. Версія 2.2 - адаптація для архітектури NetBurst, а до третьої версії (платформа Centrino) технологія стане офіційно називатися Enhanced Intel SpeedStep (EIST).

Версія 3.1 (2003 рік) вперше застосовується в першому і другому поколіннях процесорів Pentium M (ядра Banias і Dothan). Частота варіювалася (спочатку - лише переключалася між двома значеннями) від 40% до 100% від базової, з кроком 100 МГц (для Banias) або 133 МГц (для Dothan, наш випадок). Одночасно Intel вводить динамічне управління ємністю кеша другого рівня (L2), що дозволяє ще краще оптимізувати енергоспоживання. Версія 3.2 (Enhanced EIST) - адаптація для багатоядерних процесорів із загальним L2-кешем. (Невеликий FAQ від Intel за технологією SpeedStep.)

Тепер, замість того, щоб сліпо слідувати численним howto і туторіали, скачати pdf "ку і спробуємо розібратися в принципі роботи EST (я буду далі використовувати цю абревіатуру, тому що вона універсальніше і коротше).

Як працює EST

Отже, EST дозволяє управляти продуктивністю і енергоспоживанням процесора, причому динамічно, Під час його роботи. На відміну від більш ранніх реалізацій, які вимагали апаратної підтримки (в чіпсеті) для зміни робочих параметрів процесора, EST дозволяє програмно, Тобто засобами BIOS або операційної системи, змінювати множник (відношення частоти процесора до частоті шини) і напруга ядра (V cc) в залежності від навантаження, типу джерела живлення комп'ютера, температурного режиму CPU і / або налаштувань (політики) ОС.

Під час роботи процесор знаходиться в одному з декількох станів (power states): T (throttle), S (sleep), C (idle), P (performance), перемикаючись між ними за певними правилами (с. 386 специфікації ACPI 5.0).

Кожен процесор, присутній в системі, повинен бути описаний в таблиці DSDT, найчастіше в просторі імен \\ _PR, і зазвичай надає ряд методів, через які відбувається взаємодія з операційною системою (драйвером PM), і які описують можливості процесора (_PDC, _PPC) , підтримувані стану (_CST, _TSS, _PSS) і управління ними (_PTC, _PCT). Потрібні значення для кожного CPU (якщо він входить в т.зв. CPU support package) визначаються BIOS "ом материнської плати, який заповнює відповідні таблиці і методи ACPI (с. 11 pdf" ки) при завантаженні машини.

EST управляє роботою процесора в P-стані (P-state), вони-то і будуть нас цікавити. Наприклад, Pentium M підтримує шість P-станів (див. Рис. 1.1 і таб. 1.6 pdf "ки), що відрізняються напругою і частотою:

У загальному випадку, коли процесор заздалегідь невідомий, єдиним більш-менш надійним (і рекомендованим Intel) методом роботи з ним є ACPI. З конкретним процесором можна взаємодіяти безпосередньо, минаючи ACPI, - через регістри MSR (Model-Specific Register), в тому числі і безпосередньо з командного рядка: починаючи з версії 7.2, у FreeBSD для цього використовується утиліта cpucontrol (8).

Дізнатися, чи підтримує ваш процесор EST, можна поглянувши на 16-й біт в регістрі IA_32_MISC_ENABLE (0x1A0), він повинен бути встановлений:

# Kldload cpuctl # cpucontrol -m 0x1a0 / dev / cpuctl0 | (Read _ msr hi lo; echo $ ((lo \u003e\u003e 16 & 1))) 1
Аналогічна команда для GNU / Linux (потрібно пакет msr-tools):

# Modprobe msr # echo $ (( `rdmsr -c 0x1a0` \u003e\u003e 16 & 1)) 1
Перехід між станами відбувається під час запису в регістр IA32_PERF_CTL (0x199). Дізнатися поточний режим роботи можна прочитавши регістр IA32_PERF_STATUS (0x198), який оновлюється динамічно (таб. 1.4 pdf "ки). Надалі префікс IA32_ я буду для стислості опускати.

# Cpucontrol -m 0x198 / dev / cpuctl0 MSR 0x198: 0x0612112b 0x06000c20
З документації випливає, що поточний стан кодується в нижніх 16 бітах (якщо виконати команду кілька разів, їх значення може змінюватися - це означає, що EST працює). Якщо подивитися уважніше на інші біти, в них теж явно не сміття. Погуглити, можна з'ясувати, що ж вони означають.

Структура регістра PERF_STATUS

Дані, що читаються з PERF_STATUS, представляються наступною структурою (між іншим, що дані зберігаються як little-endian):

Struct msr_perf_status (unsigned curr_psv: 16; / * Current PSV * / unsigned status: 8; / * Status flags * / unsigned min_mult: 8; / * Minimum multiplier * / unsigned max_psv: 16; / * Maximum PSV * / unsigned init_psv: 16; / * Power-on PSV * /);
Три 16-бітних поля - це так звані Performance State Values \u200b\u200b(PSV), їх структуру ми розглянемо нижче: поточне значення PSV, максимальне (залежить від процесора) і значення на старті системи (при включенні). Поточне значення (curr_psv), очевидно, змінюється при зміні режиму роботи, максимальне (max_psv) зазвичай залишається постійним, стартове значення (init_psv) не змінюється: як правило, воно дорівнює максимальному значенню для десктопів і серверів, але мінімального для мобільних CPU. Мінімальний множник (min_mult) для процесорів Intel майже завжди дорівнює шести. Поле status містить значення деяких прапорів, наприклад, при настанні подій EST або THERM (тобто в момент зміни P-стани або перегріву процесора, відповідно).

Тепер, коли ми знаємо призначення всіх 64 біт регістра PERF_STATUS, ми можемо розшифрувати прочитане вище слово: 0x0612 112b 0x06 00 0c20 ⇒ PSV на старті 0x0612, максимальне значення 0x112b, мінімальний множник 6 (як і очікувалося), прапори скинуті, поточне значення PSV \u003d 0x0c20. Що саме означають ці 16 біт?

Структура Performance State Value (PSV)

Знати і розуміти, що з себе представляє PSV, дуже важливо, адже саме в такому вигляді задаються режими роботи процесора.

Struct psv (unsigned vid: 6; / * Voltage Identifier * / unsigned _reserved1: 2; unsigned freq: 5; / * Frequency Identifier * / unsigned _reserved2: 1; unsigned nibr: 1; / * Non-integer bus ratio * / unsigned slfm: 1; / * Dynamic FSB frequency (Super-LFM) * /);
Dynamic FSB frequency switching вказує пропускати кожен другий такт FSB, тобто вдвічі знижувати робочу частоту; ця можливість вперше реалізована в процесорах Core 2 Duo (ядро Merom) і нас не стосується, як і Non-integer bus ratio - спеціальний режим, підтримуваний деякими процесорами, що дозволяє, як випливає з назви, більш тонко управляти їх частотою.

До власне технології EST мають відношення два поля - ідентифікатори частоти (Frequency Identifier, Fid), який чисельно дорівнює множнику, і напруги (Voltage Identifier, Vid), який відповідає рівню напруги (він же зазвичай і найменш документований).

Ідентифікатор напруги (Voltage Identifier)

Intel вельми неохоче розкриває інформацію (зазвичай потрібно підписати NDA) про те, як саме кодується ідентифікатор напруги для кожного процесора. Але для більшості популярних CPU, на щастя, ця формула відома; зокрема, для нашого Pentium M (і багатьох інших): V cc \u003d Vid 0 + (Vid × V step), де V cc - поточний (дійсне) напруга, Vid 0 - базове напруга (коли Vid \u003d\u003d 0), V step - крок. Таблиця для деяких популярних процесорів (всі значення в мілівольтах):
процесор Vid 0 V step V boot V min V max
Pentium M 700,0 16,0 xxxx, x xxx, x xxxx, x
E6000, E4000 825,0 12,5 1100,0 850,0 1500,0
E8000, E7000 825,0 12,5 1100,0 850,0 1362,5
X9000 712,5 12,5 1200,0 800,0 1325,0
T9000 712,5 12,5 1200,0 750,0 1300,0
P9000, P8000 712,5 12,5 1200,0 750,0 1300,0
Q9000D, Q8000D 825,0 12,5 1100,0 850,0 1362,5
Q9000M 712,5 12,5 1200,0 850,0 1300,0
Множник (тобто Fid) записується в PSV зсунутим на 8 біт вліво, молодші шість біт займає Vid. Оскільки в нашому випадку іншими битами можна знехтувати, то PSV, частота процесора, системної шини і фізичне напруження пов'язані простою формулою (для Pentium M):
Тепер розглянемо регістр управління (PERF_CTL). Запис в нього повинна проводитися наступним чином: спочатку зчитується поточне значення (64-бітове слово цілком), в ньому змінюються потрібні біти, і записується назад в регістр (т.зв. read-modify-write).

Структура регістра PERF_CTL

struct msr_perf_ctl (unsigned psv: 16; / * Requested PSV * / unsigned _reserved1: 16; unsigned ida_diseng: 1; / * IDA disengage * / unsigned _reserved2: 31;);
IDA (Intel Dynamic Acceleration) disengage-біт дозволяє тимчасово відключати адаптивне (opportunistic) управління частотою на процесорах Intel Core 2 Duo T7700 і більш пізніх, - знову ж таки, нас не цікавить. Молодші 16 біт (PSV) - режим, в який ми «просимо» перейти процесор.

Таблиця _PSS

Таблиця _PSS являє собою масив станів ( Package в термінології ACPI) або метод, який повертає такий масив; кожне стан (P-state) в свою чергу визначається наступною структурою (с. 409 специфікації ACPI):

Struct Pstate (unsigned CoreFrequency; / * Core CPU operating frequency, MHz * / unsigned Power; / * Maximum power dissipation, mW * / unsigned Latency; / * Worst-case latency of CPU unavailability during transition, μs * / unsigned BusMasterLatency; / * Worst-case latency while Bus Masters are unable to access memory, μs * / unsigned Control; / * Value to be written to the PERF_CTL to switch to this state * / unsigned Status; / * Value (should be equal to the one read from PERF_STATUS) * /);
Таким чином, кожне P-стан характеризується якийсь робочою частотою ядра, максимальної розсіюваною потужністю, транзитними затримками (фактично цей час переходу між станами, в перебігу яких недоступні CPU і пам'ять), нарешті, найцікавіше: PSV, яке відповідає даному стану і яке треба записати в PERF_CTL, щоб в цей стан перейти (Control). Щоб переконатися, що процесор успішно перейшов в новий стан, потрібно прочитати регістр PERF_STATUS і порівняти зі значенням, записаним в поле Status.

EST-драйвер операційної системи може «знати» про деякі процесори, тобто зуміє ними управляти і без підтримки ACPI. Але це рідкість, особливо в наші дні (хоча для undervolting "а на Linux, десь до версії 2.6.20, треба було патчить таблиці в драйвері, і ще в 2011 році цей метод був дуже поширений).

Варто відзначити, що EST-драйвер може працювати навіть в разі відсутності таблиці _PSS і невідомого процесора, тому що максимальне і мінімальне значення можна дізнатися з PERF_STATUS (при цьому, очевидно, число P-станів вироджується в два).

Досить теорії. Що з цим усім робити?

Тепер, коли ми знаємо 1) призначення всіх бітів в потрібних словах MSR, 2) як саме кодується PSV для нашого процесора, і 3) де в DSDT шукати потрібні налаштування, саме час скласти таблицю частот і напруг за замовчуванням. Сдампім DSDT і пошукаємо там таблицю _PSS. Для Pentium M 780 вона повинна виглядати якось так:

Default _PSS values

Name (_PSS, Package (0x06) (// Всього визначено 6 станів (P-states) Package (0x06) (0x000008DB, // 2267 MHz (cf. Fid × FSB clock) 0x00006978, // 27000 mW 0x0000000A, // 10 μs (відповідає специфікації) 0x0000000A, // 10 μs 0x0000112B, // 0x11 \u003d 17 (множник, Fid), 0x2b \u003d 43 (Vid) 0x0000112B), Package (0x06) (0x0000074B, // тисячу вісімсот шістьдесят сім MHz (82% від максимальної) 0x000059D8, // 23000 mW 0x0000000A, 0x0000000A, 0x00000E25, // Fid \u003d 14, Vid \u003d 37 0x00000E25), Package (0x06) (0x00000640, // 1600 MHz (71% від максимальної) 0x00005208, // 21000 mW 0x0000000A, 0x0000000A , 0x00000C20, // Fid \u003d 12, Vid \u003d 32 0x00000C20), Package (0x06) (0x00000535, // 1333 MHz (59% від максимальної) 0x00004650, // 18000 mW 0x0000000A, 0x0000000A, 0x00000A1C, // Fid \u003d 10, Vid \u003d 28 0x00000A1C), Package (0x06) (0x0000042B, // 1067 MHz (47% від максимальної) 0x00003E80, // 16000 mW 0x0000000A, 0x0000000A, 0x00000817, // Fid \u003d 8, Vid \u003d 23 0x00000817), Package (0x06 ) (0x0 0000320, // 800 MHz (35% від максимальної) 0x000032C8, // 13000 mW 0x0000000A, 0x0000000A, 0x00000612, // Fid \u003d 6, Vid \u003d 18 0x00000612)))


Отже, ми знаємо дефолтні Vid для кожного P-рівня: 43, 37, 32, 28, 23, 18, що відповідає напруженням від 1388 mV до 988 mV. Суть undervolting "а в тому, що напевно ці напруги дещо вищий, ніж реально необхідно для стійкої роботи процесора. Спробуємо визначити« межі дозволеного ».

Я написав для цього простий shell-скрипт, який поступово знижує Vid і виконує нескладний цикл (демон powerd (8) перед цим, зрозуміло, необхідно прибити). Таким чином я визначив напруги, що дозволяють процесору хоча б не виснути, потім прогнав кілька разів тест Super Pi і перезбирання ядра; вже пізніше я підняв значення Vid для двох максимальних частот ще на один пункт, інакше gcc зрідка вилітав з-за помилки illegal instruction. В результаті всіх експериментів протягом декількох днів вийшов такий набір "стабільних" Vid: 30, 18, 12, 7, 2, 0.

Аналіз результатів

Тепер, коли ми емпірично визначили мінімальні безпечні напруги, цікаво порівняти їх з вихідними:
Зниження максимальної напруги навіть на 15% принесло досить відчутні результати: тривале навантаження не тільки не призводить більше до перегріву процесора і аварійного відключення, температура взагалі тепер майже ніколи не перевищує 80 ° C. Прогнозований час роботи від акумулятора в «офісному» режимі, судячи з acpiconf -i 0, збільшилася з 1 ч. 40 м. До 2 год. 25 м. (Поганенько багато, але літій-іонні елементи з часом «втомлюються», а акумулятор я не міняв з моменту покупки ноутбука років сім тому.)

Тепер треба зробити так, щоб настройки застосовувалися автоматично. Можна, наприклад, модифікувати драйвер cpufreq (4), щоб значення PSV бралися з власної таблиці, а не через ACPI. Але це незручно вже хоча б тим, що потрібно не забувати патчить драйвер при оновленні системи, та й взагалі - більше схоже на брудний хак, ніж на рішення. Можна, напевно, ще якось пропатчити powerd (8), що погано приблизно з тих же причин. Можна просто запускати скрипт, знижуючи напругу прямим записом в MSR (що, власне, я і робив для визначення «стабільних» напруг), але тоді доведеться пам'ятати про і самостійно обробляти переходи між станами (не тільки P-states, взагалі будь-якими, наприклад, при виході ноутбука з сну). Теж не діло.

Якщо ми отримуємо значення PSV через ACPI, то логічніше за все змінити саме таблицю _PSS в DSDT. На щастя, BIOS для цього колупати не доведеться: FreeBSD вміє завантажувати DSDT з файлу (про модифікацію таблиць ACPI на Хабре вже, тому зараз докладно на цьому зупинятися не будемо). Замінюємо потрібні поля в DSDT:

Undervolting patch for _PSS

@@ -7385,8 +7385,8 @@ 0x00006978, 0x0000000A, 0x0000000A, - 0x0000112B, - 0x0000112B + 0x0000111D, + 0x0000111D), Package (0x06) @@ -7395,8 +7395,8 @@ 0x000059D8, 0x0000000A, 0x0000000A, - 0x00000E25, - 0x00000E25 + 0x00000E12, + 0x00000E12), Package (0x06) @@ -7405,8 +7405,8 @@ 0x00005208, 0x0000000A, 0x0000000A, - 0x00000C20, - 0x00000C20 + 0x00000C0C, + 0x00000C0C), Package ( 0x06) @@ -7415,8 +7415,8 @@ 0x00004650, 0x0000000A, 0x0000000A, - 0x00000A1C, - 0x00000A1C + 0x00000A07, + 0x00000A07), Package (0x06) @@ -7425,8 +7425,8 @@ 0x00003E80, 0x0000000A, 0x0000000A, - 0x00000817, - 0x00000817 + 0x00000802, + 0x00000802), Package (0x06) @@ -7435,8 +7435,8 @@ 0x000032C8, 0x0000000A, 0x0000000A, - 0x00000612, - 0x00000612 + 0x00000600, + 0x00000600)) )


Компілюємо новий AML-файл (байткод ACPI) і модифікуємо /boot/loader.conf так, щоб FreeBSD завантажувала нашу модифіковану DSDT замість дефолтной:

Acpi_dsdt_load \u003d "YES" acpi_dsdt_name \u003d "/ root / undervolt.aml"
Ось, загалом, і все. Єдине, не забудьте закомментировать ці дві строчки в /boot/loader.conf, якщо будете міняти процесор.

Навіть якщо ви не збираєтеся знижувати штатні напруги, вміння налаштовувати управління власністю процесора (не тільки P-states) може стати в нагоді. Адже нерідко буває, що «кривий» BIOS заповнює таблиці невірно, не повністю, або не заповнює їх зовсім (наприклад тому, що коштує не підтримує EST целерон, а виробник офіційно не передбачає його заміну). В цьому випадку вам доведеться виконати всю роботу самостійно. Зверніть увагу, що додати одну лише таблицю _PSS може виявитися недостатньо; так, C-states задаються таблицею _CST, і крім того, може знадобитися описати самі процедури управління (Performance Control, _PCT). На щастя, це нескладно і досить докладно, з прикладами, описано в восьмому розділі специфікації ACPI.

Undervolting в GNU / Linux

По правді кажучи, спочатку я думав, що мені досить буде прочитати Gentoo Undervolting Guide і просто адаптувати його для FreeBSD. Це виявилося не так-то просто, бо документ на перевірку виявився на рідкість безглуздим (що взагалі-то дивно для Gentoo Wiki). На жаль, на їхньому новому сайті я нічого схожого не знайшов, довелося задовольнятися старою копією; і хоча я розумію, що це керівництво багато в чому втратило актуальність, я все ж його трохи покритикую. :-)

Мені чомусь відразу, без оголошення війни, пропонують патчить ядро \u200b\u200b(у FreeBSD, на хвилиночку, нам взагалі жодної системний код модифікувати не довелося). Забивати у нутрощі драйвера або записувати в якісь init-скрипти значення деяких «безпечних» напруг, незрозуміло ким і яким чином отримані, зі спеціальної таблиці (в якій Pentium M 780 знущально представлений рядком, що складається з одних знаків). Слідувати порадам, серед яких є написання людьми, які явно взагалі не розуміють, про що говорять. А головне, зовсім незрозуміло, чому і як саме ці магічні заміни одних цифр на інші працюють; не пропонується способу «помацати» EST, перш ніж щось патчить і збирати заново ядро, жодного разу не згадуються регістри MSR і робота з ними з командного рядка. Чи не розглядається модифікація таблиць ACPI як альтернативний і більш кращий варіант.

Макось досить щільно взаємодіє з (і розраховує на коректну роботу) ACPI, і модифікація таблиць - один з основних методів її налаштування під конкретний залізо. Тому перше, що спадає на думку - точно так же сдампіть пропатчити свою DSDT. Альтернативний метод: google: //IntelEnhancedSpeedStep.kext, наприклад, раз, два, три.

Ще одна «чудова» утиліта (на щастя, вже застаріла) пропонує купити за $ 10 можливість змінювати напругу і частоту. :-)

Дуже часто трапляється, що ноутбук сильно нагрівається в процесі роботи. Іноді це нагрівання може призвести не тільки до неприємних відчуттів (ну не кожному приємно працювати з розпеченим ноутбуком) але і до зависань або до «синім екранам смерті».

Цей варіант, як вимагає наявності певних умінь і знань у користувача, але і може позбавити гарантії на ноутбук. Як це проробляти описано в цьому матеріалі: Заміна процесора - знизити напругу живлення процесора. Цей спосіб найбільш простий і ефективний. Він дозволяє знизити температуру на 10-30 градусів.

Як бачимо, найбільш-оптимальним рішенням проблеми нагріву є зниження напруги живлення процесора. Поясню в чому його суть: кількість тепла, що виділяється процесором пропорційно квадрату напруги живлення. Отже порівняно невелике зниження напруги харчування може привести до істотного зменшення тепловиділення і споживаної потужності. Щоб це проілюструвати пропоную ознайомиться з результатами дослідження:

Core 2 Duo T7300 2.0 GHz1.00B

Core 2 Duo T7300 2.0 GHz1.25B

На цих двох скріншотах наведені значення максимальних температур процесора Core 2 Duo T7300, який встановлений в ноутбук Acer Aspire 5920G, після тридцятихвилинного «розігріву» утилітою S & M. У першому випадку процесор працював на напрузі харчування 1.25В, а в другому на напрузі живлення 1.00в. Коментарі зайві. Різниця максимальних температур становить 24 градуси і це враховуючи, що в першому випадку вентилятор системи охолодження ноутбука працював на максимальних обертах і за час тесту відбулося спрацьовування захисту процесора від перегріву (це видно по стрибка температури через аварійної зупинки утиліти S & M)

У колах користувачів ноутбуків побутує хибна думка, що зі зниженням напруги живлення процесора знижується продуктивність. Поясню чому ця думка помилкова. Продуктивність в першу чергу визначається частотою роботи процесора. Обробка інформації відбувається на кожному такті процесора. Чим частота вище - тим більше тактів в секунду, отже, тим більше інформації процесор обробляє протягом тієї секунди. Напруга живлення тут ніяк не фігурує. Напруга живлення процесора впливає в основному на стабільність роботи процесора при певній частоті. Якщо його підвищити - підвищується максимальна частота, на якій працює процесор. Саме так і роблять оверклокери. Але є і зворотна сторона медалі: з підвищенням напруга живлення процесора, як уже було сказано вище, збільшується його тепловиділення. Ось для чого оверклокери і використовують потужні і складні системи охолодження.

Тепер можна приступити безпосередньо до зниження напруги живлення процесора. Для цього нам знадобиться утиліта. Завантажити її можна по одній з цих посилань: (gcontent) Завантажити RMClock (/ gcontent)

Для 64-бітної Windows Vista існує проблема з цифровим підписом для драйвера RTCore64.sys. Щоб уникнути подібної проблеми - завантажуємо версію RMClock з уже сертифікованим драйвером за цим посиланням: (gcontent) Завантажити (/ gcontent)

Не вміє керувати частотою і напругою процесорів Intel Celeron M через те, що вони не підтримують динамічну зміну частоти / напруги (Технологія Intel Enhanced Speed \u200b\u200bStep в процесорах Intel Celeron M - відключити. Говоримо "спасибі" за цю капость Intel "y). також RMClock не підтримує нові процесори AMD (на чіпсетах 780G і старше) і Intel Core i3, i5, i7 і інші з того ж сімейства

Спрощена настройка цієї утиліти для користувачів, у яких немає часу / бажання / досвіду її точно керувати.

Розгорнутий опис налаштування цієї утиліти для користувачів, які хочуть досягти максимальної ефективності її роботи.

Примітка: в даному матеріалі настройка проводиться в середовищі Windows XP. Процедура настройки в Windows Vista та ж, за винятком кількох нюансів, про які розказано в цьому матеріалі: Рішення проблем з перезавантаженнями і зависаннями ноутбука

Спрощена настройка RMClock

Почнемо з запуску утиліти. Переходимо на вкладку Settings і виставляємо параметри як на скріншоті:

На цій вкладці ми включили автозагрузку утиліти. Переходимо до наступної вкладки: Management. Налаштовуємо так, як показано на скріншоті:

Варто відзначити, що галочку біля пункту OS Power management integration спочатку треба зняти, а потім знову поставити
Переходимо до вкладки Advanced CPU Settings. Якщо у Вас процесор від Intel налаштовуємо як на скріншоті нижче:

Дуже важливо, щоб стояла галка біля пункту Mobile. Інші пункти у Вас можуть бути неактивні. Чи не звертаємо на це увагу

Для процесорів від AMD вкладка Advanced CPU Settings повинна мати такий вигляд:

Тепер переходимо до найцікавішого - до вкладки Profiles. для процесорів Intel вона може мати такий вигляд:

Якщо у Вас стоїть галочка біля пункту IDA - знімаємо її

Примітка: то що ми зняли там галочку ще не означає, що технологія IDA не працюватиме. Вона працюватиме. Просто в цьому випадку буде менше глюків

Тепер поясню як ставити напруги. Для найвищого множника (не рахуючи IDA) Ставимо напруга 1.1000V. У моєму випадку цей множник - 10.0Х. На цьому напрузі здатне працювати переважна більшість процесорів Core 2 Duo. Якщо у Вас ноутбук зависає після застосування налаштувань - значить це напруга варто збільшити до 1.1500V. Для самого верхнього множника ставимо напруга 0.8000-0.8500В. Утиліта сама проставить проміжні значення. При таких налаштуваннях при роботі від мережі ноутбук буде працювати на максимальній частоті, а при переході до живлення від батарей - на мінімальній для кращого енергозбереження.

Увага: НІ В ЯКОМУ РАЗІ НЕ СТАВТЕ напруги ВИЩЕ 1.4000В !!!

Для ноутбуків на процесорах від AMD ця вкладка матиме такий вигляд:

Тут для найбільшого множника (в моєму випадку це 10.0Х) ставимо напруга 1.0000V. Для найменшого - найменше значення, яке дозволяє виставити утиліта.

Примітка: якщо Ви ставите дуже маленьке напруга, то це ще не означає, що процесор буде на ньому працювати. Вся справа в тому, що мінімальна напруга, на якому може працювати процесор, жорстко задано для кожного окремого процесора. Якщо в RMClock виставити дуже низька напруга, то процесор в результаті буде працювати на мінімальному напрузі, яке дозволяє виставити материнська плата.

Переходимо безпосередньо до налаштувань профілів, зокрема Power Saving.

для процесорів Intel вона має такий вигляд:

для процесорів AMD вона виглядає так:

Тут ставимо галочки біля самих верхніх пунктів. Переходимо до вкладки Maximal performance.

для процесорів Intel вона має такий вигляд:

для процесорів AMD вона має такий вигляд:

На цій вкладці ставимо галочки біля найнижчих пунктів з найбільшими множителями.
Щоб у RMClock не виникало конфліктів з Windows XP - заходимо в Властивості: Електроживлення (Пуск -\u003e Панель управління -\u003e Електроживлення) і вибираємо в віконці вибору профілів профіль RMClock Power Management і натискаємо ОК.

Примітка: для Windows Vista цього робити не потрібно.

Щоб подивитися на якій напрузі і частоті працює процесор - переходимо на вкладку Monitoring

Як бачимо, процесор в моєму випадку працює на частоті 2000 МГц, на множителе 10.0 і на напрузі 1.100 В. Його температура - 45 градусів.

Ось, мабуть і все. Якщо Ви хочете глибше розібратися з цією програмою - читаємо далі

Повний опис настройки RMClock

У цій частині я розповім більш-докладно про налаштування самої утиліти. Почнемо з розгляду вкладки Settings

Опишу що знаходиться на цій вкладці. У самому вгорі розміщено віконце для вибору мови програми. Щоб вибрати російську мову треба скачати соответствующую.dll бібліотеку (яку ще знайти треба ...)

Нижче знаходяться такі налаштування:

  • Colors - налаштування кольорів вікна моніторингу.
  • Show informational balloon tooltips - показувати інформаційні спливаючі підказки в треї
  • Show critical balloon tooltips - показувати критичні повідомлення в треї, при перегріванні, наприклад
  • Make application window always on top - розташовувати вікно програми поверх інших вікон
  • Show application button in taskbar - показувати кнопку додатка в таскбару
  • Temperature units - одиниці виміру температури (градуси за Цельсієм / за Фаренгейтом)

Ще нижче знаходяться опції автозапуску:

  • Start minimized to system tray - запускати згорнутим в системний лоток (біля годинника)
  • Run at Windows startup - запускати при старті Windows. Зліва можна вибирати способи автозапуску: за допомогою ключа реєстру або через папку

І в самому низу налаштовуються опції ведення логів. Що і як моніторити.

на вкладці CPU Info можна дізнатися додаткову інформацію про процесор.

Вид цієї вкладки для платформ на базі Intel і на базі AMD може бути зовсім різний. Спочатку опишу для платформи Intel:

У самому верху знаходяться 3 вкладки Processor, Chipset і Throttling. Виберіть Chipset і Throttling для нас особливого практичного інтересу не представляють, тому їх не чіпаємо і залишаємо параметри за замовчуванням. А ось на вкладці Processor зупинимося детальніше.
У самому вгорі під написом Automatic thermal protection розміщені 4 пункту:

  • Enable thermal monitor 1 - увімкнути ТМ1
  • Enable thermal monitor 2 - увімкнути ТМ2
  • Sync. TM1 on CPU cores - синхронізувати ТМ1 до ядер процесора
  • Enable Extended throttling - включення розширеного тротлінга.
  • Більш детально про те, що таке ТМ1 і ТМ2 читаємо в документації до процесора. Там ці всі технології коректно описані. У двох словах: вони служать для захисту процесора від виходу з ладу через перегрів. Якщо температура процесора досягне певного значення (як правило це 94-96 С), то процесор переключиться в режим, який вказується праворуч під написом Thermal Monitor 2 target

У віконці FID / VID transition stabilization time вказується час стабілізації при переходах з одного режиму роботи процесора в інший.

Нижче під написом Intel Core / Core 2 family enhanced low power states включаються різні можливі стани процесора зі зниженим енергоспоживанням. Що таке С1Е, С2Е... описано в тій же документації до процесора. Там воно подано у вигляді таблички.

У самому низу вкладки Advanced CPU Settings є 2 цікавих пункту:

  • Engage Intel Dynamic Acceleration (IDA) IDA. Суть цієї технології зводиться до того, що в процесорах з декількома ядрами в моменти, коли навантаження на одне з них висока, то воно перемикається на більш високий множник. Тобто якщо для процесора Т7300 номінальний множник х10, то в моменти з високим навантаженням на одне ядро, воно буде працювати на частоті НЕ 2.0 ГГц, а на 2.2 ГГц з множником х11 замість х10.
  • Enable Dynamic FSB Frequency Switching (DFFS) - ця опція включає технологію DFFS. Її суть зводиться до того, що для зниження енергоспоживання частота системної шини зменшується з 200 МГц до 100 МГц.

Трохи нижче вибираємо тип процесора. У нашому випадку це Mobile і ставимо галочку біля

А тепер подивимося як буде виглядати Владка Advanced CPU Settings для систем на базі процесорів AMD:

Зупинюся лише на найважливіших моментах
Вгорі знову ж є 3 вкладки. Нас цікавить в більшій мірі вкладка CPU setup
Зліва в віконці ACPI state to view / modify вибираємо профіль (стан) енергоспоживання процесора з яким будемо працювати на цій вкладці.

  • Enable CPU low power - перехід до режиму заощадження процесора
  • Enable Northbridge low power - перехід до режиму заощадження північного моста
  • Enable FID / VID change - включити можливість зміни напруги / множника
  • Enable AltVID change - включити можливість альтернативного зміни напруги
  • Apply these settings at startup - застосовувати дані зміни після завантаження ОС.
  • Якщо натиснути на трикутничок праворуч написи ACPI power states settings , То з'явиться меню з налаштуваннями.
  • З'явилися ще питання для чого та чи інша галочка - читаємо інструкцію до програми або як завжди - методом тику

Тепер перейдемо до вкладки Management

У двох словах поясню для чого та чи інша галочка.

P-states transitions method: - в цьому віконці можна поставити спосіб переходу від одного P-state (по суті це комбінація певного значення множника і напруги) до іншого. Можливі два варіанти - однокрокові - Single-step (тобто якщо процесор перемикається з множника х6 на х8, то спочатку він зробить перехід х6-\u003e x7, а потім х7-\u003e х8) і багатокрокові - Multi-step (з х6 відразу на х8 без переходу на х7)
Multi-CPU load calculation - в цьому віконці задається спосіб визначення завантаження процесора (для режиму Performance on demand, наприклад). На скріншоті вказано метод, коли завантаження буде дорівнює максимальному завантаженні будь-якого з ядер.
Standby / hibernate action - тут задається дію при переході в режим очікування або в режим гібернації. На скріншоті обраний варіант "Залишити поточний профіль"

Нижче вказуються значення за замовчуванням процесора - CPU Default Settings
Restore CPU defaults on management turns off - відновлювати значення за замовчуванням при виключенні управління RMClock
Restore CPU defaults on application exit - відновлювати значення за замовчуванням при закритті утиліти RMClock

Трохи нижче написи CPU defeaults selection можна вибрати один з трьох варіантів:

  • CPU-defined default P-state - напруга / множник за замовчуванням визначаються самим процесором
  • P-state found at startup - напруга / множник за замовчуванням знаходяться при старті ОС
  • Custom P-state - напруга / множник за замовчуванням задаються вручну

А ось на галочку Enable OS power management integration варто звернути особливу увагу. Її треба спершу прибрати, а потім знову поставити. Після цього треба зайти в Панель управління -\u003e Електроживлення і вибрати там схему електроживлення "RMClock Power Management". Як варіант - можна в утиліті Acer ePower вибрати профіль RMClock Power Management. Якщо цього не зробити, то можливі конфлікти між ОС і утилітою, коли вони одночасно будуть по-своєму управляти частотою і напругою процесора. Як результатами можливі постійні перепади напруги і частоти.

Тепер переходимо до найцікавішого: налаштування напруг. У спрощеній налаштування наведені значення, які з певною часткою ймовірності підійдуть відсоткам 90-95 користувачів. Але практика показує, що найчастіше процесори можуть стабільно працювати і на більш-низькій напрузі, а це значить ще менше тепловиділення і енергоспоживання, що на практиці виливається в зменшення нагрівання і збільшення часу автономної роботи.

Примітка: настройка напруг подана на прикладі процесора Intel Core 2 Duo. Для інших процесорів (включаючи продукцію AMD) процедура настройки та ж. Просто будуть інші значення, кількість множників і, природно, напруг. Тут я хочу розвіяти ще одна помилка. Часто користувачі вважають, що якщо у них, напрмер, Т7300 як і у мене, то у них проц буде працювати на тих же напругах що і у мене. ЦЕ НЕ ТАК. Кожен окремий екземпляр має свої значеннями мінімальних напружень. Те що один проц конкретної моделі працює на конкретному напрузі ще не означає, що інший проц тієї ж моделі буде працювати на тій же напрузі. Іншими словами: якщо будете ставити то що на скріншотах - то не факт, що воно у вас запрацює.

Зараз наше завдання - визначити мінімальні значення напруг, на яких конкретно Ваш процесор буде стабільно працювати. Для цього нам знадобиться утиліта S & M (gcontent) Завантажити S & M (/ gcontent)
Коротенько опишу вкладку Profiles:

У верхній частині вкладки є 4 віконця. Поясню навіщо вони потрібні. У двох віконцях зліва під AC power виставляються поточний ( Сurrent) І завантажувальний ( Startup) Профілі системи при харчуванні ноутбука від мережі, трохи правіше під Baterryвиставляються поточний ( Сurrent) І завантажувальний ( Startup) Профілі системи при харчуванні ноутбука від батареї. Самі профілі налаштовуються на подвкладках (трохи нижче Profiles). Внизу є ще пунктик - . Він відповідає за автозаповнення напружень, тобто поставив верхнє значення на одному множителе, поставив нижнє на другому, коли галка біля того пункту поставлена, програмка сама виставить проміжні значення методом лінійної інтерполяції.

Як бачимо на скріншоті, при роботі від мережі ноутбук буде працювати на частоті / напрузі, які задаються в профілі Maximal Performance, А коли ноутбук буде працювати від батарей - частота і напруга будуть задаватися в профілі Power saving

Тепер приступимо безпосередньо до визначення мінімальних напруг, при яких система все ще стабільна. Для цього знімаємо всі галочки, крім тієї, що відповідає за найвищий множник (не рахуючи IDA). Ставимо напруга 1.1000В, наприклад (для AMD можна починати і з 1.0000В)

Переходимо на подвкладку Maximal performance (Цей профіль у нас зараз активний, ноутбук працює від мережі)

Відзначаємо наш множник галочкою і запускаємо S & M. При першому запуску ця утиліта чесно нас попереджає:

клацаємо ОК

Тепер переходимо безпосередньо до налаштування цієї утиліти. Переходимо на вкладку 0

Вибираємо тест, який найбільш-сильно розігріває процесор. Те саме робить і на вкладці 1 (У процесора адже два ядра)

Тепер переходимо на вкладку налаштування. Спочатку ставимо максимальне завантаження процесора:

ставимо тривалість тестування на довго (Приблизно 30 хвилин, для норма - 8 хвилин) і відключаємо тест пам'яті

і натискаємо на кнопку почати перевірку

на вкладці монітор можна відстежувати поточну температуру процесора:

Якщо за час перевірки ноутбук не завис, що не перезавантажився і не видав "синій екран" означає він пройшов тест і напруга можна ще зменшити. Для цього переходимо на вкладку Profiles і зменшуємо напругу на 0.0500В:

Знову запускаємо утиліту S & M. Есліі на цей раз все пройшло вдало - значить ще можна знизити напругу ... Якщо тестування пройшло невдало - напруга треба збільшити. Мета проста: знайти ту напругу, при якому ноутбук буде проходити тестування утилітою S & M.
В ідеалі треба для кожного множника знайти таку напругу, але щоб не вбивати багато часу - ставимо максимальному множнику то напруга, яку ми визначили, ставимо мінімального множнику (в моєму випадку 6.0Х) мінімальне напруження, яке може виставити материнка для Вашого процесора (як правило , це 0.8-0.9 В) ... а проміжні значення нехай заповнюються за допомогою функції Auto-adjust intermediate stetes VIDs

У цій утиліті є ще одна можливість, про яку я не згадував: це зміна частоти процесора в залежності від навантаження.
У профілях Maximal Performance і Power saving є можливість вибрати тільки одне значення частоти процесора з певним напруженням. Якщо необхідно організувати гнучке управління частотою в залежності від завантаження процесора варто звернути увагу на профіль Performance on demand. Він відрізняється від Maximal Performance і Power saving тим, що тут можна вказати одну або кілька комбінацій напруга / множник, на яких і буде працювати процесор.
Ось приклад його налаштування:

Внизу в налаштуваннях цього профілю є деякі параметри, які ми можемо змінювати. Коротенько опишу їх:

Target CPU usage level (%) - задає поріг перемикання множників / напружень. Перехід відбувається лише між тими множителями і напруженнями, які відзначені галочками в віконці вище. Спосіб вимірювання завантаження процесора визначається на вкладці Management

Up transition interval - визначає час протягом якого завантаження процесора повинна бути вище за поставлене вище поріг, щоб відбулося перемикання на більш високий множник із зазначених вище галочками.

Down transition interval - визначає час протягом якого завантаження процесора повинен бути нижче за поставлене вище поріг, щоб відбулося перемикання на більш низький множник із зазначених вище галочками.

На налаштуваннях кожного з профілів є опції тротлінга - Use throttling (ODCM). Його включати я не рекомендую, тому що в результаті частота зменшується, а нагрів зростає. Також можна вказати параметри електроживлення системи (час відключення монітора, дисків ітд) на вкладці OS Settings:

Щоб активувати профіль Performance on demand - треба вибрати його в віконцях Current на вкладці Profiles

Ось, мабуть, і все.

Вступ

Ентузіасти уважно стежать за можливостями розгону процесорів. Вони витрачають чимало часу, щоб знайти відповіді на наступні питання: Наскільки швидко можна розігнати ті чи інші процесори? Який при цьому потрібно рівень напруги? Яке рішення охолодження буде краще?

Розгін дозволяє збільшити продуктивність CPU до рівня більш дорогих моделей процесорів, але можливо і зворотний напрямок. Зазвичай можна знизити напруги живлення процесора, щоб поліпшити ефективність роботи, не змінюючи при цьому продуктивність.

Напруга, тактова частота і енергоспоживання

Тактова частота - один з найважливіших параметрів, що впливають на продуктивність, при цьому для досягнення високих тактових частот зазвичай потрібне підвищення напруги. З урахуванням всього завантаженого саме напруга грає найважливішу роль в підсумковому енергоспоживанні, а роль тактової частоти все ж вторинна. Підвищення або зниження тактової частоти впливає на енергоспоживання майже в прямо пропорційній залежності, а від напруги залежність квадратична. Саме з цієї причини збільшення напруги завжди більш істотно позначається на енергоспоживанні, ніж підвищення тактової частоти.

Звичайно ж, зниження робочої напруги теж істотно впливає на енергоспоживання, тому ми вирішили більш глибоко дослідити це питання.

Процесори з зниженою напругою

Багато мобільні процесори являють собою кілька модифіковані версії звичайних CPU зі зниженим напругою. Візьміть, наприклад, мобільні процесори Intel Core 2 . Вони відрізняються оптимізованим енергоспоживанням, але в порівнянних умовах вони працюватимуть з такою ж продуктивністю і споживати стільки ж енергії, скільки їх настільні "побратими". Лінійка Core 2 Duo T заявлена \u200b\u200bз максимальним енергоспоживанням 35 Вт, лінійка P обмежується тепловим пакетом 25 Вт і так далі.

Але існують економічні процесори і для настільних комп'ютерів. AMD пропонує процесори з оптимізованим енергоспоживанням з суфіксом "e" (Phenom II X4 900e, 905e, і Phenom X4 9350e). Intel випускає лінійку процесорів Core 2 Quad "S" , Які забезпечують продуктивність на рівні стандартних моделей, але залишаються в межах теплового пакету 65 Вт замість 95 Вт. Хоча економічні версії процесорів коштують дорожче, нас вони чимало вразили, забезпечивши зниження енергоспоживання в режимі бездіяльності і під навантаженням.

Зроби сам?

Чи можна перетворити процесор в економічну версію своїми руками? Розгін і підвищення напруги стали дуже популярними, але як щодо зниження напруги? Ми взяли дві материнські плати MSI, які були в нашому розпорядженні: P45D3 Neo, використану нами в пошуках оптимального розгону Core 2 Duo , Але на цей раз в парі з процесором Core 2 Extreme QX9650, а також модель 790FX-GD70 для тестів AMD Phenom II X4 955.

Платформи: AMD 790FX і Intel P45

Щоб дослідити зниження напруги процесора Phenom II X4 955 ми взяли материнську плату MSI 790FX-GD70. Дана плата є топовою моделлю MSI для Socket AM3, вона використовує чіпсет AMD 790FX, який підтримує всі останні процесори AMD; плата оснащена технологією ATI CrossFireX (завдяки чотирьом слотам x16 PCI Express 2.0) і великою кількістю функцій, корисних ентузіастам. Виробник вирішив оснастити плату функцією апаратного розгону, стабілізатором напруги з 4 + 1 фазами з динамічним перемиканням, а також великої (але не надмірно) системою охолодження на теплових трубках для чіпсета і стабілізаторів напруги. BIOS дозволяє виставляти частоту пам'яті DDR3 до 2133 MT / s. RAID підтримується на всіх шести портах SATA 3 Гбіт / с через південний міст SB750; є додаткові порти SATA, FireWire 400 і два гнізда Ethernet 1 Гбіт / с, не кажучи вже про звуковому кодеку HD 192 кГц.

Однак на цей раз нам навряд чи знадобиться такий набір функцій, оскільки метою проекту була економія енергії. Стабілізатор напруги з п'ятьма фазами повинен бути ефективний, а сама плата рівня ентузіастів заповнена якісними компонентами, здатними задовольнити наші амбіції. Однак ми все ж були трохи розчаровані тим, що не можна знижувати напруги чіпсета і пам'яті менше номіналу. Можливо, MSI слід додати таку функцію в наступних версіях BIOS.



Для процесора Core 2 Quad на Socket 775 (ми використовували Core 2 Extreme QX9650) ми взяли материнську плату P45D3 Neo, добре показала себе в наших тестах оптимального розгону Core 2 Duo . Плата побудована на чіпсеті P45, але це не продукт для ентузіастів: доведеться задовольнятися трьома фазами стабілізатора напруги, тут немає складної системи охолодження на теплових трубках, а стандартні функції чіпсета доповнюють лише кілька опцій. Додаткова інформація про плату наведено в статті " Intel Core 2 Duo: аналіз розгону, продуктивності і ефективності ". Але ми все одно використовували цю плату для нашого проекту зниження напруги, оскільки інші продукти (включаючи Gigabyte X48T-DQ6 і Asus P5Q Deluxe) теж не надавали опцій зниження напруги інших компонентів крім процесора.


Як правильно знижувати напругу?

Досвідчені оверклокери можуть пропустити цей розділ, а всім іншим ми рекомендуємо ознайомитися з деякими особливостями, пов'язаними зі зниженням напруги процесорів.

Drooping

Перше, що потрібно знати: напруга процесора, яке виставляється в BIOS (автоматично або користувачем) може не відповідати напрузі Vcore, на якому буде працювати процесор. Насправді в BIOS визначається максимальна напруга процесора, а ефективне напруга зазвичай буває нижче. Воно може навіть змінюватися в залежності від умов роботи процесора (наприклад, температури), які змінюються при переході CPU з режиму бездіяльності в режим навантаження і навпаки.

Така поведінка цілком виправдано, оскільки провідність кристала поліпшується у міру нагрівання CPU під навантаженням. Якщо напруга не змінювати, то струм буде збільшуватися, тобто струм і температура будуть піднімати один одного. Спеціальний механізм drooping дещо знижує напругу процесора під навантаженням, щоб CPU залишався в межах електричних специфікацій.

Якщо ви використовуєте такі інструменти, як CPU-Z для зчитування ефективного напруги процесора, спробуйте перевірити задану напругу за допомогою CoreTemp - і ви помітите, що два значення будуть відрізнятися. Різниця між заданим і ефективною напругою в режимі бездіяльності називається "offset" (Voffset), а різниця напруги між режимом бездіяльності і піковим навантаженням - "droop" (Vdroop).

Перевірка

Процесор досягає пікової напруги, коли він переходить зі стану навантаження в стан бездіяльності, оскільки напруга ніколи не переходить точно з одного рівня на інший, а "перестрибує" рівень і потім вирівнюється. Саме в такому "стрибку" процесор досягає пікового заданої напруги.

З тієї ж причини досить легко перевірити, буде чи ні процесор зі зниженим напругою стабільно працювати під піковими навантаженнями: він буде накладати Vdroop і знижувати робочу напругу, щоб воно було нижче заданої напруги. Ми використовували Prime95 - чудову утиліту для завантаження процесора. Після 30 хвилин роботи під піковим навантаженням без "вилетів" ми приходили до висновку, що система із зниженою напругою стабільно працює під навантаженням. Це зазвичай означає, що стабільною буде робота і в режимі бездіяльності, оскільки тоді накладається трохи більш високу напругу. Але це не може бути застосовано до режимам економії енергії, подібним Intel SpeedStep, які ще сильніше знижують частоту (множник) і напруга. Ми провели всі тести зниженого напруги з активною технологією SpeedStep, але це було не потрібно для технології AMD Cool "n" Quiet, оскільки у неї використовуються штатні напруги і частоти в режимі бездіяльності.

Як завжди, не можна сприймати наші результати розгону або зменшення напруги як істину в останній інстанції. Тут все залежить від вас: потрібно або провести розширений набір тестів, або змиритися з ризиком, що система може бути не завжди стабільною. Та й ваші результати можуть бути зовсім іншими - можливо, краще повернутися до більш консервативним налаштувань (тобто трохи підвищити напругу), щоб себе убезпечити. У будь-якому випадку, потенціал щодо економії енергії все одно буде досить істотним.


процесор AMD Phenom II X4 955 залишається флагманської моделлю компанії після його оголошення в квітні 2009. Завдяки підтримці пам'яті DDR3 і тактовою частотою 3,2 ГГц AMD змогла конкурувати з Intel Core 2 Quad в деяких тестах, при цьому як процесор, так і платформа обійдуться дешевше. Втім, до продуктивності Core i7 все одно далеко.

Моделі Phenom II X4 доступні на частотах між 2,5 і 3,2 ГГц (див. сторінку на web-сайті AMD). Лінійка процесорів 800 оснащена 4x 512 кбайт кеша L2 на ядро \u200b\u200bі загальним кешем L3 на 4 Мбайт, а у лінійки 900 кешу L3 на 50% більше. Всі процесори Phenom II виробляються на заводах Globalfoundries по 45-нм техпроцесу DSL SOI, що забезпечує низьке енергоспоживання і хороші можливості розгону. Буде цікаво подивитися, наскільки сильно ми зможемо знизити напругу.

Автоматичні настройки BIOS привели до роботи Phenom II X4 955 від напруги 1,32 В за інформацією CPU-Z. При цьому пікове енергоспоживання системи склало 216 Вт при повному навантаженні на CPU. Цілком зрозуміло, що результат є, куди покращувати.

Всі процесори AMD з активною технологією Cool "n" Quiet можуть переходити на частоту 800 МГц в режимі бездіяльності, при цьому штатний напруга ядра знижується до 0,96 В. Як видно з підсумкової таблиці нижче, процесор Phenom II перемикається на 0,96 В в режимі Cool "n" Quiet незалежно від того, яка напруга CPU виставлено в BIOS. Тому і енергоспоживання системи в режимі бездіяльності було завжди однаковим: 99 Вт. Покращувати в даному випадку нічого, якщо тільки BIOS не почнеться дозволяти змінювати напругу в режимі бездіяльності.

Ми спробували виставляти кілька рівнів напруги (див. Таблицю нижче) і перевіряли навантаження на них за допомогою тесту Prime95 не менше 30 хвилин. Вийшло, що штатний напруга 1,32 В можна знизити на цілих 12% до 1,1175 В. При цьому ми знизили енергоспоживання системи з 216 до 179 Вт, що становить падіння на 17,2%. Не погано.

Підсумкова таблиця

AMD Phenom II X4 955
Напруга в BIOS Рефлекси.
Auto 0,96 В * 99 Вт 1,32 В 216 Вт Так
1,3125 0,96 В * 99 Вт 1,288 В 205 Вт Так
1,2875 0,96 В * 99 Вт 1,264 В 199 Вт Так
1,2625 0,96 В * 99 Вт 1,24 В 196 Вт Так
1,2375 0,96 В * 99 Вт 1,216 В 192 Вт Так
1,2125 0,96 В * 99 Вт 1,192 В 186 Вт Так
1,1875 0,96 В * 99 Вт 1,168 В 181 Вт Так
1,175 0,96 В * 99 Вт 1,152 В 179 Вт Так
1,1625 0,96 В * 99 Вт 1,136 В 177 Вт немає

* Виставляється Cool "n" Quiet.


Тепер настав час розглянути Intel Core 2 Quad. Ми використовували процесор Core 2 Extreme QX9650, оскільки в нашому розпорядженні не було звичайної моделі Core 2 Quad.

Лінійка Core 2 Quad і раніше забезпечує солідну продуктивність при прийнятних рівнях енергоспоживання. Лінійки Q8000 і Q9000 побудовані на 45-нм дизайні Yorkfield. У Q8000 використовується 4 Мбайт кешу L2, а у Q9000 6 Мбайт або навіть 12 Мбайт кеша L2.

Все чотириядерні процесори Core 2 Quad збираються з двох 45-нм двоядерних кристалів Wolfdale.

Коли ми виставили напруга в BIOS в режим "Automatic", то отримали у Core 2 Extreme QX9650 1,256 В, в результаті чого система при повному навантаженні споживала 185 Вт.

Напруга в режимі бездіяльності безпосередньо міняти не вийде, воно буде завжди визначатися залежно від напруги CPU, яке ви вкажете. У разі налаштувань BIOS за замовчуванням ми отримали напруга 1,192 В після включення технології SpeedStep, що знизило множник до 6x, а тактова частота ядра склала 2,0 ГГц. Вийшло значення енергоспоживання в режимі бездіяльності 94 Вт (див. Таблицю нижче) все ще нижче енергоспоживання системи AMD при напрузі всього 0,96 В і частоті CPU 800 МГц, що досить дивно.

Найнижчим стабільним напругою виявилося 1,072 В, яке ми досягли за допомогою настройки в BIOS 1,0785 В. При повному навантаженні це призвело до загального енергоспоживання системи всього 148 Вт, тобто ми отримали 20% зниження енергоспоживання при 16,3% зменшенні напруги ядра процесора. Наступним кроком повинно було стати напруга 1,0655 В, при якому ми вже втратили стабільність. На щастя, воно призвело до однакових збійних результатами під навантаженням і в режимі бездіяльності, що зробило подальше зниження напруги безглуздим.

Напруга в режимі бездіяльності, що випливає з напруги нашого процесора 1,0785 В, склало 0,1008 В, що дозволило отримати енергоспоживання в режимі бездіяльності системи 87 Вт. Поліпшення менше 11%, але воно дісталося безкоштовно, система в тестах працювала стабільно.

Intel Core 2 Extreme QX9650
Напруга в BIOS Ефективне напруга (безд.) Ефективне енергопотр. (Безд.) Ефективне напруга (нагр.) Ефективне енергопотр. (Нагр.) Рефлекси.
Auto 1,192 В 94 Вт 1,25 В 185 Вт Так
1,1955 В 1,128 В 93 Вт 1,184 В 172 Вт Так
1,1695 В 1,104 В 92 Вт 1,16 В 166 Вт Так
1,1435 В 1,008 В 91 Вт 1,136 В 162 Вт Так
1,175 В 1,048 В 90 Вт 1,104 В 158 Вт Так
1,0915 В 1,016 В 88 Вт 1,08 У 151 Вт Так
1,0785 В 1,008 В 87 Вт 1,072 В 148 Вт Так
1,0655 В 0,992 В 87 Вт 1,056 В 148 Вт немає


Системне апаратне забезпечення
CPU AMD AMD Phenom II X4 955 (45 нм, 3,2 ГГц, 4x 512 кбайт кеша L2 і 6 Мбайт кешу L3, TDP 125 Вт, Rev. C2)
CPU Intel Intel Core 2 Extreme QX9650 (45 нм, 3,0 ГГц, 12 Мбайт кеша L2, TDP 130 Вт, Rev. D0)
Материнська плата (Socket 775) MSI P45D3 Neo-F (Rev. 1.0), чіпсет: Intel P45, ICH10R, BIOS: 4.2 (02/18/2009)
Материнська плата (Socket AM3) MSI 790FX-GD70 (Rev. 1.0), чіпсет: AMD 790FX, SB750, BIOS: 1.3 (04/01/2009)
пам'ять DDR3 2 x 2 Гбайт DDR3-1600 (Corsair TR3X6G-1600C8D 8-8-8-24)
відеокарта Zotac Geforce GTX 260², GPU: GeForce GTX 260 (576 МГц), відеопам'ять: 896 Мбайт DDR3 (1998 МГц), 216 потокових процесорів, частота блоку шейдерів тисячі двісті сорок дві МГц
Жорсткий диск Western Digital VelociRaptor, 300 Гбайт (WD3000HLFS) 10 000 об / хв, SATA / 300, кеш 16 Мбайт
Привід Blu-Ray LG GGW-H20L, SATA / 150
Блок живлення PC Power & Cooling, Silencer 750EPS12V 750 Вт
Системне Програмне забезпечення та драйвери
Операційна система Windows Vista Enterprise Version 6.0 x64 Service Pack 2 (Build 6000)
Драйвер чіпсета AMD Catalyst 9.4
Драйвер Nvidia GeForce GeForce 185.85
Драйвер чіпсета Intel Chipset Installation Utility Ver. 9.1.0.1012
Intel Storage Drivers Matrix Storage Drivers Ver. 8.8.0.1009


Тести і настройки

Тести і настройки
PCMark Vantage Version: 1.00
PCMark Benchmark
Prime 95 Version: 25.7
In-place large FFTs

результати тестів

У нас немає графіка, що демонструє енергоспоживання AMD Phenom II X4 955 в режимі бездіяльності, оскільки напруга процесорів AMD не змінюється. Після активації функції Cool "n" Quiet процесор без навантаження завжди працює на частоті 800 МГц з напругою 0,96 В (по крайней мере, на нашій материнській платі MSI 790FX-GD70). Тому система AMD завжди споживала 99 Вт в режимі бездіяльності.

На графіку показано енергоспоживання системи Core 2 Extreme QX9650 в режимі бездіяльності на всіх протестованих рівнях напруги. При напрузі 1,008 В можна отримати енергоспоживання 87 Вт, а при напрузі 1,192 В за замовчуванням енергоспоживання становить 94 Вт.


Економія енергії від зниження напруги в разі флагманського процесора AMD виявилася дуже істотною. Ми почали з штатного напруги 1,32 В, яке давало пікове енергоспоживання системи 216 Вт, після чого отримали всього 179 Вт під навантаженням при напрузі 1,175 В. Економія енергоспоживання склала 37 Вт або 17,2% - досить суттєво, оскільки зекономленої енергії буде достатньо для харчування, наприклад, 20 "сучасного дисплея!

Чи може система Intel перевершити 17,2% економію енергії під піковим навантаженням? Може: в даному випадку мінімальне стабільну напругу під навантаженням склало 1,078 В замість 1,255 В, а енергоспоживання всієї системи 148 Вт замість 185 Вт - 20% зниження.

Енергоспоживання і ефективність PCMark

Ми зробили заміри продуктивності PCMark Vantage і енергоспоживання при настройках за умовчанням і оптимізованому напрузі систем AMD і Intel.


У разі системи Phenom II X4 955 середнє енергоспоживання вдалося знизити з 157 до 141 Вт, тобто поліпшення склало 10,2%. Система Core 2 Extreme QX9650 змогла знизити енергоспоживання з 135 до 117 Вт, тобто результат вийшов вражаючим, враховуючи обчислювальну потужність, що перевершує топовий процесор AMD, використаний нами. Система Intel знизила середнє енергоспоживання на 13,1%.


Отже, сумарна енергія (в ват-годинах), витрачена на прогін теж знизилася: на 11,4% у системи AMD і на 12,4% у системи Intel. Не погано!


Нарешті, ми співвіднесли результати PCMark Vantage із середнім енергоспоживанням двох систем (бали продуктивності на ват). Пам'ятайте, що дві машини забезпечують колишню продуктивність після оптимізації напруг. Система на AMD Phenom II X4 955 змогла дати поліпшення по ефективності енергоспоживання 11,6% в тесті PCMark Vantage. Система Intel поліпшила результат ефективності на 13,8%.

висновок

Ми протестували два high-end процесора від AMD і Intel на сучасних материнських платах MSI, що дозволило проаналізувати потенційну економію енергії, яку можна отримати шляхом зниження напруги процесорів. Звичайно, ми мали намір також знизити напругу у пам'яті або чіпсетів, щоб отримати додаткову економію, але жодна з розглянутих материнських плат не дозволила нам модифікувати напруга компонентів. Ми розглянули плати Asus P6T і Rampage II Gene, Gigabyte MA790FXT-UD5P і X48T-DQ6, але в підсумку зупинилися на MSI 790FX-GD70 для Socket AM3 і P45D3 Neo для Socket LGA775.

AMD Phenom II X4: енергоспоживання на 17% нижче, ефективність на 11,6% вище

Пікове енергоспоживання під навантаженням знизилося на цілих 17% при виставленні мінімального стабільного напруги, яке ми знайшли у Phenom II X4 955. Оскільки продуктивність при цьому не змінювалася, ми отримали приріст ефективності (продуктивності на ват) 11,6% в тесті PCMark Vantage. Технологія AMD Cool "n" Quiet кілька гальмувала наші зусилля по зниженню напруги, оскільки в режимі бездіяльності вона завжди переключалася на штатний режим незалежно від виставленого напруги. І енергоспоживання в режимі бездіяльності завжди становило 99 Вт.

Intel Core 2 Extreme: енергоспоживання на 20% нижче, ефективність на 13,8% вище

Результати виявилися ще більш істотним на нашій тестовій системі Core 2 Extreme QX9650, де енергоспоживання під піковим навантаженням знизилося на вражаючі 20% без будь-якої втрати продуктивності. Це дозволило поліпшити продуктивність на ват PCMark Vantage на цілих 13,8%. Оскільки напруга процесора Intel в режимі енергозбереження SpeedStep залежить від виставленого напруги ядра, то енергоспоживання в режимі бездіяльності теж помітно знизилося - до всього 1,008 В. Це дало економію енергії в режимі бездіяльності 8%.

Чи варто економити енергію?

Ми були вражені відносно широкими допусками зниження напруги, оскільки припускали, що проблеми почнуться набагато раніше. Але системи AMD і Intel показали, що сучасні процесори можуть працювати при істотно меншій напрузі. Ми змогли подати на процесор AMD Phenom II X4 на 16% меншу напругу, а на процесор Intel Core 2 Extreme - на 16,6% менше. Все це дозволило отримати економію 17-20% під піковим навантаженням у обох систем.

Однак необхідно переконатися, що ваші настройки зі зниженим напругою забезпечують надійну роботу, тому ми рекомендуємо підходити до даного процесу обережно. Втім, вам не потрібно домагатися 16% зниження напруги - навіть 10% зниження дозволить безкоштовно знизити енергоспоживання системи без будь-якої шкоди продуктивності.