愿历尽千帆 归来仍少年

愿历尽千帆 归来仍少年

BPF | CPU scheduler 可行性调研
本文将主要涉及如下内容 1.解读 邮件内容 摘取其中的关键内容,尽量将围绕这个话题的关键讨论以时间线展示。 2.介绍Google 的GhOSt 开源框架 同时会穿插一些额外的内容(比如GKI 的基础介绍、OEM 的定制修改) 以便于更好的理解 备注:一笔关于BPF 实现的sched_ext 调度类去年11月底推到社区,引起了不少的讨论,由于代码量较大,相信会持续讨论较长时间,后面会新开一篇文章分析 关于BPF scheduler 的邮件讨论将BPF 引入CPU scheduler,业内有过一些讨论,涉及到的主要人物 Roman Gushchin Facebook ,内核调度策略...
Userfaultfd 在 ART GC 上的应用
前言Google 自Android 12 开始将ART 模块mainline,对于Android 12 及其之后的设备而言,后续ART 性能优化补丁都可以通过Google play 在线升级ART 模块获得,不用再等每次的Android 大版本升级。 本文主要简单介绍为何在Android 12 上引入userfaultfd 这一kernel 特性,不会涉及到具体细节,只是先有个大概印象:userfaultfd 是什么,为何引入,有哪些优势,后面会另开笔记详细介绍。 为何引入userfaultfd先说下为何引入userfaultfd ,其实就是为了解决现有的问题,主要有以下两个主要的问题 ...
反碎片化 | Proactive compaction
历年来内核中为反碎片化所做的努力,如下图所示: Publish date Articles on LWN.net 2004-09-08 https://lwn.net/Articles/101230/ 2004-05-10 https://lwn.net/Articles/105021/ 2005-02-01 https://lwn.net/Articles/121618/ 2005-11-02 https://lwn.net/Articles/158211/ 2005-11-08 https://lwn.net/Articles/159110/ 200...
关于kswapd 并发的思考
前言关于Kswapd 相信是比较熟悉了,如果经常分析Perfetto 的话,会经常看见这玩意的身影,尤其是内存紧张的场景下。 以前有过这样的一个想法,为何不将kswapd 改为并发呢?充分利用多核的优势,正好最近在Aosp 上看到一笔修改,觉得挺有意思,正是将kswapd 改为并发的方式,虽然不能在当前手机设备上应用(UMA 架构的缘故,下面会提到),但是思路不错,也借此机会再熟悉下kswapd 的工作机制。 Linux内核中的页面置换有两种方式: 1)异步方式,通过kswapd 处理2)同步方式,通过direct reclaim 处理 下面列举出几个关于Kswapd 场景的问题 ksw...
Android|图形栈疑问汇总(持续更新)
最近在看图形显示方面的内容,这块的知识点繁多且复杂,到了S以及T上有了较多的变化,单看理论源码的话,难以形成深刻的认知。所以打算在最近的学习过程中列举出自己的一些疑问,后面会持续的更新疑问并补充个人的理解。 1. onMeasure/ onLayout/ onDraw 分别做得事?2. 如何理解Window/ ViewRootImpl/ Surface/ SurfaceTexture/ TextureView/ GLSurfaceview 概念及其相互的关系?3. 如何理解硬件加速这一角色? 硬件加速引入的初衷? 会带来什么样的好处及对内存的影响? 如何强制让View/ Window/ ...
Android S Doze模式
前言基于Android S梳理下Doze 机制 认识 Doze 如果用户未插接设备的电源,在屏幕关闭的情况下,让设备在一段时间内保持不活动状态,那么设备就会进入Doze 模式。在Doze 模式下,系统会尝试通过限制应用访问占用大量网络和 CPU 资源的服务来节省电量。它还会阻止应用访问网络,并延迟其作业、同步和标准闹钟。系统会定期退出Doze 模式一小段时间,让应用完成其延迟的活动。在此维护期内,系统会运行所有待处理的同步、作业和闹钟,并允许应用访问网络。 (摘自 https://developer.android.google.cn/training/monitoring-devic...
ART 虚拟机|Dex2oat 调优实践之路
写在前面我们都知道Dex2oat对应用的启动速度、以及日常使用的流畅度起到了重要作用,不过Google现有的dex2oat机制存在着明显的局限性。 开机/OTA等场景,容易整机卡顿及开机时间长。 Idle下的触发条件苛刻,发挥空间有限。 前段时间研究了下dex2oat的原理机制,并且对一些场景下的dex2oat行为做了客制化,打算做下小结,以便后续回顾完善。 涉及代码均基于Android S 基本概述一个App经过优化dex2oat的大致流程如下(图片来源:谷歌开发者网站) 简单的理解就是优化是以dex文件中的method为单位,dex2oat在优化时,会根据需要优化一定量的meth...
网络 | 拥塞控制算法之BBR
TCP BBR(Bottleneck Bandwidth and Round-trip propagation time)是由Google 设计,于2016年发布的拥塞算法。以往的大部分拥塞控制算法都是基于丢包来作为降低传输速率的信号,而BBR 则基于模型主动探测。目前已经在Google 内部大范围使用并随着linux 4.9 版本正式发布。 Bufferbloat在讨论BBR 之前不得不先说下Bufferbloat,在BBR 出来之前的拥塞控制算法无一例外都和网络缓存耦合在了一起,所以都会存在发生Bufferbloat 的情况。 关于bufferbloat的定义 Bufferbl...
ANR原理分析及常见案例
最近看了下ANR代码,结合之前项目上的一些ANR案例,打算对ANR的原理以及常见案例做下小结,涉及的代码均基于Android S 画了一张图,列举了可能导致ANR的一些影响因素 原理机制我们平时遇到的ANR问题大部分都是input ANR类型,所以以input ANR为例进行梳理,这块机制并不复杂,只梳理埋计时和check超时的代码部分。正常输入事件的分发流程如下12345InputDispatcher::dispatchOnce() ->InputDispatcher::dispatchOnceInnerLocked ->InputDispatcher::dispatchK...
优化实践: 高刷下列表滑动出现卡顿掉帧
问题背景近期我们的测试同事,上报了一些操作掉帧的问题,对比机选取的是同配置的荣耀x20。以微信为例,如下是测试提供的测试报告这份perfdog报告的操作步骤对应的是上下滑动微信列表,数据上看,测试机表现似乎比对比机逊色一些。打算实际对比体验下,在两台机器上安装同版本的微信,清理后台任务,并确保两台机器上的微信均已完成dex2oat且dex2oat模式一样。实际对比测试下来的主观感受是: 在我们的测试机上,滑动松开手指后会概率性出现顿挫感,荣耀机器上滑动的fling阶段比较平滑,虽然偶尔也会有顿挫,对比体验上确实优于我们的测试机 基于数据报告以及主观测试感受,说明我们的机器在部分场景操作上...
avatar
Steven li