Реализация режима энергосбережения DEEP IDLE в ядре Linux

    Разработчик, который зарегистрирован на форуме xda-developers.com под ником Ezekeel, попытался разобраться, почему его Nexus S слишком быстро съедает заряд аккумулятора в режиме ожидания. В техническом руководстве устройства указано, что устройство поддерживает режимы работы NORMAL, IDLE, DEEP IDLE, STOP, DEEP-STOP и SLEEP. Но беглое изучение ядра Linux показало, что в операционной системе имеется только поддержка IDLE. В этом режиме отключается лишь процессор, а остальные модули продолжают потреблять энергию. Ezekeel решил исправить этот недостаток.

    Повышенное энергопотребление — одна из основных проблем Android-устройств, поэтому некоторые пользователи вынуждены искать способы, как продлить жизнь аккумулятора. Один из вариантов — снизить частоту работы процессора. Но такой хак не очень эффективен: например, при снижении частоты с 1320 МГц до 880 МГц можно выиграть разве что лишний час.

    Расход аккумулятора Nexus S в режиме полёта с выключенным дисплеем при воспроизведении FLAC на тактовой частоте процессора 1320 МГц и 880 МГц, за десять часов.

    Реализация полноценного режима DEEP IDLE с отключением железа даёт совершенно иную картину. Ezekeel нашёл форк ядра Linux (Glitch), создатели которого пытались решить аналогичную задачу под Galaxy S, но не довели работу до конца. Ezekeel сделал необходимые модификации и всё заработало нормально. Тест нового ядра GLaDOS показали, что расход заряда аккумулятора снизился более, чем на 55%.


    Расход аккумулятора Nexus S в режиме полёта с выключенным дисплеем при воспроизведении FLAC на тактовой частоте процессора 1320 МГц и 880 МГц, в режиме IDLE и в режиме DEEP IDLE, за десять часов.



    Если улучшить ядро Linux таким способом, то отпадает также необходимость снижать частоту процессора, потому что это не даёт практически никакой экономии энергии.

    В репозитории на github можно изучить каждое исправление, которое было внесено в ядро для поддержки DEEP IDLE.

    Ezekeel отдельно сообщает, что из-за бага в приложении Google Talk с видеочатом модуль CAM активируется при загрузке. Из-за специфического порядка активации функции режима DEEP IDLE это приводит к нарушению последовательности, так что режим DEEP IDLE просто не работает, если на смартфоне установлена эта программа. Исправить это просто: нужно просто заменить приложение Google Talk на такое же, только без функции video-chat. Хотя у обеих программ номер версии 1.3, отличить их друг от друга можно по размеру приложения и наличию/отсутствию опции по настройке аппаратного обеспечения. Вариант без видеочата имеет размер 500 КБ, а с видеочатом — 740 КБ. После замены программы всё должно заработать нормально.

    Другие улучшения в ядре GLaDOS 1.2 описаны здесь.
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 67

      +1
      Есть ли похожие патчи для других моделей? Например на Optimus One как с этим вообще обстоит дело?
      И есть ли похожие системы на нетбуках/ноутбуках и модули ядра?
        0
        Для Optimus One есть ядро Goldenleaf специально заточенное под энергосбережение. У меня телефон с ним стал на день дольше работать.
        _http://forum.xda-developers.com/showthread.php?t=1227682
        +14
        Да чувак круче чем раз в год выключающие свет на час.

        С надеждой ждёт релиза для motorola defy
          0
          А что на defy моторола открыла загрузчик?
            +12
            Это как-то мешает мне ждать чего-то?
          0
          Интересно, можно ли это реализовать на HTC аппаратах?
            –3
            А у вас телефон с google-talk video-chat? Написано, что это баг гуглток.
              +2
              >> Но беглое изучение ядра Linux показало, что в операционной системе имеется только поддержка IDLE.

              Баг гуглток? Не, не видел…
              Про баг речь идет при уже пропатченном ядре, а человек интересуется возможен ли такой патч на НТС.
            –7
            очевидный бардак в разработке android kernel. Зато ядра каждые пол года. Подозреваю очевидную вещь — у руля фанатик. Как бы не было сложно синхронизироваться — каждые пол года новое ядро это зло! Если бы я руководил разработкой — раз год, раз или даже раз в два. Это экономия времени для вендоров типа самсунга… А значит более быстрые релизы свежих версий. Ничего такого феноменального в ядре каждые пол года не происходит, а если и происходит — бекпорт.
              +3
              android kernel? Пол года? По сути можно ядро хоть каждый день обновлять модули главное иметь, обновление ядра дает повышение качества работы и увеличение возможностей. Ради примера например со старыми ядрами десктопная ось запускается в 1.5 раза дольше.
                –2
                скорость запуска влияют инит скрипты. Зато перфоманс проседает заметно начиная с 28 версии. Особенно заметно в тройке. Еще про abi не забываем. В итоге профита ноль, а накладные расходы колосальны.
              –3
              У гугла порой не хватает жесткости руководства. Идут на поводу детским доводам девелоперов, молодая компания. Если бы я был Рубином я бы пол отдела разогнал за такие грабли на мобильном устройстве. Ну или лишил премий.
                +8
                Думаю, их цель — не сделать идеальную мобильную систему, а наводнить рынок по возможности дешёвыми устройствами под управлением Android.
                  +8
                  Вы вообще в код смотрели?
                  Там куча платформо-зависимых изменений, тут Google вообще не при делах, такими вещами должен заниматься _производитель_. Модуль, добавляющий режим DEEP IDLE сводится к добавлению следующих атрибутов в sysfs: enabled, idle_stats, reset_stats и version.
                  Интересует нас только первый пункт, остальное это отображение статистики по времени, которое было проведено в idle, сброс этой статистики и версия модуля соответственно.
                  А вот запись единицы в файл атрибута enabled (echo «1» > enabled) как раз и врубает наш deep idle, фактически просто выставляя значение переменной deepidle_enabled. Модуль экспортит функцию bool deepidle_is_enabled(void) для получения значения этого флага. В зависимости от значения этого флага при попытке перехода системы в idle при определённых условиях может быть активирована функция s5p_enter_didle(true), которая является абсолютно _аппаратно-специфичной_. Она уже порождает выполнение кучи низкоуровневого кода.

                  К чему вся эта басня? А к тому, что это именно производитель конкретного железа не озаботился о данной проблеме.
                    +3
                    И для тех, кому было интересно, можно ли этот патч адаптировать для смартфонов на других процессорах, поясню: нет, нельзя. Данный патч специфичен для SoC Samsung S5PV210. Это значит что данный патч будет работать не только на Nexus S, но и на любой другой железке, построенной на том же процессоре.
                      0
                      Строго говоря, есть высокая вероятность того, что у других процессоров есть аналогичные возможности, аналогичным образом не использующиеся и возможен аналогичный (но другой) патч для них.
                        0
                        А объясните нубу, пожалуйста — изменения в ядро они вносятся отдельно? Как вообще это происходит? Надо заново перепрошивать телефон?
                          0
                          Конкретно в данном случае, изменения внесены непосредственно в низкоуровневую часть ядра, которая всегда в него жёстко «вкомпиливается». Так что да, нужно перепрошивать телефон.
                          В случаях, когда нужную функциональность удаётся добавить с помощью модуля ядра, при использовании рутованного телефона перепрошивка является не обязательной, можно просто подгрузить новый модуль с помощью insmod/modprobe.
                          0
                          Если еще помните, укажите revid'ы этих реальных функциональных изменений. Потому что попытка чтения commit log'а показывает, что 90% изменений — типично script-kiddies'овские штучки типа «newer glitch logo» да патчи каких-то левых для ядра скриптов.
                            +1
                            Смотрел я вот этот коммит: github.com/Ezekeel/GLaDOS-nexus-s/commit/0ad0e3261895844e9d7983c3332ec23b6d039978
                            Раскручивать изменения следует от файла drivers/misc/deep_idle.c, как раз там экспортятся sysfs атрибуты, через которые всё это включается. А далее смотрим кто использует функцию deepidle_is_enabled, думаю дальше разберётесь и всё сами увидите.
                          –3
                          вот только это устройство nexus s. И софтовая часть за гуглом. Самсунг им присылает хардварные ревизии, а они там уже извращаются.
                            +1
                            вот только это устройство nexus s. И софтовая часть за гуглом. Самсунг им присылает хардварные ревизии

                            Нет, нет и ещё раз нет.
                            1. S5PV210 — это application процессор, применяемый не только в Nexus S. Он может применяться ещё в миллионе различных железок, посему Nexus S в данном случае лишь частный случай.
                            2. Низкоуровневая софтовая часть за тем, кто точно знает как эта железка устроена. В данном случае это Samsung, что подтверждают копирайты в коде:
                            Copyright © Samsung Electronics Co. Ltd

                            3. Google ожидает получить _готовый_ BSP Задача Google в данном случае, сводится к допиливанию именно пользовательского функционала, но никак не кода для работы с железом.
                              –2
                              Спорить не буду, но копирайту там может быть потому что основанно на ядре к galaxy S?
                        +26
                        Вот они, плюсы открытого ПО — то какой-то австралийский врач, никогда не обучавшийся программированию, пишет планировщик для ядра, который уделывает по производительности существующие аналоги, то теперь вот неизвестный разработчик, о котором известен лишь ник на форуме, уменьшает энергопотребление андроида на 55%, чего не смогли добиться огромные корпорации Гугл и Самсунг.
                          +12
                          Ну так, они это планировали подать через полгода как адовую фичу, а тут такая подлянка.
                            +3
                            Да вообще не факт что хоть как-то планировали, скорее всего, никто просто совершенно не заморачивается на настоящей оптимизации системы с т.з. требований, предъявляемых к мобильным телефонам. Там много вопросов на самом деле.
                              0
                              Современным программистам некогда заниматься оптимизацией, а временами и незачем. От них требуют быстрее, выше, мощнее, глубже, и всё это в очень сжатые сроки. А железо позволяет не заморачиваться и писать неэффективный код.

                              ИМХО единственные программисты, которые что-то да знают о оптимизации — это embedded(тот самый, адский, с считаными килобайтами RAM и flash) и highload, где только наращиванием вычислительной мощи не обойдёшься.
                                0
                                Думаю, что скорее всего некогда. Это вопрос собственно не к программистам ведь, а к проект-менеджерам. На самом деле, с этой стороны подход Apple мне больше нравится — пусть немного, но лучше отлажено. Хотя косяки и у них конечно есть, просто не думаю что у них дело в чем-то простом оказывается.
                          –8
                          Тоесть то что гугл не осилил элементарное, причем просто даже не реализовал уже написанное, это по вашему плюсы опен соурса?
                            +17
                            В закрытых исходниках тупизны столько же, мы просто её не видим.
                              +2
                              Думаю даже больше, опасно же выкладывать если кто-то смотрит :)
                                +3
                                в закрытых исходниках тупака и быдлокода в среднем ощутимо больше, чем в открытых проектах. Там тупак и быдлокод хоть как-то фильтруют.
                              +1
                              Я думаю, тут всё упирается в то, что Android должен ровно работать на огромном количестве железа. А такие тонкие манипуляции с железом не всегда гладко работают.
                                +3
                                Интересно, речь про выигрыш в «самолетном режиме» (когда все радиожелезки выключены), а дает ли deep idle какой-то видимый выигрыш при стандартном режиме использования когда сотовая связь и интернет включены?
                                  +1
                                  Видимо, что-то может. И это что-то немалое.

                                  Обычный режим — это с активным радио, но без мультимедиа, так что выигрыш тоже должен быть.
                                  0
                                  А что вообще может выключится в смартфоне при проигрывании мультимедиа? А если это будет еще и обычный режим работы, с активной радио-частью?
                                    0
                                    Всё. распаковали из MP3 100мС звука, что заняло 30 мС процессорного времени. Передали в буфер звуковой карты. Следующие 70 мС вообще можем не включаться. Это если на пальцах,
                                    +1
                                    Надеюсь в Cyanogenmod внедрят эту киллер-фичу.
                                      +1
                                      Протестировал ли Ezekeel нормальную работу с телефонией, Wi-Fi и голубым зубом при входе и выходе в/из DEEP IDLE, или только музыку повоспроизводил?
                                      Как же хочется чуть более технических и чуть менее «журналистских» статей, если уж кто-то скомпилировал новость и 10500 страниц обсуждения на xda-developers…

                                      Лично знаю, что инженеры самсунга и htc всех корейских собак съели на энергопотреблении и его оптимизации. Значит либо есть какая-то серьезная причина этот режим не включать, либо это такой косяк, что ОЙ.
                                        0
                                        Судя по количеству багфиксов к этому патчу, а их уже 14 штук, разработчик тестирует это, и скорее всего не один.
                                          0
                                          Судя по количеству багфиксов, дело очевидно не столь простое, и ему, видимо, еще далеко до статуса production. Это я к коментариям наверху «почему сразу/до сих пор не сделали?»
                                          +2
                                          Причина… Ну, например, «мы выпустили новый смартфон в 2,5 раза блоее эффективным энергопотреблением!!!», а всего-то пропатчат ядро в паре строк
                                            +3
                                            Такое бывает только в сказках :)
                                            0
                                            То, что инженеры съели собак, еще не значит, что им хватает времени заниматься этим. Это раньше платформа не менялось годами, а новые модели выходили нечасто. Последние же 2 года идет гонка платформ, да и на каждой платформе успевают выпустить аппаратов не меньше, чем раньше. Плюс, возможно, действительно, прием «туз в рукаве» — к концу жизни платформы выпускают какой-нибудь новый аппарат на ней, с более оптимизированным софтом, и выкачивают таким образом еще немного денег из старого железа.

                                            Неспроста же практически всегда у кастомных прошивок энергопотребление ниже, чем у стандартных. У НТС вон, в стандартных прошивках было что-то (не помню что именно, то ли скрипт, то ли модуль ядра), запрещавший понижать частоту процессора. Убираешь его — сразу дольше работает, причем проблем никаких не возникает.

                                            Багфиксы там, с виду, не то чтобы фиксы, а скорее тюнинг-оптимизация, на уровне «а что если не просыпаться на этот сигнал, а на этот наоборот, просыпаться?». Да и автор решил похоже привлечь народ для массового тестирования.
                                            0
                                            Отличное ядро) сижу на нем) спасибо Ezekeel!
                                              +1
                                              Т.е. у вас Nexus S с патчами от Ezekeel? Тогда расскажите хоть насколько выросла автономность в реальных условиях. Сколько стал жить телефон?
                                                0
                                                дольше стал жить, на пол дня. при активном использовании держит 1.8 дня
                                                  0
                                                  А какой режим работы?
                                                  3g\edge, Wifi, игры, музыка, продолжительность звонков?

                                                  P.S. у меня Nexus One, на MIUI он живет 3 суток с постоянно включенным EDGE, +wifi около 30 минут в день. + 2 часа разговоров в день.
                                                    0
                                                    Синхронизация включена?
                                                      0
                                                      Да, конечно, синхронизация включена, есть 1 виджет погоды от yr.no на 7 дней. Почта приходит сразу.
                                                    0
                                                    А sleep of death наблюдается?
                                                      0
                                                      Всегда включен EDGE и синхронизация. 5 часов переписки в WhatsApp, Twitter, почта, 4 часа Wi-Fi.
                                                        0
                                                        не наблюдается, только если играться с UV.
                                                          0
                                                          У меня на стоковых значениях CM иногда наблюдается, особенно на smartassV2 и это крайне печально.
                                                            0
                                                            у меня ondemand работает.
                                                              0
                                                              Прошил GLaDoS, вроде как более отзывчиво стало, что удивительно. Потестируем время работы.
                                                                0
                                                                cfs или bfs?
                                                                  0
                                                                  cfs и был cfs.
                                                            0
                                                            Вот, небольшой тест
                                                            До разрыва это стоковое ядро CM7.1 nightly, после разрыва это glados. Действительно наклон немного меньше :) Из-за чего такой дроп — не знаю. И да, Wi-Fi был включен, не знаю почему он не отображается до разрыва.

                                                            i.imgur.com/4cdhT.jpg
                                                              0
                                                              что вы называете разрывом?
                                                                0
                                                                Ну там на графике посередине разрыв
                                                                  0
                                                                  отличное ядро, думаю)
                                                      0
                                                      Скажите, а как заменяется ядро на телефоне?
                                                      Есть ли туториалы по этому?
                                                      0
                                                      На Xperia x10i встречал кто патчик такой?
                                                        0
                                                        Хотя снимаю вопрос… уже стоит в телефоне нужный Google Talk
                                                        ifotki.info/9/95a11d47e1f0000d5d0072b50b614cec2e2f15103607007.jpg.html
                                                          0
                                                          Дело не в gtalk. Неправильный гтолк не даёт ядру войти в этот режим, но если этого режима нет, то правильный гтолк не поможет.
                                                            0
                                                            как тогда проверить есть этот режим или нет?

                                                      Only users with full accounts can post comments. Log in, please.