Tại sao Android Boot tương đối chậm như vậy?


8

Câu hỏi này là mối quan tâm của tôi (và có lẽ nhiều người ngoài kia) vì không có phần quay trong điện thoại của tôi.

Điện thoại của tôi có Quad Core, 3 Gig RAM và rất nhiều dung lượng lưu trữ, tất cả đều giống như SSD, với tốc độ đọc / ghi tuyệt vời.

Với tất cả điều này, Android (Cả KitKat và Lollipop) mất khoảng 80 giây để khởi động để hoàn thành. Nó chiếm ít hơn trên Ubuntu bằng cách sử dụng systemd hoặc upstart. (một số người dùng báo cáo thời gian khởi động chưa đến 10 giây bằng Ubuntu với systemd và khoảng 20 giây khi sử dụng Upstart, với thông số kỹ thuật như Intel i5 và RAM 8 Gig)

Vậy, điều gì khiến Android khởi động quá chậm? Và có bất cứ điều gì như một người dùng, tôi có thể làm gì để tăng tốc quá trình khởi động?

Chỉnh sửa: theo quy trình khởi động được giải thích ( https://android.stackexchange.com/a/29738/27870 ), dường như không có nhiều khác biệt trong quy trình khởi động tổng thể so với hệ điều hành thông thường như Ubuntu. Android đi sai ở đâu trong quá trình.


1) Bạn đã viết thông số kỹ thuật nhưng không phải tên mô hình! 2) Bạn có đang sử dụng nhiều ROM không? 2) Điểm nào khi so sánh máy tính để bàn với thiết bị di động khác nhau nhiều về HĐH và CTNH? 3) Phiên bản ROM và Android nào bạn đang sử dụng? 4) Bạn đã thử xóa ứng dụng khỏi khởi động chưa? 5) Bạn đã so sánh sự khác biệt về thời gian khởi động giữa ROM và ROM mới được cài đặt với tất cả các ứng dụng của bạn chưa? // Tôi sử dụng Autostarts để xóa ứng dụng khỏi khởi động.
Firelord

Nhiều người sử dụng các mô-đun Xposed để thực hiện công việc. Tôi đoán bạn cần Google để như vậy. Có thể là người khác có thể đề cập đến họ.
Firelord

@Firelord Tôi chỉ sử dụng một ROM. Cả hai mặc dù chạy trên máy tính để bàn và điện thoại, cả hai đều phụ thuộc vào kernel tương tự nếu không giống nhau (chỉ được biên dịch cho các kiến ​​trúc khác nhau.) Tôi hiện đang sử dụng 5.1.1. Đã sử dụng từ 4.0 và tốc độ khởi động không bao giờ tăng. Ngay cả với tốc độ khởi động được cài đặt mới so với khi các ứng dụng đầy đủ của tôi được tải, không có sự khác biệt đáng kể về thời gian. Sử dụng tính năng tự động khởi động, điện thoại của bạn khởi động nhanh như thế nào? Nhân tiện, tôi đang ở xperia z2
KhoPhi

1
Mối quan tâm của tôi phải giải quyết nhiều hơn từ Android. Nó chậm. ARM thực sự của nó không gần với bộ xử lý trên PC, nhưng tốc độ hầu hết các điện thoại được trang bị trong những ngày này, tôi dự kiến ​​thời gian khởi động sẽ được cải thiện, nhưng không phải vậy. ART được thiết kế để làm cho các ứng dụng chạy nhanh hơn. Ai đang làm việc trên một cái để làm cho việc khởi động nhanh hơn ra khỏi hộp ?
KhoPhi

1
Không tin đó là ARM vì Chromebook dựa trên ARM cũ của tôi khởi động ngay lập tức và tôi có nghĩa là khá nhiều theo nghĩa đen.
rjt

Câu trả lời:


10

Vài năm trước, tôi đã làm việc về tối ưu hóa thời gian khởi động Android, với tư cách là nhà phát triển Android. Rõ ràng, là một phần của công việc này, trước tiên chúng tôi cần phân tích nơi Android dành thời gian trong quá trình khởi động.

Dưới đây là những phát hiện ngắn gọn:

Phần cứng được sử dụng : OMAP3430 Boardgiống như bảng phát triển mà Stock Android được flash. Trên thiết bị thương mại / sản xuất thực tế, sẽ có thêm phần cứng cụ thể. Để hình dung thời gian khởi động, chúng tôi đã sử dụng một công cụ dành cho nhà phát triển có tênbootchart

Các chi tiêu thời gian nhất bởi Android là sau 2 lĩnh vực:

  1. Quá trình hợp tử . Khi hệ điều hành Android được khởi động, nó sẽ bắt đầu quá trình Zygote, nó tải trước các lớp để tạo vùng nhớ chung cho các ứng dụng. Công việc tải trước các lớp java này mất 23 giây để hoàn thành.

Tại sao? Bởi vì việc tải trước lớp hợp tử là điều cần thiết để hoạt động tốt của hệ thống sau khi khởi động. Vì vậy, một khi các lớp được tải tất cả các ứng dụng, thì thời gian chạy ứng dụng sẽ nhanh hơn nhiều.

  1. Dịch vụ quản lý trọn gói. Trong đầu ra logcat, chúng ta có thể thấy Trình quản lý gói quét 4 thư mục. /system/app, /system/framework, /data/app, /data/app-private.

Tiếp theo, có một thành phần được gọi là Trình quản lý hoạt động bắt đầu các dịch vụ khác nhau như dịch vụ Vị trí, dịch vụ Điện thoại, v.v. Và phải mất gần 11-12 giây để hoàn thành việc này.

Tại sao? Bởi vì, về mặt lý thuyết, việc quét gói có thể thực hiện một số bộ đệm cho kết quả của nó sau lần khởi động đầu tiên và có thể kiểm tra các lỗ hổng bảo mật.

Nếu bạn cộng 2 lần này thì khoảng 35 giây

Bạn có thể bỏ qua những con số này trong thời đại ngày nay, nhưng điểm mà những con số này chỉ ra là nơi mã AOSP của Android dành thời gian trong khi khởi động. Các OEM có bộ phần cứng riêng thay đổi thiết bị theo thiết bị.

Tất nhiên, có những khởi tạo phần cứng và phần mềm khác mà Android cần thực hiện sau 2 bước tốn thời gian này, có thể kéo dài thời gian khởi động hơn nữa.

Và có bất cứ điều gì như một người dùng, tôi có thể làm gì để tăng tốc quá trình khởi động?

Tôi đoán không nhiều. Cộng đồng nhà phát triển Android và các OEM vẫn đang làm việc để giải quyết thời gian khởi động nhưng như bạn có thể tưởng tượng, việc thay đổi để tối ưu hóa thời gian khởi động có thể sẽ gây ra nhiều thời gian tải ứng dụng hơn trong các hoạt động bình thường, như được gợi ý bởi khung Android kỹ sư .


Tại sao hình ảnh quá trình hợp tử không được lưu trong bộ nhớ cache như mọi VM tốt (như smalltalk và lisp)? Tại sao GUI Android không xuất hiện trước khi API điện thoại sẵn sàng. Tại sao tất cả tuần tự này? TẠI SAO CHÚNG TÔI VẪN SỬ DỤNG JAVA. Không có lý do tại sao thời gian khởi động Android phải chậm hơn thời gian khởi động C64 có nghĩa là 1 giây
Lothar

4

Khởi động Android có chậm không?

Điện thoại của tôi có Quad Core, 3 Gig RAM ... Android (Cả KitKat và Lollipop) mất khoảng 80 giây để khởi động để hoàn thành.

Điện thoại của tôi chỉ có lõi kép với RAM 1G (Zenfone 4) và tôi không bao giờ gặp vấn đề đó. Khởi động nguội trong ~ 60 giây, khởi động lại sau 40 giờ (CyannogenMod 12.1).

một số người dùng báo cáo thời gian khởi động chưa đến 10 giây bằng Ubuntu với systemd và khoảng 20 giây ...

Nó phụ thuộc vào cấu hình và những gì bạn coi là "thời gian khởi động" . Máy tính xách tay của tôi (i5 1st Gen, RAM 4 GB với đĩa quay) được coi là có thể sử dụng (khởi động xong) sau khoảng 90 giây. Chắc chắn tôi có thể trì hoãn / vô hiệu hóa một số dịch vụ để có thời gian khởi động nhanh hơn và khởi động chúng theo cách thủ công khi cần. Nhưng theo quan điểm của tôi, dựa trên sở thích của tôi, điều đó sẽ không được tính là có thể sử dụng được .

Trên PC vs Mobile

một số khác biệt bạn nên xem xét khi so sánh giữa pc và mobile linux. từ CPU xuống kernel . Sự khác biệt đáng chú ý nhất:

  • Do tính chất của thiết bị, CPU di động chủ yếu được thiết kế với việc tiết kiệm năng lượng là yếu tố chính. Điều này ảnh hưởng lớn đến hiệu suất.
  • Android Kernel có một số tính năng di động cụ thểcó thể ảnh hưởng đến thời gian khởi động và phần cứng i / o truy cập.
  • Hơn nữa, nhân Android được biết là có vấn đề tương thích với tuyến chính / ổn định. Điều này chủ yếu là do sở thích của nhà cung cấp để gắn bó với phiên bản kernel cũ tương thích với trình điều khiển thiết bị của họ. AOSP Marshmallow chạy 3.18.10trong khi kernel ổn định hiện đang ở 4.6.2.

Vậy, điều gì khiến Android khởi động quá chậm?

Tại sao chúng ta không kiểm tra? :)

Nếu bạn có quyền truy cập vào adb và đã bật Tùy chọn nhà phát triển , hãy kiểm tra nhật ký khởi động bằng cách sử dụng

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

trên thiết bị của tôi, đây là đầu ra:

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

Như bạn có thể thấy, tổng thời gian khởi động từ VM bắt đầu cho đến khi bản vẽ màn hình ban đầu của trình quản lý cửa sổ là ~ 40 giây. Không bao gồm thời gian bổ sung cho phần sụn & không gian kernel (trên asnwer được liên kết của bạn, bản dịch này sang bước 1-4) không được bao gồm.

Chú ý rằng phải mất ~ 18 giây để xử lý toàn bộ hệ thống của gói ứng dụng ( boot_progress_pms_*), đây dịch tới ~ 45% thời gian khởi động, trong đó bao gồm:

  • làm sạch các gói hệ thống không có sẵn và cài đặt các gói không đầy đủ,
  • xác nhận các ứng dụng đã cài đặt,
  • thiết lập đường dẫn thư viện,
  • v.v. (xem: mã nguồn hoàn chỉnh của PackageManagerService )

Vì vậy, nhìn chung, tổng thời gian khởi động phụ thuộc vào số lượng gói (ứng dụng) được cài đặt trên thiết bị. Nhiều ứng dụng hơn có nghĩa là chờ đợi lâu hơn trong quá trình pms. Ngoài ra, các hoạt động bắt đầu mất ~ 5 giây / 20% thời gian khởi động. Phần còn lại không đáng kể cũng không thể sửa đổi một cách an toàn nếu không có kiến ​​thức sâu sắc về các hành vi hệ thống.

Tôi có thể làm gì để tăng tốc quá trình khởi động không?

  • Hãy thử ROM khác. Sony là một trong những "người tốt" , người cung cấp môi trường lành mạnh cho những người đi săn. Tôi khuyên dùng AOSP hoặc Cyanogen . Chỉ cần nhận thức được những hạn chế
  • Kiểm tra, đừng giả sử! Thật dễ dàng để giả định rằng A khởi động chậm, B nhanh hơn. Một lệnh logcat đơn giản như trên sẽ tiết lộ một số thông tin hữu ích để đo điểm chuẩn thời gian khởi động cơ bản giữa các ROM.
  • Nếu bạn biết bạn đang làm gì , Embedded Linux Wiki có một danh sách các điều chỉnh có thể để cải thiện thời gian khởi động.

Về cải thiện thời gian khởi động

Về nhận xét của bạn

ART được thiết kế để làm cho các ứng dụng chạy nhanh hơn. Ai đang làm việc trên một cái để làm cho việc khởi động nhanh hơn ra khỏi hộp ?

Theo tôi, điều chỉnh thời gian khởi động là không cần thiết và mang lại lợi ích không đáng kể. Vì về mặt lý thuyết , điện thoại của bạn sẽ ở lại hầu hết thời gian; điều quan trọng hơn nhiều là duy trì sự ổn định của hệ thống (với sự đánh đổi của quá trình khởi động lâu hơn) để đảm bảo thời gian hoạt động cao hơn và ít lỗi hơn.


adb logcat -d -b events -v threadtime | grep "boot"trả về sản phẩm nào Tôi đã kiểm tra khi khởi động lại, và vẫn không có nhật ký nào phù hợp boot.
KhoPhi

@Rexford: hmmm, của tôi đang hoạt động tốt. Bạn có thể thử chuyển nó sang máy nhắn tin (ví dụ: ít hơn) và tìm kiếm từ đó : adb logcat -d -b events -v threadtime | less. Hoặc sửa đổi bộ đệm vòng logcat
bangbambang

0

Để biết giá trị của nó, tôi chạy Android-x86 trong Máy ảo trong Linux và nó khởi động trong khoảng 22 giây, ngang với hầu hết các bản phân phối GNU / Linux và Windows 10 trên ổ SSD với CPU máy tính để bàn lõi tứ.

Vì vậy, tôi không coi thời gian khởi động Android là đặc biệt chậm.


Hãy nhớ rằng câu hỏi đã được gửi vào năm 2015.
Andy Yan

@AndyYan Tôi nhận thấy, nhưng Android-x86 cũ hơn nhiều.
Marc.2377

Thông số kỹ thuật phần cứng là có; áp lực phần mềm ít hơn rất nhiều dưới phần cứng mạnh mẽ như vậy (ngay cả sau khi suy giảm hiệu quả trong máy ảo).
Andy Yan

@AndyYan Tôi đồng ý ... nhưng quan điểm của tôi là, theo một số tiêu chuẩn, không có gì vốn có của Android định nghĩa nó là chậm. Đó là, so với các hệ điều hành chính thức khác, cho phần cứng tương tự. Tôi cảm thấy điều này là giá trị thêm.
Marc.2377
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.