Mengapa Boot Android relatif lambat?

8

Pertanyaan ini menjadi perhatian saya (dan mungkin banyak di luar sana) karena tidak ada bagian yang berputar di ponsel saya.

Ponsel saya memiliki Quad Core, 3 Gig RAM, dan begitu banyak ruang penyimpanan, semua seperti SSD, dengan kecepatan baca / tulis yang luar biasa.

Dengan semua ini, Android (Baik KitKat dan Lollipop) membutuhkan waktu 80 detik untuk boot hingga selesai. Dibutuhkan lebih sedikit cara di Ubuntu menggunakan systemd atau pemula. (beberapa pengguna melaporkan waktu booting kurang dari 10 detik menggunakan Ubuntu dengan systemd dan sekitar 20 detik saat menggunakan Upstart, dengan spesifikasi seperti Intel i5 dan RAM 8 Gig)

Jadi, apa yang membuat boot Android sangat lambat? Dan apakah ada sesuatu sebagai pengguna, yang bisa saya lakukan untuk mempercepat proses booting?

Sunting: sesuai dengan proses booting yang dijelaskan ( https://android.stackexchange.com/a/29738/27870 ), tampaknya tidak ada banyak perbedaan dalam proses booting keseluruhan dibandingkan dengan OS konvensional seperti Ubuntu. Di mana Android salah dalam prosesnya.

KhoPhi
sumber
1) Anda menulis spesifikasi tetapi bukan nama model! 2) Apakah Anda menggunakan Banyak ROM juga? 2) Apa gunanya membandingkan desktop dengan ponsel yang sangat berbeda dalam OS dan HW? 3) Versi ROM dan Android mana yang saat ini Anda gunakan? 4) Sudahkah Anda mencoba menghapus aplikasi dari startup? 5) Sudahkah Anda membandingkan perbedaan waktu boot antara ROM baru dan ROM yang diinstal dengan semua aplikasi Anda? // Saya menggunakan Autostarts untuk menghapus aplikasi dari startup.
Firelord
Banyak orang menggunakan modul Xposed untuk melakukan pekerjaan itu. Saya kira Anda perlu ke Google untuk itu. Mungkin orang lain bisa menyebut mereka.
Firelord
@Firelord Saya hanya menggunakan satu ROM. Baik meskipun berjalan di desktop dan telepon, keduanya bergantung pada kernel yang sama jika tidak mirip (hanya dikompilasi untuk arsitektur yang berbeda.) Saat ini saya menggunakan 5.1.1. Sudah digunakan sejak 4.0 dan kecepatan boot tidak pernah meningkat. Bahkan dengan kecepatan boot yang baru diinstal dibandingkan dengan ketika aplikasi lengkap saya dimuat, tidak ada perbedaan waktu yang signifikan. Menggunakan autostart, seberapa cepat ponsel Anda bisa boot? Ngomong-ngomong, saya menggunakan xperia z2
KhoPhi
1
Kekhawatiran saya adalah lebih banyak berurusan di luar kotak Android. Itu lambat. ARM sejatinya tidak dekat dengan prosesor pada PC, tetapi kecepatan kebanyakan ponsel dilengkapi dengan hari-hari ini, saya berharap waktu boot untuk meningkat, tetapi ternyata tidak. ART dirancang untuk membuat aplikasi yang berjalan lebih cepat. Siapa yang mengerjakannya untuk membuat booting lebih cepat dari kotak ?
KhoPhi
1
Tidak yakin itu ARM karena Chromebook berbasis ARM saya yang jauh lebih tua segera melakukan booting dan maksud saya cukup banyak.
rjt

Jawaban:

10

Beberapa tahun yang lalu, saya bekerja pada optimasi waktu boot Android, sebagai pengembang Android. Jelas, sebagai bagian dari pekerjaan ini, pertama-tama kami perlu menganalisis di mana Android menghabiskan waktu selama booting.

Di bawah ini adalah temuan singkatnya:

Perangkat keras yang digunakan : OMAP3430 Boardyang seperti papan pengembangan tempat Stock Android di-flash. Pada perangkat komersial / produksi aktual, akan ada perangkat keras khusus tambahan. Untuk memvisualisasikan waktu boot, kami menggunakan alat pengembang yang disebutbootchart

The paling menghabiskan waktu dengan Android adalah dalam mengikuti 2 bidang:

  1. Proses zigot . Saat OS Android dijalankan, Zygote akan memulai prosesnya, ia memuat kelas untuk membuat area memori bersama untuk aplikasi. Pekerjaan proloading kelas java ini membutuhkan waktu @ 23 detik untuk penyelesaiannya.

Mengapa? Karena preloading kelas zygote sangat penting untuk kinerja sistem yang baik setelah boot. Jadi, sekali kelas dimuat dari semua aplikasi, maka waktu menjalankan aplikasi jauh lebih cepat.

  1. Layanan manajer paket. Dalam keluaran logcat, kita dapat melihat bahwa Package manager memindai 4 direktori. /system/app, /system/framework, /data/app, /data/app-private.

Selanjutnya, ada komponen yang disebut Activity Manager yang memulai layanan yang berbeda seperti layanan Lokasi, layanan Telephony dll. Dan dibutuhkan hampir 11-12 detik untuk menyelesaikan ini.

Mengapa? Karena, pemindaian paket secara teori dapat melakukan caching dari hasilnya setelah boot pertama dan dapat memeriksa kerentanan keamanan.

Jika Anda menambahkan ini 2 kali, itu adalah sekitar 35 Detik

Anda dapat mengabaikan angka-angka ini di zaman sekarang, tetapi poin yang ditunjukkan oleh angka ini adalah di mana kode AOSP Android menghabiskan waktu selama boot. OEM memiliki perangkat kerasnya sendiri yang bervariasi dari satu perangkat ke perangkat lainnya.

Tentu saja, ada inisialisasi perangkat keras dan lunak yang perlu dilakukan Android setelah 2 langkah yang memakan waktu ini, yang dapat memperpanjang waktu booting.

Dan apakah ada sesuatu sebagai pengguna, yang bisa saya lakukan untuk mempercepat proses booting?

Kurasa tidak banyak. Komunitas pengembang Android dan OEM masih berupaya mempercepat waktu booting tetapi seperti yang Anda bayangkan, itu tidak semudah itu dan membuat perubahan untuk mengoptimalkan waktu boot mungkin berakhir menyebabkan lebih banyak waktu buka aplikasi selama operasi normal, seperti yang ditunjukkan oleh kerangka kerja Android insinyur .

AADAndroidEnthusiasts
sumber
Mengapa gambar proses zygote tidak di-cache seperti halnya setiap VM yang baik (seperti smalltalk dan lisp)? Mengapa GUI Android tidak dapat muncul sebelum API telepon siap. Mengapa semua ini berurutan? MENGAPA KITA MASIH MENGGUNAKAN JAWA. Tidak ada alasan mengapa waktu boot Android harus lebih lambat daripada waktu boot C64 yang berarti 1 detik
Lothar
4

Boot Android lambat?

Ponsel saya memiliki Quad Core, 3 Gig RAM ... Android (KitKat dan Lollipop) membutuhkan waktu 80 detik untuk melakukan booting hingga selesai.

Ponsel saya hanya dual core dengan RAM 1G (Zenfone 4) dan saya tidak pernah mengalami masalah itu. Boot dingin dalam ~ 60 detik, reboot dalam 40-ish (CyannogenMod 12.1).

beberapa pengguna melaporkan waktu booting kurang dari 10 detik menggunakan Ubuntu dengan systemd dan sekitar 20 detik ...

Itu tergantung pada konfigurasi dan apa yang Anda anggap "waktu boot" . Laptop saya (i5 1st Gen, 4 GB RAM dengan spinning disk) dianggap dapat digunakan (selesai booting) setelah sekitar 90 detik. Tentu saya dapat menunda / menonaktifkan beberapa layanan untuk mendapatkan waktu boot yang lebih cepat dan mulai secara manual sesuai kebutuhan. Tapi menurut saya, berdasarkan preferensi saya, itu tidak akan bisa digunakan .

Di PC vs Ponsel

Ada beberapa perbedaan yang harus Anda pertimbangkan ketika membandingkan antara pc dan linux mobile. dari CPU ke kernel . Perbedaan yang paling menonjol:

  • Karena sifat perangkat, CPU mobile sebagian besar dirancang dengan konservasi daya sebagai pertimbangan utama. Ini sangat memengaruhi kinerja.
  • Kernel Android memiliki beberapa fitur khusus seluler yang dapat memengaruhi waktu boot dan akses perangkat keras / i.
  • Selanjutnya, kernel Android diketahui memiliki masalah kompatibilitas dengan mainline / stable. Ini sebagian besar disebabkan oleh preferensi vendor untuk tetap menggunakan versi kernel lama yang kompatibel dengan driver perangkat mereka. AOSP Marshmallow berjalan 3.18.10saat kernel stabil saat ini di 4.6.2.

Jadi, apa yang membuat boot Android sangat lambat?

Kenapa kita tidak mengeceknya? :)

Jika Anda memiliki akses ke adb dan sudah mengaktifkan Opsi Pengembang , periksa log boot menggunakan

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

pada perangkat saya, ini adalah output:

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

Seperti yang Anda lihat, total waktu boot dari VM mulai sampai gambar layar awal oleh manajer jendela adalah ~ 40 detik. Waktu tambahan pada firmware & ruang kernel (pada asnwer yang ditautkan, terjemahan ini ke langkah 1-4) tidak termasuk.

Perhatikan bahwa dibutuhkan ~ 18 detik untuk memproses apk keseluruhan sistem ( boot_progress_pms_*), ini menerjemahkan ke ~ 45% dari waktu boot, yang meliputi:

  • membersihkan paket sistem yang tidak ada dan pemasangan paket yang tidak lengkap,
  • memvalidasi aplikasi yang diinstal,
  • pengaturan jalur perpustakaan,
  • dll (lihat: kode sumber lengkap PackageManagerService )

Jadi secara umum, total waktu boot tergantung pada jumlah paket (aplikasi) yang diinstal pada perangkat. Lebih banyak aplikasi berarti lebih lama menunggu selama proses pms. Selain itu, memulai aktivitas membutuhkan ~ 5 dtk / 20% dari waktu booting. Sisanya tidak signifikan atau aman dimodifikasi tanpa pengetahuan mendalam tentang perilaku sistem.

Adakah yang bisa saya lakukan untuk mempercepat proses booting?

  • Coba ROM lain. Sony adalah salah satu "orang baik" yang menyediakan lingkungan yang sehat untuk tweaker. Saya merekomendasikan AOSP atau Cyanogen . Sadarilah keterbatasannya
  • Tes, jangan berasumsi! Sangat mudah untuk membuat asumsi bahwa boot A lambat, B lebih cepat. Perintah logcat sederhana seperti di atas akan mengungkapkan beberapa info berguna untuk pembandingan waktu boot dasar antara ROM.
  • Jika Anda tahu apa yang Anda lakukan , Wiki Linux Tertanam memiliki daftar kemungkinan penyesuaian untuk meningkatkan waktu boot.

Meningkatkan waktu boot

Atas komentar Anda

ART dirancang untuk membuat aplikasi yang berjalan lebih cepat. Siapa yang mengerjakannya untuk membuat booting lebih cepat dari kotak ?

Menurut pendapat saya, mengutak-atik waktu boot adalah tidak perlu dan memberikan keuntungan yang tidak signifikan. Karena ponsel Anda akan, secara teoritis , tetap terjaga sebagian besar waktu; jauh lebih penting untuk menjaga stabilitas sistem (dengan pertukaran proses boot yang lebih lama) untuk memastikan waktu kerja yang lebih tinggi dan lebih sedikit kesalahan.

bangbambang
sumber
adb logcat -d -b events -v threadtime | grep "boot"kembali kosong. Saya memeriksa saat reboot, dan masih tidak ada log di sana yang cocok boot.
KhoPhi
@Rexford: hmmm, milik saya bekerja dengan baik. Anda bisa mencoba untuk pipa ke sebuah pager (misalnya: kurang) dan mencari dari sana: adb logcat -d -b events -v threadtime | less. Atau ubah buffer cincin logcat
bangbambang
0

Untuk apa nilainya, saya menjalankan Android-x86 dalam Mesin Virtual di Linux dan mem-boot dalam waktu sekitar 22 detik, yang setara dengan sebagian besar distribusi GNU / Linux dan Windows 10 pada drive SSD dengan CPU desktop quad-core.

Jadi saya tidak menganggap waktu boot Android sangat lambat.

Marc.2377
sumber
Ingatlah bahwa pertanyaan itu diajukan pada tahun 2015.
Andy Yan
@AndyYan saya perhatikan, tetapi Android-x86 jauh lebih tua.
Marc.2377
Spesifikasi perangkat keras ada di sana; tekanan perangkat lunak jauh lebih penting di bawah perangkat keras yang kuat (bahkan setelah penurunan efisiensi pada VM).
Andy Yan
@AndyYan Saya setuju ... tapi poin saya adalah, menurut beberapa standar, tidak ada yang melekat pada Android yang mendefinisikannya sebagai lambat. Artinya, dibandingkan dengan sistem operasi lain yang lengkap, untuk perangkat keras yang serupa. Saya merasa ini layak untuk ditambahkan.
Marc.2377