前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android 11 IORap --通过I / O预取来改善应用启动

Android 11 IORap --通过I / O预取来改善应用启动

作者头像
用户9732312
发布于 2022-05-13 13:00:25
发布于 2022-05-13 13:00:25
2.4K0
举报
文章被收录于专栏:ADAS性能优化ADAS性能优化

Android 11中,引入了IORap,这是一个新功能,可大大缩短应用程序的启动时间。我们观察到,各种设备上的应用平均启动速度(冷启动)快5%以上。有的用例显示启动时间快20%以上。

适用于Android应用程序的IORap预读

IORap通过预测将需要哪些I / O并提前进行来减少应用程序启动时间。许多应用程序在启动时需要访问I/O.很多时间会因为阻塞I / O而导致应用程序启动慢。预取数据之后,应用程序几乎可以从pagecache 中立即访问该数据,从而大大减少了应用程序启动延迟。

当我们评估Play商店中一些热门的热门应用程序时,有80%以上的app在启动期间花费了10%以上的时间来等待I / O。而约50%的app甚至花费了20%以上的时间。我们研究过的大多数应用程序都可以从IORap中受益。

IORap 工作原理

IORap 是一个service。它perfetto通过IPC 与package manager, activity manager, perfetto 等服务交互。下图显示了IORap的总体架构:

步骤1:收集perfetto trace

IORap使用基于profiling的策略来确定要预取的I / O文件。分析数据来自perfetto trace,它记录了kernel pagecache页面的删除/添加(来自ftrace)。首先IOrap会通过 perfetto trace 获得 APP的前几次冷启动中,pagecache missing event 。

步骤2:产生预取清单

基于从先前步骤获得的pagecache missing event,IORap在设备的空闲时间期间生成预取文件列表。基本上,预取列表包含应用程序启动时访问的文件信息(名称,偏移,长度)。IORap 通过 perfetto分析mm_pagemap事件,并通过inode反转inode为文件名并将其结果(,偏移,长度)转换为(名称,偏移,长度)。然后,数据将存储在文件的预取列表中(protobuf)

步骤3:I / O预取

生成预取列表之后,IORap可以为应用程序的后续运行预取相应的数据。用户和开发人员无需执行任何操作。当用户点击图标或通过Intent请求图标的应用程序间接点击图标时,执行预取操作。

步骤4:淘汰预取清单

预取列表不会永远存在。预取列表可能会过时。下面的情况将会更新预取列表。

  • 更新应用程序时,预取列表将会过时。因为该应用程序可能会更改,并且先前的数据可能不准确。
  • Dexopt服务可以在安装后优化应用程序。优化应用后,布局可能会有所不同,从而使预取列表过时。

过时的预取列表将被删除,然后IORap将从perfetto trace 重新开始。

改进与观察

在我们实验室中测试过较多机器,我们确定IORap的优势涵盖了从低端到高端设备。平均而言,IORap可以提供高达〜26 %的加速。对于启动过程中具有大量I / O的应用程序非常有用。例如,Spotify对低端设备(Go和Pixel 3A)和高端设备(Pixel3或4)都显示了两位数的提升。

实验期间的一个有趣观察是,IORap的性能在很大程度上受到预取数据量的影响。准确的跟踪持续时间对于IORap非常重要。较短的跟踪持续时间会导致预取的数据少于所需的数据,会导致性能提高不明显。另一方面,较长的数据导致预取的数据量超过必要的数据量,这可能导致在最坏的情况下启动速度变慢。IORap使用应用程序报告ReportFullyDrawn事件的时间戳来估计trace持续时间。对于未报告此事件的应用,将使用显示时间。因此reportFullyDrawn,在适当的时间调用回调可以提高IORap的性能。

未来发展

我们对IORap所表现出的改进感到很兴奋,并且我们计划将来在以下两个方向上进一步探索。首先,更频繁地预取。如果可以在分析期间完成预取,那将对应用程序启动会有很大的帮助。然后,可以通过提供预构建的预取列表来消除在生成预取列表之前的一些性能差距。其次,IORap可以预测应用程序将更早启动并开始预取,从而进一步缩短了启动时间。

结论

您可以ReportFullyDrawn在应用程序启动完成后调用回调来帮助IORap 。IORap主要有助于减少I / O阻塞时间,因此请考虑对应用程序启动进行性能分析,以解决其他可能的性能问题。

其他

很早很早之前,在X通的SW 上有就有类似的方案。现在Google 更激进把此方案纳入了AOSP。OS 才能一统江湖。不知Google 是否会为此交X通专利费。且用且珍惜!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android性能优化 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档