Android 启动性能优化 - kernel篇

linux 内核优化配置(企业级配置优化) 安装BBR;升级内核到最新版本/5.0.2 载入公钥和yum源 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm yum install -y yum-plug... 阅读详情

Android 启动性能优化 - kernel篇

落鹤生 发布于 2012-08-27 09:17 点击:1503次 
来自:优快云博客 原文
最终优化后的结果是kernel从启动到init.rc大概需要0.5秒左右,当然具体优化到什么程度,和kernel需要加载的驱动是密切相关的。
TAG:  性能优化   启动   kernel  
 

题目有点大,其实kernel的启动性能调整和android基本没什么关系,我想应该适用所有使用linux的嵌入式设备

时间测量

说到性能调整,第一件该干的的事就是看下时间到底消耗在哪里。俗话说的好:知己知彼,百战百胜;过度优化,万恶之首

因此手头上要有称心如意的时间测试工具,方法。其实我是不太喜欢工具的,工具这东西可遇不可求,而且不如写代码顺手。

1. PRINTK_TIME

在内核编译选项中打开CONFIG_PRINTK_TIME,重新编译内核后,系统启动后就可以看到每一条printk前都有一个时间戳了,这样就有个大概的轮廓,哪

个驱动消耗了更多的时间,当然这个信息对我们性能调整来说粒度太粗了

2. initial_debug宏

上面的PRINTK_TIME只是在printk附加上当时的系统时间,对于那些没有printk信息输出的驱动来说是无法提供启动时间信息 的,initial_debug派上了用场,打开这个宏后,每个驱动的初始化起始时间和结束时间都打印出来了。有了这个时间,基本就可以确定哪些部分需要 优化了。我的做法是只关注耗时10000us以上的驱动。

3. ktime_t

调用ktime_get 获取时间,我最喜欢的时间测量方法,对于可疑的耗时函数,可如下测试

ktime_t start, end;

start = ktime_get()

candidate_func(arg...)

end = ktime_get()

printk(KERN_ALERT "%s:  start time=%d.%d, end time=%d.%d\n", __func__, start.tv.sec, start.tv.nsec, end.tv.sec, end.tv.nsec);

可以很准确的计算candidate_func的时间,当然如果candidate_func中引发了调度,时间就没那么准确了。

4 printk

尽量去掉printk对时间测量的影响,可以调整kernel/printk.c中的DEFAULT_CONSOLE_LOGLEVEL宏,把级别较低的信息去掉

 

性能优化方法

1. hard code lpj,在uboot启动参数增加 lpj=3997696. 其中的3997696替换为你的机器启动信息获取的值,这个一般能节省200ms

2. 裁剪内核,这块比较大,要单独开一篇来介绍,裁剪的好处有两点:第一减少kernel的尺寸,这也就相应的减少了加载kernel image的时间,第二也减少了不必要的初始化

3. 代码调整:

根据时间测试,找到耗时瓶颈,看看是否能进行优化。

  • 移除修改驱动中不必要的sleep 和delay
  • 检查耗时的i2c操作,能否替换单个i2c寄存器读写为多个i2c寄存器读写,当然这需要硬件支持
  • 推迟module init中不必要的操作到其他地方,比如open函数中,我觉得设备上下电,以及设备初始化都可以考虑移到初次使用设备时进行。
  • 去 掉hotplug helpers,因为android仅使用netlink来发送uevent事件。但是如果设置了hotplug helpers,那么当一个设备执行了uevent事件,就会从kernel尝试调用这个hotplug helper程序(即便这个helper程序并不存在),这个过程是很消耗时间的。
  • 在某些场合,用mdelay替换init function中的msleep,由于嵌入式设备的HZ是100,因此msleep(1)导致系统调度后,需要10几ms才能重新调度回来,所以对于msleep 5ms以下都可以替换为mdelay
  • 使用async_schedule调用module的probe函数,对于那些需要较多msleep的模块,这个方法可以通过并行提高init速度,但是一些模块对初始化顺序是有依赖的,所以慎用

4. 优化设备IO驱动,提高数据的读写速度,kernel启动完成到android launcher完成,几乎无处不涉及到文件的读写,IO速度对启动时间的影响重大,代码是人写的,所以平台特定的IO代码绝对有优化的空间

 

性能优化结果

最终优化后的结果是kernel从启动到init.rc大概需要0.5秒左右,当然具体优化到什么程度,和kernel需要加载的驱动是密切相关的。 (kickxxx)
安卓启动性能优化:使用bootchart分析启动瓶颈与优化策略 在嵌入式系统和移动开发领域,系统启动性能是衡量用户体验和产品竞争力的关键指标。启动过程涉及从内核初始化到用户空间服务就绪的复杂时序,传统盲测方法效率低下。性能分析工具通过采集进程CPU、磁盘I/O和时序数据,生成可视化图表,帮助开发者透视启动黑盒。其技术价值在于以极低开销实现无侵入式监控,精准定位如Zygote预加载、服务初始化阻塞等瓶颈。在安卓系统优化场景中,该工具能有效识别CPU密集型任务和磁盘I/O瓶颈,指导并行化初始化、调整服务启动顺序等优化实践。本文聚焦bootchart这一启动分析利器,详解其数 阅读详情

相关推荐

全志平台BSP裁剪(3)附件二 Kernel hacking配置说明

Kernel hacking 说明:内核hack选项 Show timing information on printks CONFIG_PRINTK_TIME 在控制台和syslog()系统调用的输出中包含printk()消息的时间戳,以便于直接显示内核启动过程中各步骤所用的时间.注意:无论此项是否开启,时间戳总会被记录在/dev/kmsg中,开启此项仅相当于使用"printk....

jzwjzw19900922的博客 1532

android确定kernel使用的config文件

由于android下的kernel配置与linux下的menu方式有了改变,所以我们不能直接将arch/arm/configs下的配置文件拷贝为.config后再进行make. 在arch/arm/configs下有很多的config文件,但是我们如何确认android当前的项目使用的是哪一个config文件勒。 请查看devices/manufactor/project/AndroidBoard...

madannasf的博客 3056

无人机上下通信信号解析程序和代码

总的来说,无人机上下行信号解析是无人机系统中非常重要的一部分,它关系到无人机的飞行控制和图像传输能力,对于保障无人机的飞行安全和数据传输质量具有重要作用。3. 读取和解析地面控制中心发送的命令和数据:程序还需要能够读取地面控制中心发送给无人机的命令和数据。1. 读取和解析无人机发送的命令和数据:程序需要能够读取无人机发送的信号,并解析其中的命令和数据。4. 将解析结果传递给无人机:解析地面控制中心发送的命令和数据后,程序需要将解析结果传递给无人机。具体的实现方式可以根据无人机的通信协议和硬件设备来确定。

2401_84824274的博客 2190

linux打印中时间信息

使能 CONFIG_PRINTK_TIME之后,内核每行打印前面有时间信息,本文探讨一下相关代码以及时间信息的含义。   | CONFIG_PRINTK_TIME:   |   | Selecting this option causes timing information to be   | included in printk output.  This allows you to

adaptiver的专栏 1万+

Android7以上抓取https数据包-无需root

手机内装一个虚拟机,然后在虚拟机内运行我需要抓包的应用,该虚拟机内是不需要证书验证的。完美解决android7.0以上https无法抓包的问题。

qq_45764684的博客 1458

保姆级教程:用MediaPipe和BlazePose在Python里实时追踪你的健身动作(附完整代码)

本文提供了一份详细的Python教程,教你如何使用MediaPipe和BlazePose实现实时健身动作追踪。从环境配置、模型选型到实时视频流处理架构设计,再到健身动作量化分析和可视化反馈系统优化,教程涵盖了完整的实现步骤和代码示例,帮助开发者快速构建高效的姿态特征点检测系统。

weixin_42531779的博客 153

android 内核编译时间戳,Android 启动性能优化 - kernel篇

题目有点大,其实kernel的启动性能调整和android基本没什么关系,我想应该适用所有使用linux的嵌入式设备时间测量说到性能调整,第一件该干的的事就是看下时间到底消耗在哪里。俗话说的好:知己知彼,百战百胜;过度优化,万恶之首因此手头上要有称心如意的时间测试工具,方法。其实我是不太喜欢工具的,工具这东西可遇不可求,而且不如写代码顺手。1. PRINTK_TIME在内核编译选项中打开CONFI...

weixin_39656686的博客 601

mipi协议中的calibration和scramble模式

在MIPI(Mobile Industry Processor Interface)协议中,calibration(校准)和scramble(加扰)模式是两个重要的特性,它们分别用于优化数据传输的准确性和减少信号干扰。

flomingo1的专栏 2401

【Android性能优化】启动速度优化

Android系统关机重启的时间是比较长的,一般重启在25s算可以的,大多在30s左右,刷机或者恢复出厂设置启动时间还会更久,达到1,2分钟都可能 那么,有没有可以优化的地方,提高启动速度呢? Android系统优化部份,如果启动速度能达到10s已经是很牛的咯 我们可以从下面几个方面着手优化启动速度 Bootloader优化(Boot,U-Boot) Android OS优化与裁剪(...

wuhuiyi10的专栏 744

告别密码本!用Windows NPS给华为/华三交换机做Radius认证,SSH登录更安全

本文详细介绍了如何利用Windows NPS实现华为/华三交换机的Radius认证,提升SSH登录安全性。通过集中化管理、精细化控制和完整审计追踪,企业可告别传统密码本,大幅提升网络设备管理效率。文章包含NPS服务部署指南、交换机配置详解及调试技巧,助力企业构建安全高效的统一认证体系。

weixin_42549723的博客 419

手把手教你设计反激开关电源:从整流滤波到PCB布局的实战避坑指南

本文是一份反激开关电源的实战设计指南,重点解析了从整流滤波电路到PCB布局的关键细节与常见陷阱。文章深入探讨了输入保护元件协同设计、EMI滤波器优化、整流桥与滤波电容选型,并详细阐述了如何通过优化PCB布局来确保安规、最小化功率回路面积以控制噪声,旨在帮助工程师和爱好者规避设计误区,提升电源的可靠性与性能。

yhn45678901的博客 692

Kernel Flasher:安卓内核管理的终极解决方案

在安卓设备优化领域,**内核管理工具**始终扮演着至关重要的角色。今天我们要介绍的Kernel Flasher,就是一款专为安卓用户设计的强大**内核管理工具**,它通过简单直观的操作界面,让普通用户也能轻松掌握**安卓内核刷写**和**内核备份恢复**等高级功能。 ## 核心功能全面解析 ### 一键刷写内核 Kernel Flasher支持直接刷入AK3格式的内核文件,让您无需复杂的命令行

gitblog_00058的博客 463

基于Qt C++开发一个体测数据管理系统

advice.dietAdvice = "饮食建议:\n1. 控制总热量摄入,每天减少300-500大卡\n2. 减少精制碳水(白米饭、白面包、甜食)\n3. 增加优质蛋白和膳食纤维摄入\n4. 烹饪方式以蒸、煮、烤、凉拌为主,减少油炸\n5. 晚餐适量减少,睡前3小时避免进食";dataTable->setHorizontalHeaderLabels({"ID", "用户名", "身高(cm)", "体重(kg)", "BMI", "体脂率(%)", "记录时间"});

寒寒豆豆软件公司的博客 192

Android Common Kernel 使用指南

Android Common Kernel 使用指南 1. 项目介绍 Android Common Kernel 是一个开源项目,旨在为 Android 设备提供稳定且兼容的 Linux 内核。该项目基于上游 Linux 内核,整合了适用于 Android 设备的补丁和修改。通过此项目,开发者可以为多种 Android 设备提供一个统一的内核版本,从而简化开发流程并提高效率。 2. 项目快速启动 ...

gitblog_01114的博客 1085

LoRa无线通信技术介绍(六)SX127X芯片收发程序讲解

接收LORA芯片SX127X的收发程序。

DT程序员的博客 1751

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android 性能优化【篇二:开机时延分析流程】

这篇文章为 Android 系统工程师提供了一套从理论到实践的完整开机速度优化指南,涵盖了流程分析、日志定位、案例排查及代码级修改方案,具有极高的实战参考价值。

qq_27672101的博客 1453

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android 性能优化 【总篇:深入浅出】

本篇的主要针对整机性能的一个解读,主要拆解整机性能有哪些小的领域,对应的测试用例是怎么样的,这类问题优化思路是怎么样的。各家厂商针对性能的测试都设计了不同的用例,因此针对性能测试其实是比较五花八门的。我这里凭着经验来总结一下通常都有哪些场景和性能测试相关。

qq_27672101的博客 514

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Android 启动性能优化 - uboot篇

http://blog.youkuaiyun.com/kickxxx/article/details/7361715 时间测量 在mx51平台上,使用get_timer可以获得比较精确的计时,get_timer的使用贯穿了uboot性能调整的整个过程 性能优化方法 1. 减小uboot镜像的大小,去掉不需要的驱动,不需要的命令,减少uboot的大小可以从两个方面获得好处,首先会节省驱动

lqxandroid2012的专栏 1178

Android开机启动性能-初探

Android开机启动性能优化-初探分析手段logkernel loglogcat logbootcharttrace我的分析过程kernel logbootchartSystemServersystracePMSbootanimationearlyconlogcat参考连接 分析手段 log kernel log 查看启动阶段的kernel log,如果kernel有大量丢失,就注释掉printk.c中如下逻辑,log才不会被过滤。 if (!(devkmsg_log & DEVKMSG_LOG_

Tecinno4的博客 1287

10个SmartPack-Kernel-Manager实用技巧:提升Android设备性能的秘诀

SmartPack-Kernel-Manager是一款强大的Android内核管理工具,能够帮助用户轻松优化设备性能、延长电池寿命并自定义系统功能。本文将分享10个实用技巧,让你充分发挥这款工具的潜力,打造更流畅、更高效的Android体验。 ## 1. 快速访问核心功能:掌握主界面导航 SmartPack-Kernel-Manager的主界面设计直观,提供了丰富的内核管理选项。从Statis

gitblog_00459的博客 1022
上一篇: GYP 简介
下一篇: 定位多线程内存越界问题实践总结
killmice
博客等级 码龄14年 119粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值