G.O.S.S.I.P 阅读推荐 2022-08-31 Floo

admin 2023年2月24日11:12:44评论47 views字数 1984阅读6分36秒阅读模式

虽然现在全国各地疫情横行,但是明天就进入9月了,开学在即,没有什么能阻挡大伙的学术热情。在八月的尾巴上,给大家带来的是MobiSys '22的一篇论文,这篇论文的作者很关心Android手机“越用越卡”的问题,提出了一种很fancy的方法,在不更换手机(剁手)的情况下,(一定程度上)优化了app与用户的交互延时,让用户获得更好的体验。

G.O.S.S.I.P 阅读推荐 2022-08-31 Floo

这个一作的名字乍一看还以为是传奇印度数学家拉马努金(Srinivasa Aiyangar Ramanujan)

G.O.S.S.I.P 阅读推荐 2022-08-31 Floo

首先放一个结论:研究表明,当Android app的响应时间超过2-3秒时,用户会放弃等待(进而去买iPhone~);实际上,用户希望app越顺畅越好,即使是100毫秒的延迟也会让人觉得不舒服。在移动互联网时代,网络延迟已经不是问题(上图),而且作者发现,app和网页不一样,很多UI资源都是提前下载好的,在实际运行时并不需要花大量的时间和带宽去下载数据,因而我们的优化策略并不应该从网络面上开展。作者认为,导致app响应能力不佳的主要因素是客户端的计算开销。如果能把app执行过程中的大量CPU运算过程进行缓存,是否会改善app的表现呢?作者设计并实现了名为Floo的优化系统,该系统能够在app运行期间自动缓存那些无需反复运算的函数调用过程,并在之后的运行中重用缓存结果,从而实现了性能的优化。

Floo的基础挑战在于:

  1. 要保证那些被缓存了之后重用的函数的正确性;

  2. 最大限度地重用缓存结果,尽可能减少计算开销

Floo的另一个可用性挑战在于,如何实现自动化的风险,不需要开发者介入,也不需要重写app代码,即可完成相关运算结果的缓存和使用。下图展示了Floo的基本工作流程:

G.O.S.S.I.P 阅读推荐 2022-08-31 Floo

在安装app之前,Floo 首先静态分析app和OS的字节码,分析哪些函数值得去进行缓存,同时要分析被缓存函数的返回值及其对外部的影响。在静态分析之后,Floo会进行app的字节码重写,插入相关插桩代码,用于提取那些涉及到I/O的指令(并加以缓存)。之后的实际运行中,在每次函数调用前,Floo 都会检查自己的缓存中是否存在记录,如果有,则从缓存里读取过去的计算结果,用于加速执行。

Floo 分配给每个函数一个唯一的标识符,在进行查询时,读取每个变量的{name,Current Value,type}列表,如果完全匹配,则命中缓存。若命中,则直接使用过去的计算结果;若缓存未命中,则直接正常执行函数,同时记录执行信息并将上述三元组写入缓存中。考虑到一些实际情况,Floo还对缓存命中率、缓存查找开销及设备资源限制进行了优化:

  • 使用静态扫描时生成的 Call Graph 预测即将到来的调用,在到来之前就进行缓存查询;

  • 引入了缓存接纳和驱逐策略。Floo 会在缓存中删除命中率极低的函数,也会定期重新激活这些函数。

作者选择了Google Play中流行的app进行测试(选了75个,然后用soot进行分析,有25个分析失败,最后只留下了50个app),使用了Humanoid app testing framework这个框架执行动态测试,为每个app生成20条运行记录(trace),这样保证了app能够有足够多的交互操作,代码覆盖率可以得到保证。

在优化后,作者统计了如下两项性能指标(使用了4台不同的Android设备):

  1. 总计算时间(TCT),或在交互时仅执行APP代码或平台代码的时间(即不包括网络操作)

  2. 交互响应时间(IRT),执行交互到最终响应到屏幕的时间。

G.O.S.S.I.P 阅读推荐 2022-08-31 Floo

从上图中我们可以看到,在TCT的性能提高方面,所有app性能提升的中位数为36.9-43.8%(0.46-0.54 秒),而95%分位性能提升为68.6-77.6%(0.86-0.98秒),作者指出,这种优化和传统上考虑网络侧的优化是互补的,可以结合起来最大程度改善用户体验。

G.O.S.S.I.P 阅读推荐 2022-08-31 Floo

从交互的响应优化上看(Figure 12),IRT的性能提升中位数为19.3-32.7%,使用了Floo之后,一下子减少了这么多延迟,对于手机用户的操作体验肯定是大有裨益的!

作者还把Floo与现有的两个解决方案(MarauderTango)进行了比较。Marauder主要是对网络请求进行缓存优化,而Tango的优化策略主要是将app侧的运算想办法转移到服务器侧计算。从实验结果可以看出来,Floo的优化策略算是抓住了主要矛盾——本地运算的开销才是app响应不及时的主要原因(这时候我们又要指出,杀了程序员祭天看起来总是可以解决摩尔定律失效的问题嘛~)

G.O.S.S.I.P 阅读推荐 2022-08-31 Floo

G.O.S.S.I.P 阅读推荐 2022-08-31 Floo


Floo项目:https://github.com/muralisr/floo
论文地址:https://www.muralisr.com/pdfs/floo_mobisys22.pdf


原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 阅读推荐 2022-08-31 Floo

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月24日11:12:44
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   G.O.S.S.I.P 阅读推荐 2022-08-31 Floohttp://cn-sec.com/archives/1267666.html

发表评论

匿名网友 填写信息