Description
Enable init bootcharting (bootchart start in init.rc)
Profile boot time with atrace and bootchart for timing bottlenecks
Analyze logcat -b all -v threadtime for slow service startups
Parallelize service startup in init.rc via class_start split
Move non-critical services to late_start class
Convert blocking import and on boot calls to property-based triggers
Reduce init.rc parse time by removing unused entries (e.g., legacy daemons)
Enable ZRAM with tuned swappiness in init.<board>.rc
Replace slow mounts with async vold/fs_mgr staging
Eliminate waits from boot (e.g., fsck, time sync) by caching where possible
Disable unnecessary SELinux audit spam (setenforce 1, use auditd or filter logs)
Use system/core/init/stats_event_logger.cpp for boot event tagging
Convert kernel logs to dmesg -T on device to analyze early kernel boot
Trim rc-based startup of SurfaceFlinger/zygote—trace using systrace
Optimize kernel command line (e.g., remove androidboot.console=tty0 if unused)
Enable ro.zygote.disable_gl_preload=true if no GL preload needed
Enable ro.zygote.preload.disable=true temporarily for baseline boot test
Benchmark bootloader-to-init timing via /proc/uptime snapshot in init
Trace HAL start delays via vintf_fragments, hwservicemanager, and servicemanager
Stub/disable heavy HALs (e.g., biometric, camera) to measure net improvement
Strip ro.hardware.* branches if they're loading unused modules
Enable ro.init.updatable_crashing_process.kill=true to kill stuck services
Build system_server with dexpreopt and enable system_server class preloading
Set ro.dalvik.vm.native.bridge=0 to disable unused libhoudini
Convert high-cost Java services to native where possible (defer with JobScheduler)
Enable native bridge preoptimization (ro.dalvik.vm.native.bridge.enable=0)
Reorder Soong modules for early boot service prioritization (e.g., libbase, liblog)
Tune init.environ.rc to reduce PATH, strip LD_PRELOAD, reduce ENV bloat
Disable update_engine if not used (update_engine.rc, boot control HALs)
Reactions are currently unavailable
You can’t perform that action at this time.
atraceandbootchartfor timing bottleneckslogcat -b all -v threadtimefor slow service startupsinit.rcviaclass_startsplitlate_startclassimportandon bootcalls to property-based triggersinit.rcparse time by removing unused entries (e.g., legacy daemons)ZRAMwith tuned swappiness ininit.<board>.rcvold/fs_mgrstagingauditspam (setenforce 1, useauditdor filter logs)system/core/init/stats_event_logger.cppfor boot event taggingdmesg -Ton device to analyze early kernel bootrc-based startup ofSurfaceFlinger/zygote—trace using systraceandroidboot.console=tty0if unused)ro.zygote.disable_gl_preload=trueif no GL preload neededro.zygote.preload.disable=truetemporarily for baseline boot test/proc/uptimesnapshot in initvintf_fragments,hwservicemanager, andservicemanagerro.hardware.*branches if they're loading unused modulesro.init.updatable_crashing_process.kill=trueto kill stuck servicesdexpreoptand enable system_server class preloadingro.dalvik.vm.native.bridge=0to disable unused libhoudiniJobScheduler)ro.dalvik.vm.native.bridge.enable=0)libbase,liblog)init.environ.rcto reducePATH, stripLD_PRELOAD, reduce ENV bloatupdate_engine.rc, boot control HALs)