Наверх
9 комментариев 14/09/2012

Keddr-O-lab #6.2: ядро ОС Android (Governor)

Всем привет, с вами вторая часть небольшого подцикла статей рубрики Keddr-O-lab, рассказывающих о ядре и его элементах, подверженных настройке. Это тяжелая для восприятия тема (как минимум из-за отсутствия какой-либо графической информации) и, возможно, вам придется несколько раз перечитывать данные, прежде чем принять то или иное решение. Тем не менее, результат окупает себя с лихвой. Я, к сожалению, так и не смог определить оптимальные значения для себя – сказалась как и лень тратить так много времени, так и частая смена устройств, потому я оставил настройку оптимальных значений на откуп сторонним разработчикам, которые пишут ядра.

Если мы посетим любой онлайн-переводчик, то на слово “Governor” получим такие ответы как «управляющий», «хозяин», «начальник» и иже с ними. К сожалению, все они лишь косвенно отражают удобоваримый русский вариант названия темы нашего сегодняшнего разговора, потому лично я предпочитаю использовать англицизм – «говернер» (так и примем за отправную точку).

Говернер – один из важнейших элементов ядра, отвечающий за то, как, когда и при каких условиях процессор будет повышать или понижать частоту процессора. Его тип и настройки напрямую влияют на энергопотребление и производительность вашего смартфона.

Существует несколько основных, используемых по умолчанию и имеющихся в наличии если не в каждом, то почти во всех ядрах (в том числе и в «родных), часть из которых может выручить при тех или иных условиях, но, тем не менее, для обычного ежедневного использования не подходят ни при каких раскладах – это “Powersave” и “Performance”, потому про них я скажу лишь пару слов (чуть позднее).

Как узнать и изменить используемый говернер?

Для выполнения тех или иных действий вам потребуются root-доступ и любая программа, позволяющая управлять ядром. Лично я предпочитаю специализированные под отдельно взятое ядро, нежели унифицированные программы. Вот небольшой список софта, которым вы можете воспользоваться:

1)      SetCPU for Root  Users

2)      No-Frills CPU Control

3)      CPU Tuner

4)      System Tuner Pro

5)      Tegrak Overclock

6)      Android Terminal Emulator

Специализированные программы нет смысла перечислять, так как они все, как правило, указываются в теме с ядром. Помимо прочего, вы можете править вручную системные файлы (или прибегать к интерфейсу терминала).

Откуда достать кастомное ядро?

Собственно, как и все остальное – с профильных порталов-форумов xda-developers.comrootzwiki.com и modaco.com в ветках, посвященных вашему устройству.

Говернер

Итак, все «управляторы» сильно отличаются друг от друга (в том числе список доступных настроек и принцип работы). К стандартным относятся Ondemand, Powersave, Userspace, Conservative, Performance, Interactive, из них реально используются в нынешнее время лишь три (а в Jelly Bean так и вообще – два): Ondemand, Interactive и Conservative.

Для начала немного об «отмерших». Powersave, как несложно догадаться из названия, призван сохранять энергию при любых условиях, ввиду чего он всегда, постоянно держит рабочую частоту процессора на минимально допустимой планке – это может быть полезно если у вас осталось крайне мало заряда, однако в целом неприменимо в обычной жизни. Лаги вам обеспечены при выполнении любых задач.

Performance же, с другой стороны, работает по прямо противоположной схеме – гонит частоту процессора до максимально допустимого значения и не опускает ни при каких раскладах. Я вообще не вижу ему сферы применения, кроме как в бенчмарках.

Userspace позволяет вам самим выбрать все условия и принцип работы, однако на практике тоже является «мертвым грузом» и лишним пунктом в списке говернеров.

Теперь об актуальных говернерах. В кастомных ядрах вы также можете встретить их ответвления, имеющие на окончании букву «Х», например Ondemandx. Они, как правило, ничем не отличаются от стандартных, разве что имеют специальный отдельный профиль для «сна» устройства (может еще немного сохранить ваш драгоценный заряд батарейки).

С выходом Android 4.1.1 Jelly Bean за основу выбран Interactive – по умолчанию он обеспечивает приемлемое время работы и хорошую отзывчивость аппарата вкупе со скоростью. Работает он по следующему принципу: при выключенном дисплее (в режиме сна) частота опускается до минимально допустимой планки, при выходе из сна говернер определяет нагрузку и поднимает рабочую частоту в зависимости от этой самой нагрузки (и потом поддерживает ее на этом уровне почти всегда до следующего «сна»).

В «продвинутых» программах вы можете настроить отдельно и условия работы оного, однако это, как правило, не требуется – они уже поправлены программистом, написавшим и скомпилировавшим ядро. Вот их названия и назначение:

hispeed_freq – планка, до которой говернер будет поднимать частоту при определении высокой нагрузки;
go_hispeed_load – переход в еще более высокоскоростной при нахождении на той или иной нагрузочной планке (или же сверх нее);
min_sample_time – минимально допустимое время для снижения частоты при отсутствии какой-либо нагрузки;
timer_rate – показатель, используемый для повышения частоты (чем меньше, тем выше производительность и хуже энергоэффективность).

Собственно, Interactive – оптимальный вариант в реалиях Android 4.1.1  ввиду внесенных в нее изменений (как и в показатели самого говернера).

Ondemand же был основным для старших версий ОС Android. Увы, он некорректно работает процессорами семейства Exynos, количество ядер которых превышает 2, потому был сменен на «доделанную» его версию PegasusQ, и тем не менее его не стоит сбрасывать со счетов.

На данный момент это также сбалансированное решение (с большим упором на энергоэффективность, нежели производительность). Он работает по следующему принципу – при обнаружении продолжительной нагрузки процессор достаточно неохотно поднимает частотную планку на минимально необходимое количество, дабы удовлетворить пользователя отсутствием лагов (то есть если нагрузка прогрессирует, то время от времени и достаточно регулярно будут встречаться подтормаживания, большие или меньшие) и гораздо быстрее снижает ее (определяется показателем в прописываемых данных). Кстати, о них:

sampling_rate – Измеряется в uS и отвечает за частоту обращения ядра к нагрузке на процессор для принятия решения, что делать с частотой. Более высокое значение означает меньшее кол-во обращений;
up_threshold – Измеряется в процентах (от 1 до 100), и когда процессор достигает заданного процента, говернер повысит частоту. Более высокие значения означают меньшую отзывчивость и меньшие значения наоборот, в ущерб батарейке;
powersave_bias – По умолчанию значение равно 0. Установка более высокого значения “отклонит” говернер на меньшие “ступеньки” между сменой частот. Используйте данный параметр если хотите, чтобы процессор затрачивал меньше времени на высоких частотах (однако лучше будет просто понизить максимальную частоту процессора, нежели использовать данный параметр для меньшего энергопотребления);
sampling_down_factor – Определяет, как часто процессор должен находится на повышенной частоте, когда действительно имеет какую-либо нагрузку. Стандартная задача – быстро понижать частоту. Если установить данный параметр на 1, то ничего не изменится, если только это не нестандартный ондеманд; число же выше 1 начинает работать как множитель для интервала обновления нагрузки на процессор при работе оного на максимально доступной частоте. Данное значение увеличивает производительность, позволяя процессору дольше находится на максимальной частоте при реальной нагрузке на него, нежели понижая частоту при небольшом спадении нагрузки (допустим, смена динамичной сцены на спокойную в игре);
down_differential – не стоит его трогать.

Для того чтобы направить ондеманд на энергосбережение, надо выставить высокие значения в up-threshold- и sampling-rate- пунтах. В данном раскладе, процессор будет повышать частоту реже, как и проверять надобность в данном действии. Для повышения же производительности  нужно установить низкие значения up-treshold и понизить цифру в sampling-rate.

Увы, я не могу подсказать вам каких-то оптимальных показателей или как-то проиллюстрировать сопутствующий текст – это все сугубо индивидуально и требует приличного времени для выявления значений, подходящих именно вам.

Было тяжело? Это лишь верхушка айсберга, пусть и большая его часть (в природе все наоборот) – в следующем выпуске мы поговорим про так называемые I/O shedulers, то есть “планировщики”.

Stay tuned for our next episode!

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

9 комментариев

сначала новые
по рейтингу сначала новые по хронологии
1

Подскажите пожалуйста, хочу прошить MIUI на свой Galaxy Nexus, имеет ли смысл менять ядро(спрашиваю, т.к. давно уже прошивал MIUI и появились некоторые лаги, пришлось вернутся на сток)

Автор2

@Артём, для начала нужно найти ядро, которое работает с MIUI. вообще, лаги там и сейчас присутствуют, после смены версии на 4.1.1 появились

3

А для ядра fm какая специализированная программа?

Автор4

@lizergin, вроде бы никакая, пользуйтесь универсальными вариантами

5
Андрей

Использую SmartassV2, HD2, максимальные частоты ЦПУ, т.е. всегда, когда дисплей включен, получаю максимальную производительность, но при этом суммарное время работы изменилось лишь незначительно.

6

@Андрей, очень сильно влияет я пробовал такое делать на своем , 2 ядра на частоте 1,2 гггрц жрут батарейку как голодные крысы так что лучше устанавливать самый экономный режим например conservative или odemand еще помогает вольтаж процессора уменьшить , но тут уже нужно кастомное ядро , я вот не понимаю этих людей которые разгоняют процессоры в мобилке до максимума при этом сидят все время возле розетки

Автор7

@PAKETA, андерволтинг имеет смысл лишь от 4+ ядер, подробнее напишу позднее

8

@BilberryMuffin, не не не , имеет смысл всегда , почитаю потом ваше подробно

9

@PAKETA, для сравнения, 2 кнопки что горят внизу тратят 3000 mv
А ядра максимум на 1.2ггц около 1300 mv
так что если и уменьшить на -50mv разницы практически ни какой не будет
Батарейка продержится на пару мин дольше

Добавить комментарий

Такой e-mail уже зарегистрирован. Воспользуйтесь формой входа или введите другой.

Вы ввели некорректные логин или пароль

Извините, для комментирования необходимо войти.

Modal box

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: