Android如何优化启动时间(boot time)
来源:互联网 发布:极品神作的av番号知乎 编辑:程序博客网 时间:2024/05/19 06:51
首先,我们需要检查驱动程序的初始化时间是否合理,因此可以应用这个补丁。
"kernel/init/main.c"
-bool initcall_debug;
+bool initcall_debug = 1;
core_param(initcall_debug, initcall_debug, bool, 0644);
然后下面的消息会在内核启动时输出,我们可以逐一检查它们,看看是否有些驱动程序的initcall需要太多的时间。
...
initcall <driver_init_function> returned 0 after <time in microsecond> usecs
...
在这一步之后,我们确认每个驱动程序的init过程是合理的。
最后,不要忘记还原上面的测试补丁。
2.禁用串行控制台和早期的printk
串口控制台和早期的printk会相当慢的内核启动,所以我们可以考虑到
在发布版本中禁用它们。
2.1您可以确认在文件“AndroidBoard.mk”中使用了哪个内核defconfig。 看起来像 ”
msmxxxx-perf_defconfig"
ifeq ($(TARGET_BUILD_VARIANT),user)
KERNEL_DEFCONFIG := msmxxxx-perf_defconfig
else
KERNEL_DEFCONFIG := msmxxxx_defconfig
endif
然后删除以下两个配置在此defconfig禁用串行控制台。
-CONFIG_SERIAL_MSM_HSL_CONSOLE = y
2.2禁用earlyprintk
编辑文件“BoardConfig.mk”,并删除“earlyprintk = msm_hsl_uart,0xf991e000”从“
BOARD_KERNEL_CMDLINE“。
3.进一步收缩内核defconfig。
基于“msmxxxx-perf_defconfig”,尝试删除以下配置。
-CONFIG_CGROUP_DEBUG=y
-CONFIG_SERIAL_MSM_HSL_CONSOLE=y
-CONFIG_MSM_ADSPRPC=y
-CONFIG_REGULATOR_TPS65132=y
-CONFIG_PFT=y
-CONFIG_CORESIGHT=y
-CONFIG_CORESIGHT_EVENT=y
-CONFIG_CORESIGHT_FUSE=y
-CONFIG_CORESIGHT_CTI=y
-CONFIG_CORESIGHT_TMC=y
-CONFIG_CORESIGHT_TPIU=y
-CONFIG_CORESIGHT_FUNNEL=y
-CONFIG_CORESIGHT_REPLICATOR=y
-CONFIG_CORESIGHT_STM=y
-CONFIG_CORESIGHT_HWEVENT=y
-CONFIG_CORESIGHT_ETMV4=y
-CONFIG_CORESIGHT_MODEM_ETM=y
-CONFIG_CORESIGHT_WCN_ETM=y
-CONFIG_CORESIGHT_RPM_ETM=y
-CONFIG_CP_ACCESS64=y
-CONFIG_MSM_SMD_DEBUG=y
-CONFIG_MSM_DEBUG_LAR_UNLOCK=y
-CONFIG_MSM_FORCE_WDOG_BITE_ON_PANIC=y
-CONFIG_MSM_OCMEM_DEBUG=y
-CONFIG_MSM_OCMEM_NONSECURE=y
-CONFIG_LOCKUP_DETECTOR=y
-CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
-CONFIG_DEBUG_KMEMLEAK=y
-CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y
-CONFIG_DEBUG_SPINLOCK=y
-CONFIG_DEBUG_MUTEXES=y
-CONFIG_DEBUG_ATOMIC_SLEEP=y
-CONFIG_DEBUG_STACK_USAGE=y
-CONFIG_DEBUG_MEMORY_INIT=y
-CONFIG_DEBUG_LIST=y
-CONFIG_FAULT_INJECTION=y
-CONFIG_FAIL_PAGE_ALLOC=y
-CONFIG_FAULT_INJECTION_DEBUG_FS=y
-CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y
-CONFIG_MSM_RTB=y
-CONFIG_MSM_RTB_SEPARATE_CPUS=y
-CONFIG_DYNAMIC_DEBUG=y
-CONFIG_PANIC_ON_DATA_CORRUPTION=y
-CONFIG_STRICT_MEMORY_RWX=y
然后,重新编译代码,并检查文件$ANDROID_TOP/out/target/product/$TARGET/obj/KERNEL_OBJ/.
查看更改是否生效。
4.在早期引导时将多个内核设置为在线
如果您应用此步骤,请特别注意,因为它可能会导致热问题。
4.1首先应用以下3个补丁。 由于芯片组之间的差异,你需要做一些轻微的改变
这些补丁。
https://www.codeaurora.org/cgit/quic/la//device/qcom/common/commit/?id=
6df8a1ba549e6bf64fae2a73e2f6e3249bd72701
https://www.codeaurora.org/cgit/quic/la//kernel/msm-3.10/commit/?id=
d77f3f9feded36585a41fa094b17493ee7bb6092
https://www.codeaurora.org/cgit/quic/la//platform/system/core/commit/?id=
7f29bccd05b584dfb2028ba8579e04eaf7628f46
4.2 编辑"bootargs" 在 "msmxxxx.dtsi"
+bootargs = "boot_cpus=0 androidboot.earlyboot_cpus=2,4,6 sched_enable_hmp=1";
注意:
这种变化将导致温度迅速上升,并且如果超过一些阈值,thermal thread将会
限制这些核心降低频率,甚至关闭它们。 所以如果你遇到热问题,请还原
代码更改。
5.对于Android和其他引导性能,您可以参考以下2个文档了解更多
信息。
<Linux Platform Performance Measurement Procedures>
<APPLICATION NOTE ANDROID BOOT TIME MEASUREMENT>
- Android如何优化启动时间(boot time)
- Android BOOT Time 优化
- Android BOOT Time 优化
- Android BOOT Time 优化
- How to know windows last boot time? -如何知道Windows系统上次启动时间?
- Android 启动时间优化 <22>
- Android性能优化实战(一)----App启动时间优化
- Android启动时间优化查看及冷启动时间优化优化
- Improving Android Boot Time
- Improving Android Boot Time
- Android Boot-time Readahead
- Get Remote Machines Last Boot Time From A List Of Machines And Write To Excel - 如何获得远程主机的启动时间
- 关于如何优化eclipse启动时间
- 高通如何优化FFBM启动时间
- android项目性能优化之启动时间
- Android-分析并优化首页启动时间
- Android Boot Time Verification SOP
- Android 性能优化——启动时间优化指南
- Canvas气泡动画效果和多个球体上下运动(之前的改进)
- python小知识片段
- getprop
- JS 中的事件是
- 编写可维护的javascript
- Android如何优化启动时间(boot time)
- Spring读书笔记-----Spring核心机制:依赖注入
- 矩阵乘法的Strassen
- 第三周:( LeetCode200 ) Number of Islands(c++)
- java习题--->银行项目
- bzoj4128 Matrix
- 无缝轮播图 源码
- 懂二进制
- bzoj 1815: [Shoi2006]color 有色图 (置换+dfs)