如何排查开机/重启时间长问题
前提条件:抓开机ylog或抓重启串口log。
开机流程:请参见客户文档的详细阶段分析。
定位开机各阶段方法:
显示开机logo时间:在uboot log中检索lcd init关键词,backlight on time:对应的时间即为logo开始显示时间。
Uboot阶段时间:在uboot log中检索consume或boot_reason关键词,enter mode normal前的时间为uboot阶段时间,正常uboot阶段时间在约8S以下为正常。
Kernel阶段时间:在kernel log中检索first stage,对应log中如[ 1.644287]的时间即为kernel阶段时间。
安卓阶段:在android log 中检索boot_progress关键词,出现如下带有时间(单位ms)的记录,并注意各阶段的影响因素。
boot_progress_start: //该时间点偏大,需考虑当前在init.rc中通过insmod装入的KO文件数量是否有客制化增加
boot_progress_preload_start: //该时间点偏大,需检索dex2oat,更新为最新mainline并注意客制化的编译配置
boot_progress_preload_end: //该时间段时间段偏大,需在log中查看preload相同数量classes took的时间,并对比测试机与对比机的IO跑分差异。
boot_progress_system_run:
boot_progress_pms_start:
boot_progress_pms_system_scan_start: //系统APK数量,IO性能
boot_progress_pms_data_scan_start:
boot_progress_pms_scan_end: //内置APK数量,IO性能
boot_progress_pms_ready:
boot_progress_ams_ready: //启动众多系统服务,pms做权限更新
boot_progress_enable_screen: //关注luncher的冷启动时间
如以上开机时间正常,但重启时间长,请抓串口log,关注停止打印log到再次打印log间隔,并在关机log中:
检索ShutdownThread,检查安卓阶段关机时间;检索jumping to kernel,并计算由此到停止打印log的时间。jumping to kernel之前时间为init进程关闭众多服务时间,并针对性排查特定服务关闭环节。如无明显错误,请对比测试机与对比机的CPU跑分差距。
开机动画时间受安卓开机过程影响,排查方法同上。
如果觉得《如何排查开机/重启时间长问题》对你有帮助,请点赞、收藏,并留下你的观点哦!