Underclocking (UC) - это способ экономии энергии путем понижения максимальной частоты процессора. Никаких дефектов, кроме снижения производительности он вызвать не способен.
Undervolting (UV) - это способ экономии энергии с помощью понижения напряжения, подаваемого на компоненты смартфона (CPU, GPU и т.п.). Избыточное понижение напряжения может сказаться на стабильности работы системы, но не способно вывести из строя телефон или вызвать аппаратный дефект. В худшем случае телефон зависнет. После перезагрузки и возвращения значений в исходное положение все будет как раньше.
И от и другое возможно только на кастомных ядрах, поддерживающих функцию управления частотой и напряжением процессора. Наиболее популярное и удобное ядро в этом плане - это
Siyah. На примере него я и опишу процесс.
Siyah является на сегодняшний день одним из самых стабильных и многофункциональных ядер для Samsung Galaxy S3. Автор постоянно обновляет версии, исправляя ошибки и добавляя новые функции. Ядро можно конфигурировать с помощью специального приложения STweaks (устанавливается автоматически вместе с ядром, также в Play Market можно скачать его аналог ExTweaks, но разницы между ними абсолютно никакой), позволяющего изменять множество настроек и параметров.
Управление частотой
процессора происходит на первой вкладке STweaks под названием CPU в поле CPU SCALING SETTINGS. Параметр MAX CPU LOCK отвечает за количество активных ядер процессора. Как показала практика, такой способ повышения энергоэффективности почти не дает эффекта, поэтому его рассматривать не будем. Ниже присутствуют ползунки с названиями SCALING_MAX_FREQ и SCALING_MIN_FREQ, управляющих максимальным и минимальным порогами тактовой частоты процессора. По умолчанию SCALING_MAX_FREQ = 1400, SCALING_MIN_FREQ = 200. Лично я считаю частоту 1400 МГц избыточной и понизил ее у себя до 1200 МГц. Практически для всех повседневных операций этого хватает за глаза. Во всяком случае я не испытываю никаких лагов, тормозов и т.п. По играм однозначно судить не могу, так как крайне редко играю, но я специально скачал Asphalt 7 (считается вроде как одной из самых тяжелых 3D-игр для современного смартфона), за полчаса игры ни единого лага обнаружено не было. Возможно для кого то будет иметь смысл понизить верхнюю планку частоты даже до 1000 МГц. Но это уже дело каждого. Эффект от понижения максимального значения тактовой частоты процессора заключается в том, что на более низких частотах процессор потребляет ток с более низким напряжением, а следовательно медленнее расходует заряд батареи. Разумеется эффект от этого будет ощутим только при использовании телефона в активном режиме. Также благодаря понижению частоты устройство будет меньше нагреваться при продолжительных больших нагрузках (например во время игр).
Ядро Siyah позволяет управлять напряжением процессора на каждой из частот, кратных 100 МГц. То есть можно отдельно задать напряжение для частоты 200 МГц, отдельно для 300 МГц, отдельно для 400 МГц и т.д. Однако в самом STweaks автор почему то не реализовал такую возможность, сделав только параметр CPU UNDERVOLTING (на той же вкладке CPU), позволяющий понизить напряжение одновременно для всех шагов частот на определенное значение (25 mV, 50 mV, 75 mV, 100 mV). Это не совсем удобно, поскольку не всегда получается снизить напряжение каждого шага на одно и то же значение. Однако для кого то этот способ может показаться более простым. От себя замечу, что понижение частот на 75 и 100 mV является довольно экстремальным и вероятнее всего будет вызывать зависания на большинстве смартфонов, поэтому стоит начать с 25 или 50 mV. Лучше всего начинать с минимального. К сожалению проверить стабильность работы в один момент нельзя, поскольку различные тесты и бенчмарки как правило нагружают процессор по полной программе, вынуждая его в ходе теста постоянно работать только на максимально возможной частоте. Соответственно проверяется стабильность только на максимальной частоте. Однако телефон может эксплуатировать процессор и на других более низких частотах. Можно конечно понижать максимальную частоту процессора на 100 МГц и каждый раз снова прогонять тест, но на низких частотах это может оказаться проблематичным. Поэтому я предпочитаю проверку практикой. К примеру устанавливаем параметр CPU UNDERVOLTING на -25 mV и смотрим как телефон будет вести себя в течении нескольких дней. Если все будет стабильно (никаких зависаний и перезагрузок), то можно перейти к следующему шагу -50 mV и дальше следить за стабильностью работы. И так далее до тех пор, пока не определим минимальные и стабильные значения напряжения. В моем случае этот метод оказался не очень удачным и я решил пойти по более сложному пути. Помимо STweaks, напряжением процессора можно управлять с помощью других утилит, в частности
NSTools (по рекомендации самого разработчика Siyah). NSTools позволяет задавать напряжение для каждого значения частоты, кратного 100 МГц, что позволяет выжать из UV максимум эффективности. По умолчанию процессор Galaxy S3 имеет следующие значения напряжения:
1400 MHz: 1275 mV
1300 MHz: 1238 mV
1200 MHz: 1175 mV
1100 MHz: 1125 mV
1000 MHz: 1088 mV
900 MHz: 1050 mV
800 MHz: 1000 mV
700 MHz: 975 mV
600 MHz: 963 mV
500 MHz: 938 mV
400 MHz: 925 mV
300 MHz: 900 mV
200 MHz: 900 mV
Если вы устанавливаете максимальную тактовую частоту ниже обычной, то напряжение для значений частоты, превышающих максимальную, можно не трогать, процессор все равно никогда не будет переходить на эти частоты. Способ определения оптимального напряжения тот же, что и в случае сSTweaks с той лишь разницей, что проверять придется каждый шаг на каждой частоте отдельно, что может занять еще больше времени. Однако смысла бороться за минимальные значения на каждом шаге частоты особого нет, поскольку телефон не работает на каждой частоте одинаковое количество времени. Выяснить это можно с помощью утилиты BetterBatteryStats, о которой я уже писал выше. Она отслеживает продолжительность времени работы процессора на каждом шаге частоты и позволяет отобразить это наглядно в пункте CPU States. Дольше всего телефон работает на минимальной частоте (что естественно во время простоев) и максимальной, остальные варианты могут быть у каждого индивидуальны. В моем случае это 1200, 1000, 800, 400 и 200 МГц.
Ниже приведены мои значения напряжений, в скобках указано отклонение от стандартного напряжения (возможно, точнее я надеюсь, что эти цифры еще не окончательные и мне удастся выжать из своего процессора еще что нибудь):
1200 MHz: 1100 mV (-75 mV)
1100 MHz: 1050 mV (-75 mV)
1000 MHz: 1000 mV (-88 mV)
900 MHz: 950 mV (-100 mV)
800 MHz: 900 mV (-100 mV)
700 MHz: 900 mV (-75 mV)
600 MHz: 900 mV (-63 mV)
500 MHz: 900 mV (-38 mV)
400 MHz: 900 mV (-25 mV)
300 MHz: 875 mV (-25 mV)
200 MHz: 850 mV (-50 mV)
Как видите, я не привел значения напряжения для частот 1300 и 1400 МГц, поскольку максимальная частота процессора у меня ограничена до 1200 МГц и эти режимы просто не используются. В совокупности, благодаря UC и UV, я снизил потребление тока при максимальной нагрузке на 175 mV, что составляет почти 14%.
Буду очень признателен участникам форума, которые поделятся своими достижениями в области UV.
Графический процессор (GPU) также подвержен возможности UC и UV, однако в виду своей специфичности этот процесс происходит немного по другому. Все действия с частотами и напряжением графического процессора лучше производить из под STweaks, поскольку в нем предоставлен для этого исчерпывающий функционал. GPU в отличие от CPU имеет только 4 режима (или шага) работы, которые задействуются по мере возрастания нагрузки на GPU, но это происходит нелинейно и этим процессом можно очень гибко управлять с помощью STweaks. На вкладке GPU можно найти поле GPUFREQ, в котором мы можем выбрать значения частот для каждого из 5 режимов (5-й шаг с частотой 533 МГц добавляется ядром Siyah) работы графического процессора. Тут также можно поиграться со значениями и ограничить максимальную частоту, однако из своей практики могу сказать, что управление частотой GPU устроено таким образом, что почти во всех режимах, кроме более менее тяжелых 3D игр, частота графического процессора не поднимается выше второго шага (Step 2). Чуть ниже, в поле GPU VOLTAGE LEVELS можно изменить напряжение для каждого шага. Поиск минимальных значений напряжения ничем не отличается от аналогичного процесса с CPU.
Ниже приведены стандартные значения частот и напряжений для GPU:
160 MHz: 875 mV
266 MHz: 900 mV
350 MHz: 950 mV
440 MHz: 1025 mV
А вот мои настройки:
160 MHz: 800 mV (-75 mV)
266 MHz: 825 mV (-75 mV)
333 MHz: 900 mV
400 MHz: 925 mV
440 MHz: 950 mV (-75 mV)
Пару слов хотелось бы сказать о ядре под названием
Phenomenal. Возможно на сегодняшний день это наиболее энергоэффективное ядро, поскольку предлагает уже готовые решения по снижению напряжения многих компонентов смартфона, однако из-за черезчур агрессивных настроек UV оно может заработать стабильно не у всех. В частности у меня. Ядро предлагается в трех модификациях без возможности изменения каких либо настроек или параметров: Normal (минимальный UV), Medium (средний UV) и Extreme (максимальный UV). Я не смог заставить стабильно работать даже версию Normal. Однако это не значит, что ядро является плохим или будет работать нестабильно у всех. В любом случае попробовать всегда стоит (у вас всегда будет возможность вернуться на Siyah :)). Справедливости ради можно отметить, что данным ядром пользуется ув.
indigo88 - рекордсмен по продолжительности работы смартфона от батареи. ;) )