Справка по твикам

Этот документ доступен, также, из программы в качестве контекстной справки. Для получения справки по отдельным настройкам, нажмите и удерживайте пояснение к настройке, затем, в контекстном меню выберите "Справка то твикам".


Уровни освобождения памяти для OOM Killer

В системе Android существует спецальный механизм, следящий за свободной оперативной памятью. Это так называемый OOM Killer (Out of memory killer). Работает данный механизм следующим образом: когда в системе остается оперативной памяти меньше, чем задано в этом параметре, киллер начинает «убивать» процессы. Но «убивает» он не все процессы подряд. Если Вы не включили параметр «Циничный киллер», то, для выявления «лишних» процессов, будет использоваться особый эвристический анализ.

Существует 6 классов процессов, для каждого из которых имеется свой порог свободной памяти:

  • Foreground applications - приложение, находящееся в данный момент на экране; в этот список входят, также, система и телефон;
  • Visible applications - приложения, видимые пользователю, но не находящиеся в данный момент на переднем плане, например, вследствие прозрачности;
  • Secondary Server - сервисы, работающие в фоне;
  • Hidden applications - приложения, которые уже не видны, но еще работающие в фоне;
  • Content Providers - это части некоторых приложений, которые работаю в контексте других приложений, предоставляя им какое-либо содержимое (например Календарь или Контакты);
  • Empty Applications - приложения, еще находящиеся в памяти, но уже ничего не делающие. Поскольку память, содержащая некую информацию, расходует энергии не больше, чем пустая память, Android считает, что нет смысла выгружать отработавшие приложения. К тому же, пользователь может захотеть вернуться к этим приложениям, тогда их не придется снова загружать. Именно эти приложения - первые кандидаты на "убиение" в случае нехватки памяти.

Если увеличить эти значения, то система станет более "отзывчивой", т.е. будет быстрее реагировать на нажатия, но, при этом, пострадает многозадачность. И наоборот: если уменьшить эти значения, то большее количество приложений смогут работать параллельно, но система начнет "тупить".

Подробнее...

Циничный киллер

По умолчанию, системный диспетчер задач, при нехватке оперативной памяти, использует особый эвристический анализ, основанный на 6 уровнях свободной памяти для различных классов процессов.

При включенном параметре «Циничный киллер» диспетчер задач, вместо этого, будет удалять из памяти именно тот процесс, который заявляет о нехватке памяти.

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

A-GPS сервер

A-GPS (англ. Assisted GPS) — технология, ускоряющая «холодный старт» GPS-приёмника. Ускорение происходит за счет предоставления необходимой информации через альтернативные каналы связи. Часто используется в сотовых телефонах, содержащих приемник GPS.

Для алгоритмов A-GPS необходим канал связи с удаленным сервером, который предоставляет информацию для приемника. Для мобильных устройств этим каналом чаще всего является сотовая связь. Для передачи информации, устройство должно находиться в зоне действия базовой станции (БС) оператора сотовой связи и иметь доступ в интернет.

(использован материал из свободной энциклопедии Википедии)

Существует несколько публичных A-GPS серверов различных производителей сотовых телефонов.

NTP серверы для A-GPS

Для нормального использования системы A-GPS необходима сихронизация времени с NTP серверами. Скорость и точность синхронизации существенно влияет на время «холодного старта» GPS.

Естественно, чем ближе расположен NTP сервер к местоположению приемника, тем быстрее, и точнее будет синхронизация и, как следствие, быстрее холодный старт.

DNS серверы

Новые версии Google Market и Google Play используют URL на основе доменых имен с большим уровнем вложенности, такие как, например v11.lscache3.c.android.clients.google.com. Преобразование таких доменных имен силами DNS серверов операторов сотовой связи занимает много времени и приводит к существенным задержкам при запуске приложения Google Play (Google Market).

Для решения этой проблемы можно использовать в качестве DNS серверов Вашего интернет-соединения DNS серверы самого Google. При этом, если скорость работы Google Play при подключении через WiFi Вас устраивает, а при использовании мобильной сети имеются проблемы, Вы можете использовать альтернативные DNS серверы только для WiFi сети.

Для реализации данной функции mcTweaker использует фоновую службу, которая следит за изменением состояния сетевого подключения и, в зависимости от типа подключенной сети, устанавливает выбранные Вами DNS серверы.

Синхронизация времени

Данная установка не имеет никакого отношения к установке NTP-серверов для системы A-GPS.

Если системные часы на Вашем устройстве показывают неточное время, Вы можете использовать NTP-сервер для разовой синхронизации времени.

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

Для нормальной работы функции синхронизации времени необходимо выбрать ближайший к Вам NTP-сервер.

Управление процессором

Данный набор опций позволяет найти золотую середину между тем, какое вляние будет оказывать процессор на быстродействие и энергопотребление.

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

В случае необходимости менять параметры работы процессора в зависимости от состояния экрана, Вам необходимо выбрать дополнительные частоты и режим для спящего режима, и включить опцию «Активное управление процессором». В данном случае, программа mcTweaker запустит фоновую службу, которая будет реагировать на включение или выключение экрана, и активировать те или иные параметры процессора.

Режимы управления частотой процессора

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

Основные режимы, поддерживаемые большинством ядер, такие:

  • Powersave. Частота всегда равна минимальной. Можно использовать для экономии заряда батареи при выключенном экране.
  • Performance. Частота всегда равна максимальной. Используют для тестов, получения устойчивых значений в benchmarks, или во время зарядки и подключения к компу. Это более быстрый режим чем закрепление минимальной частоты равной максимальной (в ondemand например), так как не происходит частых запросов на её изменение.
  • Ondemand. Присутствует в большинстве ядер по умолчанию. Через заданные промежутки времени (sampling_rate: ~ 10-20 миллисекунд) проверяет загрузку процессора и при достижении определенного порога (up_threshold ~80%) повышает частоту до максимума пока загрузка процессора не снизится. Не содержит профилей для выключенного экрана, поэтому его часто используют совместно с powersave.
  • Conservative. Подобный предыдущему ondemand но изменение частоты вверх и вниз происходит не скачком а ступенчато. По сравнению с ondemand медленнее отклик, но больше экономии батареи.
  • MinMax. Адаптация «conservative» и один из самых быстрых, но батарею держит предположительно хуже чем SmartassV2. Старается минимизировать количество изменений частоты через ограничение частот – только минимум или максимум. Частота снижается и повышается в зависимости от текущей нагрузки и пороговых значений.
  • Interactive. Как и предыдущие, выставляет частоту в зависимости от нагрузки, но проверка загрузки наступает не через равные промежутки времени, а в случае выхода из простоя «idle» (+ таймер проверки через 1-2 такта после выхода из простоя). Если проц загружен на 100% по выходу из простоя и по таймеру, то частота повышается до максимума. Если нет загрузки для повышения до максимума, то диспетчер проверяет как изменилась загрузка с последнего изменения частоты за промежуток времени min_sample_time, выбирая верхнее значение с последнего выхода из простоя для определения новой частоты. Один параметр настройки - min_sample_time, минимальное количество времени на заданной частоте перед её снижением, по умолчанию 50-80 миллисекунд. Режим Interactive быстрее чем Ondemand, и дает больший отклик при ничтожном увеличении потребления.
  • InteractiveX. Улучшенный Interactive – добавлен профиль низкой частоты при выключенном экране, и также настроен для выхода из этого режима. Меньше расходует батарею чем Interactive.
  • Smartass / SmartassV2. Коротко – основан на Interactive но лучше. Полностью переписан interactive, внесены модификации и профили. Вторая версия очень популярна. Скорость рядом с MinMax, трудно сказать кто быстрее. Больше времени проводит на низких частотах для экономии батареи. Встроен профиль сна – частота минимальна при выключенном экране.
  • SavagedZen. Основан на Smartass. Хорошо сбалансирован по скорости и расходу заряда. Адаптирован к ядру 2.6.29 и процессору 1 GHz.
  • Scary. Основан на исходниках conservative с добавлением некоторых особенностей smartass. Не очень ясно зачем, так как у conservative медленное изменение частоты, а у smartass одно из самых быстрых.


I/O scheduler (планировщик ввода/вывода)

Вкратце... 
Задача планировщика оптимальным образом обеспечить доступ процесса к запрашиваемому дисковому устройству. Не смотря на всю кажущуюся простоту вопроса, это сложная и противоречивая задача. Работа с дисками относится к очень медленным операциям, имеющая к тому же долгое время поиска нужной информации, а процессов терпеливо ожидающих своей очереди может быть очень много. Поэтому алгоритм I/O scheduler должен с одной стороны уметь уменьшать время поиска информации на диске, ведь частое переключение между задачами приведет к тому, что головка диска будет большую часть времени будет просто переходить на разные позиции. Также I/O scheduler должен уметь выдавать информацию в соответствии с приоритетом и гарантировать получение данных приложению за определенное время и в нужном количестве.
Таким образом, в простой форме: Ядро контролирует доступ к диску, использованием I / O Scheduler. 

Deadline

Deadline I/O Scheduler хранит отсортированную очередь, и вводит две дополнительные очереди: FIFO очередь на чтение и FIFO очередь на запись. Записи в каждой из этих очередей отсортированы по времени поступления (фактически, первый вошел -
первый вышел). Каждому запросу в очереди FIFO назначено время окончания. Для очереди запросов чтения - это 500 миллисекунд. Для очереди запросов записи - это пять секунд. При поступлении нового I/O запроса, он вставляется-сортируется в стандартную очередь и помещается в конец соответствующей (на чтение или запись) FIFO очереди.
Как правило, к жесткому диску посылаются запросы ввода/вывода с головы стандартной отсортированной очереди. Это максимизирует общую пропускную способность при минимизации операций поиска и установки головок на диске, так как нормальная очередь сортируется по номеру блока (как и с Linus Elevator). Когда у записи вначале списка одной из дополнительных FIFO очередей истечет назначенное время, I/O scheduler останавливает обработку I/O запросов из стандартной очереди, и начинает обслуживание запросов из этой FIFO очереди. I/O scheduler проверяет и обрабатывает запросы только с головы очереди, где находятся старейшие запросы.
Таким образом, Deadline I/O Scheduler поддерживает эффективную общую пропускную способность без голодания какого-либо одного запроса недопустимо длительное время. Проблема writes-starving-reads сводится к минимуму.

NOOP

Самый простой планировщик, обладает минимальными возможностями и выполняет только простые операции объединения и сортировки, но зато и потребляет минимум ресурсов. Он представляет собой очередь FIFO (First In, First Out) то есть он, просто выставляет запросы в очередь в том порядке, в котором они пришли. Предназначен NOOP в основном для работы с не дисковыми устройствами (ОЗУ или флэшдиск) или со пециализированными решениями которые уже имеют свой собственный планировщик I/O. В этом случае его простота имеет преимущество перед остальными алгоритмами.

CFQ (Completely Fair Queuing) 

В CFQ каждому процессу присваивается собственная очередь, и каждой очереди присваивается квант времени (timeslice). Планировщик ввода/вывода по кругу обходит каждую очередь и обслуживает запросы из очереди до тех пор, пока не будет исчерпан лимит времени (timeslice) или не останется запросов в этой очереди. В последнем случае CFQ планировщик будет ждать, по умолчанию 10-мс, нового запроса из очереди. Если ожидание было напрасным, то планировщик переходит к следующей очереди.
В рамках каждой очереди процесса, синхронизированные запросы (как, например, читающие) имеют приоритет над несинхронизированными запросами. Таким  образом, CFQ способствует чтению и предотвращает проблему writes-starving-reads.
CFQ планировщик хорошо подходит для большинства задач.
В ядрах 2.6.32 и новее можно немного повысить производительность на сервере путём отключения low latency , включенного по умолчанию, которое снижает пиковую производительность, но повышает отзывчивость, нужную только для десктопа.

Anticipatory 

Проблема предыдущих планировщиков ввода/вывода вновь вытекает из зависимости: каждый новый запрос на чтение выдается только тогда, когда предыдущий будет возвращен, но к тому времени, когда приложение получает прочитанные данные и посылает следующий запрос на чтение, I/O планировщик уже начал обслуживание других запросов. В этом случае планировщик ввода/вывода в течении некоторого времени мог бы подождать поступление следующего запроса на чтение. Именно так и работает Anticipatory I/O Scheduler. Он основан на Deadline I/O Scheduler с добавлением механизма ожидания, до шести миллисекунд, следующего чтения. Если 6-ть миллисекунд истекли, но запроса на чтение не поступило, планировщик возвращается к работе, которую выполнял до этого (например, обслуживание стандартной отсортированной очереди).

BFQ (Budget Fair Queueing) 

Планировщик BFQ создан как замена CFQ (и основан на его коде), основная мысль – более честное разделение I/O между процессами.
Работает планировщик отлично – тормоза GUI во время активной работы с диском фоновых процессов (например, загрузки виртуальной машины или обновления дерева portage) просто как рукой сняло.

SIO 

Цитата(iliz @ 11.01.2012, 15:17) *

SIO - это честный deadline планировщик. на текущий момент (по мнению автора ThunderBolt!) - это лучший планировщик (Однако в FuguMod 1980 его нет, не знаю как в других ядрах).

Более подробно: SIO - это простой планировщик ввода/вывода, в котором разработчики попытались внедрить в Noop систему обнаружения нехватки/истощения ресурсов. Следовательно, длительные IO транзакции будут получать процессорное время только после выполнения более быстрых транзакций (т е приоритет отдается быстрым транзакциям), что позволяет достичь гарантированной гладкости работы. Он не имеет накладных расходов и приоритизации транзакций, т е все транзакции (на чтение или на запись) равны. 

VM Heapsize

Для обычных пошивок рекомендуемое значение - 32М. Для прошивок с HTC Sense 3.0 и выше на слабых аппаратах - 24М.

Место установки приложений

Не все приложения поддерживают установку на карту памяти. Зачастую это не возможно сделать, если разработчик не предусмотрел такой возможности. С помощью этой настройки Вы можете изменять место установки приложений по умолчанию. Например, Вы можете устанавливать приложения на карту памяти даже, если разработчик не предусмотрел этого. Этот параметр имеет 3 возможных значения:

  • Авто - обычое поведение; приложения устанавливаются в то место, которое предусмотрел разработчик;
  • Внутренняя память - все приложения будут устанавливаться во внутреннее хранилище;
  • Карта памяти - все приложения будут устанавливаться на карту памяти, даже, если разработчик не предусмотрел этого.

Наибольшую ценность представляет собой последний вариант. Если Вы не можете перенести какое-либо приложение на карту памяти, то Вам необходимо выполнить следующие действия:

  1. Если приложение уже установлено в основную память - удалить его.
  2. С помощью программы mcTweaker включить принудительную установку на карту памяти.
  3. Установить приложение обычным способом.
  4. Если Вы не планируете устанавливать другие приложения на карту памяти - верните данный параметр в положение "Авто".

Альтернативный способ установки параметров

По опыту некоторых пользователей предыдущих версий программы mcTweaker, некоторые прошивки не позволяют "безболезненно" редактировать файл /system/build.prop. Для исправления этого недостатка введен альтернативный способ изменения некоторых параметров системы.

Для его реализации используется команда setprop, помещенная в скрипт автозапуска в директории init.d.

Например, для установки параметра dalvik.vm.execution-mode (включение/выключение JIT-компиляции), вместо реактирования соответствующей строки в файле build.prop, создается скрипт с командой "setprop dalvik.vm.execution-mode int:jit".

Значок в панели уведомлений

Как и любое другое приложение Android, mcTweaker может быть выгружен системой в случае нехватки оперативной памяти (см. Уровни освобождения памяти для OOM Killer). В этом случае могут быть пропущены некоторые события и программа не выполнит необходимые действия. Если, например, после выгрузки mcTweaker, Вы выключите экран, то программа не сможет переключить режим работы процессора.

Тем не менее, Android SDK позволяет повысить приоритет службы mcTweaker и перевести ее из категории Secondary Server в категорию Foreground applications, тем самым повысив "живучесть" программы. Для реализации этой функции SDK требует наличия значка в панели уведомления. Стоит отметить, также, что повышение приоритета службы вовсе не означает, что она начнет потреблять больше процессорного времени и энергии батареи.

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


Comments