ßàØÃÂâÕàë áÕÓÞÔÃÂï - Xakep Online
ßàØÃÂâÕàë áÕÓÞÔÃÂï - Xakep Online
ßàØÃÂâÕàë áÕÓÞÔÃÂï - Xakep Online
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
ХАКЕР 04 /171/ 2013 Операция на сердце 45ОПТИМИЗАЦИИЗачастую основной целью сборки кастомного ядра становитсяоптимизация производительности. Обычно вендор мобильнойтехники старается сохранить баланс между производительностьюи стабильностью работы, поэтому даже хорошие техникиоптимизации, способные существенно поднять скорость работыдевайса, могут быть отвергнуты производителем только на основаниитого, что после их применения некоторые приложенияначали падать каждый десятый запуск. Само собой, энтузиастовтакие мелочи не смущают, и многие из них готовы применитьк ядру собственной сборки любые опции компилятора, алгоритмыэнергосбережения и задрать частоту процессора настольковысоко, насколько только выдерживает девайс. Среди всех оптимизационныхтехник наиболее распространены четыре:1. Сборка с помощью компилятора Linaro GCC с агрессивнымиопциями оптимизации. Писк сезона, используетсяпочти во всех ядрах. Особую популярностьэтот метод получил после того, как организация Linaroс помощью каких-то непонятных синтетических тестовпродемонстрировала 400%-й (!) прирост производительностиAndroid, собранного с помощью своего компилятора.В реальных условиях эффективность LinaroGCC несколько ниже, но польза от него все же ощутима,так как он реально подгоняет код под особенности архитектурыARMv7 и, если судить по личному опыту, не приноситникаких проблем в стабильность работы ни ядра,ни приложений.2. Расширение возможностей управления частотой и вольтажомцентрального и графического процессоров, а такжеиспользование более эффективного для планшетови смартфонов алгоритма управления энергосбережением.Используется во всех кастомных ядрах и ядрах большинствасерьезных кастомных прошивок. Подробнее этуособенность мы рассмотрим в следующем разделе.3. Активация более эффективных внутренних механизмов,появившихся в последних ядрах Linux. Сюда можно отнестиSLQB аллокатор памяти, который, по мнениюнекоторых разработчиков, может быть более эффективным,чем SLUB, однако никаких экспериментальныхподтверждений этому нет. Такой аллокатор используетсяв ядре GLaDOS для Nexus 7.4. Многие разработчики любят изменять стандартный алгоритмконтроля насыщения TCP (TCP Congrestion control),который регулирует размер TCP-окна на основе множествапараметров, чтобы сделать поток пакетов болееровным и достичь наивысшей скорости передачи данных.Начиная с версии 2.6.19, ядро Linux по умолчаниюиспользует эффективный алгоритм CUBIC, который такжеобычно применяется и в стандартных ядрах Android.Проблема только в том, что CUBIC эффективен в проводныхсетях с высокой скоростью передачи данных, тогдакак для 3G- и Wi-Fi-сетей гораздо лучшим выборомбудет алгоритм Westwood+. Именно этот алгоритм используетсяв ядрах Leankernel для Galaxy Nexus и faux123для Nexus 7, а franko.Kernel для Galaxy S II и Galaxy Nexusтак и вообще включает в себя весь набор доступныхалгоритмов. Просмотреть их список и выбрать нужныйможно с помощью следующих команд:sysctl net.ipv4.tcp_available_congestion_controlsysctl -w net.ipv4.tcp_congestion_control=westwoodЕще один тип оптимизации: изменение стандартногопланировщика ввода-вывода. Ситуация на этом полееще более интересная, так как вместо того, чтобы разобратьсяв принципах работы планировщиков, некоторыеРегулируем вольтажЭнтузиасты готовы применить любыеопции компилятора и задрать частотупроцессора до предела своего девайсаРазгоняем графический процессорсборщики ядер просто читают в Сети документы по I/Oпланировщикамдля Linux и делают выводы. Среди пользователейтакой подход распространен еще более сильно.На самом деле почти все самые производительные и умныеLinux-планировщики совершенно не подходят для Android:они рассчитаны на применение с механическими хранилищамиданных, в которых скорость доступа к данным разнитсяв зависимости от положения головки. Планировщик используетразные схемы объединения запросов в зависимостиот физического положения данных, поэтому запросы к данным,которые располагаются близкок текущему положению головки,будут получать больший приоритет.Это совершенно нелогично в случаес твердотельной памятью, котораягарантирует одинаковую скоростьдоступа ко всем ячейкам. Продвинутыепланировщики принесутна смартфоне больше вреда, чемпользы, а лучший результат покажут самые топорные и примитивные.В Linux есть три подобных планировщика:• Noop (No operation) — так называемый не-планировщик.Простая FIFO очередь запросов, первый запрос будет обработанпервым, второй вторым и так далее. Хорошо подходитдля твердотельной памяти и позволяет справедливо распределитьприоритеты приложений на доступ к накопителю.Дополнительный плюс: низкая нагрузка на процессор в силуну очень простого принципа работы. Минус: никакого учетаспецифики работы девайса, из-за чего могут возникнутьпровалы производительности.• SIO (Simple I/O) — аналог планировщика Deadlineбез учета близости секторов друг к другу, то есть разработанныйспециально для твердотельной памяти. Двеглавные изюминки: приоритет операций чтения над операциямизаписи и группировка операций по процессамс выделением каждому процессу кванта времени на выполнениеопераций. В смартфонах, где важна скоростьработы текущего приложения и преобладание операцийчтения над записью, показывает очень хорошую производительность.Доступен в Leankernel, ядре Matr1xдля Nexus 4 и SiyahKernel.УМНЫЙРЕГУЛИРОВЩИКВ SoC’ах OMAP35XX,используемых, например,в Galaxy S II и GalaxyNexus, есть функцияSmartReflex, котораявыполняет роль умнойсистемы регулировкивольтажа при изменениинагрузки на процессор.По сути, она избавляетот необходимости тонкоготюнинга вольтажапользователем.