Почему Android Boot относительно медленный?

8

Этот вопрос волнует меня (и, возможно, многих), потому что в моем телефоне нет вращающейся части.

Мой телефон имеет Quad Core, 3 Гб оперативной памяти и так много места для хранения, все по типу SSD, с удивительной скоростью чтения / записи.

При этом Android (и KitKat, и Lollipop) требуется около 80 секунд для полной загрузки. В Ubuntu это занимает меньше времени при использовании systemd или upstart. (некоторые пользователи сообщают о времени загрузки менее 10 секунд при использовании Ubuntu с systemd и около 20 секунд при использовании Upstart со спецификациями, такими как Intel i5 и RAM объемом 8 Гб)

Итак, что заставляет Android загружаться так медленно? И есть ли что-то, как пользователь, я могу сделать, чтобы ускорить процесс загрузки?

Изменить: в соответствии с объяснением процесса загрузки ( https://android.stackexchange.com/a/29738/27870 ), похоже, что в общем процессе загрузки нет особых отличий по сравнению с обычной ОС, такой как Ubuntu. Где Android идет не так в процессе.

KhoPhi
источник
1) Вы написали спецификации, но не название модели! 2) Вы также используете несколько ПЗУ? 2) Какой смысл сравнивать десктоп с мобильным телефоном, который сильно отличается по ОС и HW? 3) Какую версию ROM и Android вы сейчас используете? 4) Вы пытались удалить приложения из автозагрузки? 5) Вы сравнивали разницу во времени загрузки между новым ПЗУ и ПЗУ, установленным со всеми вашими приложениями? // Я использую Автозапуск, чтобы удалить приложения из автозагрузки.
Повелитель огня
Многие люди используют модули Xposed для этой работы. Я думаю, вам нужно Google для таких. Может быть, кто-то еще может упомянуть их.
Повелитель огня
@Firelord Я использую только один ROM. Оба, хотя и работают на настольных компьютерах и телефонах, оба зависят от схожего ядра, если не похожи (просто скомпилированы для разных архитектур.) В настоящее время я использую 5.1.1. Используется с 4.0 и скорость загрузки никогда не увеличивается. Даже при новой установленной скорости загрузки по сравнению с тем, когда загружаются мои полные приложения, нет существенной разницы во времени. С помощью автозапуска, как быстро загружается ваш телефон? Кстати, я на xperia z2
KhoPhi
1
Мое беспокойство должно иметь дело больше из коробки Android. Это медленно. Его истинная ARM не близка к процессорам на ПК, но скорость, которой оснащено большинство телефонов в наши дни, я ожидал, что время загрузки улучшится, но это не так. ART был разработан для ускорения запуска приложений. Кто работает над тем, чтобы ускорить загрузку из коробки ?
Хофи
1
Не уверен, что это ARM, потому что мой намного более старый Chromebook, основанный на ARM, загружается сразу, и я имею в виду буквально.
RJT

Ответы:

10

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

Ниже приведены краткие выводы:

Используемое оборудование : OMAP3430 Boardэто как плата разработки, на которой прошит Stock Android. На фактическом коммерческом / производственном устройстве будет дополнительное специальное оборудование. Для визуализации времени загрузки мы использовали инструмент разработчика под названиемbootchart

Больше всего времени на Android тратят в следующих двух областях:

  1. Зиготный процесс . Когда ОС Android запускается, она запускает процесс Zygote, предварительно загружает классы, чтобы создать общую область памяти для приложений. Эта работа по продвижению java-классов занимает @ 23 секунды для ее завершения.

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

  1. Служба управления пакетами. В выводе logcat мы видим, что менеджер пакетов сканирует 4 директории. /system/app, /system/framework, /data/app, /data/app-private.

Далее, есть компонент, называемый Activity Manager, который запускает различные службы, такие как служба определения местоположения, служба телефонии и т. Д., И на это уходит около 11-12 секунд .

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

Если вы сложите эти 2 раза, это будет около 35 секунд

Вы можете игнорировать эти числа в сегодняшнем дне и возрасте, но точка, которую указывают эти числа, - это то, где код Android AOSP тратит время во время загрузки. OEM-производители имеют свой собственный набор аппаратного обеспечения, который варьируется от устройства к устройству.

Конечно, есть и другие аппаратные и программные инициализации, которые Android должен выполнить после этих двух трудоемких шагов, которые могут еще больше увеличить время загрузки.

И есть ли что-то, как пользователь, я могу сделать, чтобы ускорить процесс загрузки?

Не так много, я думаю. Сообщество разработчиков Android и OEM-производители все еще работают над ускорением времени загрузки, но, как вы можете себе представить, это не так просто, и внесение изменений для оптимизации времени загрузки может в конечном итоге привести к увеличению времени загрузки приложения во время нормальной работы, на что намекает платформа Android инженер .

AADAndroidEnthusiasts
источник
Почему образ процесса zygote не кэшируется, как это делает каждая хорошая ВМ (например, smalltalk и lisp)? Почему графический интерфейс Android не может появиться до того, как API телефонии будет готов. Почему все это последовательно? ПОЧЕМУ МЫ ЕЩЕ ИСПОЛЬЗУЕМ JAVA. Нет причин, по которым время загрузки Android должно быть медленнее, чем время загрузки C64, что означает 1 секунду
Lothar
4

Андроид загружается медленно?

Мой телефон имеет Quad Core, 3 Гб оперативной памяти ... Android (и KitKat, и Lollipop) требуется около 80 секунд для полной загрузки.

Мой телефон только двухъядерный с 1G RAM (Zenfone 4), и у меня никогда не было этой проблемы. Холодная загрузка через ~ 60 секунд, перезагрузка через 40 минут (CyannogenMod 12.1).

некоторые пользователи сообщают о времени загрузки менее 10 секунд с использованием Ubuntu с systemd и около 20 секунд ...

Это зависит от конфига и того, что вы считали «временем загрузки» . Мой ноутбук (i5 1st Gen, 4 ГБ оперативной памяти с вращающимся диском) считается работоспособным (завершил загрузку) примерно через 90 секунд. Конечно, я могу отложить / отключить некоторые сервисы, чтобы ускорить загрузку и запустить их вручную при необходимости. Но, с моей точки зрения, исходя из моих предпочтений, это не будет считаться полезным .

На ПК против мобильного

Есть некоторые различия, которые вы должны учитывать при сравнении ПК и мобильного Linux. от процессора до ядра . Наиболее заметные различия:

  • Из-за особенностей устройства, мобильный процессор в основном разработан с энергосбережения в качестве основного соображения. Это сильно влияет на производительность.
  • Ядро Android имеет некоторые специфические для мобильных устройств функции, которые могут влиять на время загрузки и доступ к аппаратному вводу-выводу.
  • Кроме того, в ядре Android есть проблемы с совместимостью с mainline / stable. В основном это связано с тем, что вендоры предпочитают использовать старую версию ядра, совместимую с их драйверами устройств. AOSP Marshmallow работает, 3.18.10пока стабильное ядро ​​работает 4.6.2.

Итак, что заставляет Android загружаться так медленно?

Почему бы нам не проверить? :)

Если у вас есть доступ к adb и вы уже включили параметры разработчика , проверьте журнал загрузки, используя

adb logcat -d -b events -v threadtime | grep "boot"

на моем устройстве это вывод:

bambang@pamungkas ~ % adb logcat -d -b events -v threadtime | grep "boot"
06-08 04:35:01.417   193   193 I boot_progress_start: 9906
06-08 04:35:03.718   193   193 I boot_progress_preload_start: 12208
06-08 04:35:07.838   193   193 I boot_progress_preload_end: 16328
06-08 04:35:08.158   513   513 I boot_progress_system_run: 16647
06-08 04:35:09.880   513   513 I boot_progress_pms_start: 18370
06-08 04:35:10.204   513   513 I boot_progress_pms_system_scan_start: 18693
06-08 04:35:24.487   513   513 I boot_progress_pms_data_scan_start: 32977
06-08 04:35:28.552   513   513 I boot_progress_pms_scan_end: 37042
06-08 04:35:28.696   513   513 I boot_progress_pms_ready: 37186
06-08 04:35:33.088   513   513 I boot_progress_ams_ready: 41578
06-08 04:35:40.755   513   533 I boot_progress_enable_screen: 49244

Как видите, общее время загрузки от запуска виртуальной машины до начального рисования экрана диспетчером окон составляет ~ 40 секунд. Дополнительное время на прошивку и пространство ядра (в вашем связанном ответе это переводится на шаг 1-4) не включено.

Обратите внимание, что для обработки apk ( boot_progress_pms_*) всей системы требуется ~ 18 секунд , что означает ~ 45% времени загрузки, которое включает в себя:

  • очистка несуществующих системных пакетов и неполная установка пакетов,
  • проверка установленных приложений,
  • установка пути к библиотеке,
  • и т.д. (см .: полный исходный код PackageManagerService )

Таким образом, общее время загрузки зависит от количества пакетов (приложений), установленных на устройстве. Больше приложения означает больше времени ожидания во время процесса pms. Кроме того, запуск действий занимает ~ 5 секунд / 20% времени загрузки. Остальное не может быть ни значительным, ни безопасно изменяемым без глубокого знания поведения системы.

Что я могу сделать, чтобы ускорить процесс загрузки?

  • Попробуйте другой ROM. Sony - один из «хороших парней», которые обеспечивают здоровую среду для твикеров. Я рекомендую AOSP или Cyanogen . Просто знайте об ограничениях
  • Тест, не думай! Легко сделать предположение, что A загружается медленно, а B быстрее. Простая команда logcat, подобная приведенной выше, покажет некоторые полезные сведения для базового сравнения времени загрузки между ПЗУ.
  • Если вы знаете, что делаете , в Embedded Linux Wiki есть список возможных настроек для улучшения времени загрузки.

По улучшению времени загрузки

На ваш комментарий

ART был разработан для ускорения запуска приложений. Кто работает над тем, чтобы ускорить загрузку из коробки ?

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

bangbambang
источник
adb logcat -d -b events -v threadtime | grep "boot"возвращается пустым. Я проверил при перезагрузке, и до сих пор нет журналов в соответствии boot.
Хофи
@Rexford: хммм, мой работает просто отлично. Вы могли бы попытаться трубы ее на пейджер (например , меньше) и искать оттуда: adb logcat -d -b events -v threadtime | less. Или измените кольцевой буфер
logcat
0

Что бы это ни стоило, я запускаю Android-x86 на виртуальной машине под Linux, и она загружается примерно за 22 секунды, что соответствует большинству дистрибутивов GNU / Linux и Windows 10 на SSD-диске с четырехъядерным настольным ЦП.

Поэтому я не считаю время загрузки Android слишком медленным.

Marc.2377
источник
Имейте в виду, что вопрос был представлен в 2015 году.
Энди Ян
@ AndyYan Я заметил, но Android-x86 намного старше.
23 марта 17
Аппаратные характеристики есть; давление программного обеспечения гораздо менее важно при таком мощном оборудовании (даже после снижения эффективности в виртуальных машинах).
Энди Ян
@ AndyYan Я согласен ... но моя точка зрения заключается в том, что по некоторым стандартам в Android нет ничего, что определяло бы его как медленный. То есть, по сравнению с другими полноценными операционными системами, для аналогичного оборудования. Я чувствовал, что это стоит добавить.
23 марта 17