内核工匠

其他

一文搞定Android VSync机制来龙去脉

背景Android的显示系统一直使用双缓冲和VSync来防止屏幕画面发生撕裂现象,这也是其他系统的常规操作。Android的不同之处是将VSync运用到绘制系统中,作为黄油计划(Project
2023年8月4日
其他

一文了解Vulkan在移动端渲染中的带宽与同步

GitHubhttps://github.com/KhronosGroup/Vulkan-Docs/wiki/Synchronization-ExamplesARM-software/Vulkan
2023年7月28日
其他

直播预告 | Linux内核page到folio的变迁

Karlton曾经说过:“There
2023年7月26日
其他

RTC在不同业务场景下的最佳音质实践

AGC)需要具备自适应调节他们的能力,保障音频采集音量的平稳以控制采集底噪水平。初值设置或自适应调节不当都会导致音量小和爆音等问题,严重的会影响回声消除和降噪的效果,带来影响可用性的风险。2.1.4
2023年7月21日
其他

Android VNDK/VSDK Snapshot编译框架

Phrase:通过设置BOARD_VNDK_VERSION为具体的某个版本号(如31),触发编译系统使用预先生成的Snapshot参与编译(对应地将屏蔽相关模块的源码编译逻辑)的过程。4.3
2023年7月14日
其他

论好名字的重要性: Linux内核page到folio的变迁

fault处理函数中,最后rmap和lruvec相关的操作都是folio:当然,历史的伟大变革不会在一瞬间完成。从page语义向folio语义的转换并非是一蹴而就的,所以可以看看最新的Linux
2023年6月30日
其他

ShaderNN 2.0 :基于GPU全图形栈的高效轻量移动端推理引擎

JSON模型格式。在转换过程中,模型转换器解耦模型结构和权重,解析算子并做层间融合优化。在加载模结构和权重以后,推理引擎通过拓扑排序生成计算图。除少数算子通过CPU来实现以外,大多数算子交由GPU
2023年6月28日
其他

Chromium多进程架构,你知道多少?

安全单进程架构浏览器中所有的组件都运行在一个进程,很难实现合理的安全环境。插件和JavaScript脚本可以利用漏洞获取系统资源权限,导致很多安全性问题。三、多进程架构2008年,Chromium
2023年6月23日
其他

十分钟读懂HEVC-SCC原理

Mode,调色板模式)调色板是一种用来表示包含较少不同颜色值的块的有效方法。调色板模式与传统的编码方式不同,不对块进行预测和转换,而是用调色板指针(palette
2023年6月16日
其他

面向AI图形的轻量深度学习推理引擎 ShaderNN

背景:近年来,随着移动端算力的不断提升和深度学习研究的快速发展,特别是小网络模型不断成熟以及数据安全的要求越来越高,越来越多的原本在云端执行的推理转移到移动端上来实现。移动平台的深度学习推理涉及硬件平台、驱动、编译优化、模型压缩、算子算法优化以及部署,适合系统业务开发的高效推理框架成为业界迫切需求和开发重点。很多企业都在研发面向移动端的开源深度学习框架。当前国内外主流开源移动端推理框架:小米MACE、腾讯优图NCNN/TNN、阿里MNN、谷歌TensorFlow
2022年10月28日
其他

超标量处理器

基于局部历史的分支预测通过将它的每次跳转或者不跳转的结果记录于BHR寄存器中作为历史状态,然后通过PC值索引该表作为参考。如果一条分支指令的执行结果很有规律,那么可以较好地预测正确率。iii.
2022年8月19日
其他

读写信号量

一、前言最近参加了很多D状态导致卡顿问题的分析,都是在等待内核中的某一把mutex或者rwsem锁。mutex比较简单一些,只会有一个线程持锁,其它线程睡眠等待。而rwsem就稍显复杂,会存在多个线程同时持锁,导致等待的线程睡眠很长时间的情况。并且,我们对rwsem锁传递的优化,只能是writer持锁才能传递,reader持锁时传递不了。为了弄明白其中的原理,决定认真看一下代码。二、锁的作用Linux作为典型的多用户、多任务、抢占式内核调度的操作系统,在内核层面涉及到各种软硬件中断、多线程、抢占式内核调度、多处理器SMP架构等,内核在完成自己工作的时候需要处理各种条件下资源抢占的冲突问题。因此linux内核提供了semaphore、spinlock、mutex等锁机制,以及rcu、atomic等同步机制来解决这些问题。然而每种机制都有不同的实现原理以及适用场景,在性能方面也是会存在一定差异,因此对于不同场景下的问题我们能选择最适用的机制才是最好的。1.
2022年8月12日
其他

Ftrace function graph简介

return_hooker.这个代码非常重要!parent指针具体指向哪里?我们再次回到ftrace_graph_caller函数里面准备parent参数的地方。mcount_get_lr_addr
2022年8月5日
自由知乎 自由微博
其他

Binder中的SEAndroid控制

kernel中维护了一个security_hook_list类型的数组,security_hook_list的定义如下图所示,除了常规的hlist_node/hlist_head(用以支持hash
2022年7月29日
其他

Linux Cpuidle介绍

一、引入背景先来看一个抖音场景下面的功耗表现,这个是功耗分解板拆解出来的某一款手机cpu的核压和功率,会发现它们它们的数值不是一直保持在高位,有些时间会下降到很低。这个时候有人会说下降是因为cpu上面没有任务在执行了,所以cpu就不需要工作造成功耗损失,那么就引出来一件事情,当cpu上面没有任务执行的时候,系统是如何进行cpu管理的,如果在没有任务的时候只是单纯的关闭cpu,那么下一次来一个事件的时候系统又如何兼顾此时的性能呢。在Linux
2022年7月8日
其他

Linux内核性能剖析的方法学和主要工具

PC(内存24GB)上面开启zRAM后运行如下代码:假设kswapd的PID是202,我们捕获以下kswapd的bound情况:由此我们可以看出,在上述场景下,kswapd跑起来主要是一个Back
2022年7月1日
其他

深入理解Android系统资源异常之文件描述符异常篇

一、引言本文的目标是帮助大家深入理解Android系统资源异常之文件描述符异常,对于文件描述符异常的通用检测机制,当前包括fdtrack和fdsan两种机制展开剖析。通过阅读本篇文章,期望读者可以了解到:1)什么是文件描述符2)linux
2022年6月13日
其他

如何设计一门计算机编程语言

一、概述计算机编程语言顾名思义,是用来和计算机进行沟通的语言。计算机编程语言伴随着计算机的发明,作为计算机领域各种软件的基础,不断推动着计算机技术的发展。本文中,将主要关注设计开发一种计算机编程语言,对于其他类似的语言,比如MarkDown、数据查询语言、数据交换语言等不涉及。计算机编程语言自从诞生以来,不断发展,很多已经逐渐消失在历史的长河中,当前(2022年)最流行的几门语言包括(**排名不分先后**):Python、Java、Javascript、C++、Kotlin、R、PHP、Go、C、Swift、C#等。使用计算机编程语言可能是本文读者在日常工作和生活中经常做的一件事情,那么计算机编程语言是如何设计的呢?设计和实现一门计算机编程语言复杂吗?我们什么时候有必要设计一门计算机编程语言呢?如何实现一门计算机编程语言呢?希望这篇文章能够解答上面的疑惑。二、TinyLanguage定义及功能很多人学习的第一门编程语言是C语言,C语言作为一门很古老的语言(1967年发明),至今已经有50多年的历史,但是当今依然非常流行。比如现在已经渗透到大家生活中方方面面的Linux操作系统就是主要用C语言开发的,大家在生活中见到的各种以单片机为主控的嵌入式设备也是大部分以C语言作为编程语言的。这里想表达的意思是,C语言除了历史悠久、非常流行之外,它也拥有独特的设计之美、简洁之美。我们来看一下一个简单的C语言程序:#include
2022年6月2日
其他

dex文件格式介绍

格式文档https://source.android.com/devices/tech/dalvik/dalvik-bytecode在指令格式文档中,列出了所有用到的指令类型。bytecode
2022年5月13日
其他

Mutex内核同步机制详解

task的运行状态。如果owner阻塞了或者当前cpu有resched的需求(可能唤醒更高级任务),那么就停止自旋,返回false,走入fail_unlock流程。C、如果mutex锁的owner
2022年4月22日
其他

mlock锁原理剖析

一般用户空间关联的物理页面是按需通过缺页异常的方式分配和调页,当系统物理内存不足时页面回收算法会回收一些最近很少使用的页面,但是有时候我们需要锁住一些物理页面防止其被回收(如时间有严格要求的应用),Linux中提供了mlock相关的系统调用供用户空间使用来锁住部分或全部的地址空间关联的物理页面。本文的分析基于arm64处理器架构,内核版本为Linux-5.10.27,我们会结合重点内核源代码来解析mlock是如何做到锁住进程地址空间关联的物理内存的,又是如何防止相关的物理页面被交换出去的。一、主动缺页mlock的主要代码处理流程如下,这里我们主要关注主动缺页部分:mlock处理路径中,会将VM_LOCKED标志加入到vma->vm_flags中(由于设置的地址区域有可能跨越多个vma,所以代码中会涉及到分裂和合并的操作,实质上都会设置相关的vma->vm_flags的VM_LOCKED标志),然后会调用__mm_populate来填充虚拟页对应的物理页,最终在faultin_page函数中试图查找vma中的每个虚拟页对应的物理页面(对应于follow_page_mask函数),如果没有找到会调用handle_mm_fault主动触发缺页处理。
2022年3月4日
其他

Load_balance函数情景分析

D、对于migrate_util类型的迁移,我们通过任务的util和env->imbalance来判断是否迁移了足够的utility。需要注意的是这里使用了任务的estimation
2021年11月5日
其他

Linux devfreq framework 剖析

可以根据自己的设备特性,通过填充devfreq_governor结构体和实现get_target_freq方法和event_handler,完成的自己的governor。devfreq
2020年4月17日
其他

CFS任务的负载均衡(框架篇)

B上都挂了1个任务,但是A上挂的任务是一个重载任务,而B上挂的是一个经常sleep的轻载任务,那么仅仅从runqueue深度来描述CPU负载就有失偏颇了。因此,现代调度器往往使用CPU
2020年4月3日
其他

Android ART dex2oat 浅析

android/art/dex2oat/dex2oat.cc,通过编译优化,可以提升用户日常的使用体验(包含安装速度、启动速度、应用使用过程中的流畅度等),是
2020年3月27日
其他

linux IO Block layer 解析

I/O,这种IO通过一个读/写系统调用可以往多个不连续的内存段中读/写,从而提高IO性能并且能确保访问多段内存的原子性。linux系统调用readv、writev支持scatter-gather
2020年3月20日
其他

一张图读懂内存反碎片化

分享Linux内核相关黑科技、技术文章、技术资讯和精选教程
2020年3月16日
其他

浅谈新型非易失存储

(NVM),是相对DRAM(掉电后数据丢失)而言的,指可以持久化保存数据的存储介质。广义上来说,NAND
2020年2月28日
其他

谈谈内存压缩那些事

很可能由于高阶内存分配不到而失败。另外,slub也可能导致内存碎片浪费比较严重,最坏情况下,当对象大小略大于PAGE_SIZE/2时,每个内存页接近一般的内存将被浪费。
2020年2月21日
其他

dumpsys meminfo 的原理和应用

Swap 一般情况下, 在 Android 中就是 zram, 通过压缩内存页面并将其放入动态分配的内存交换区来增加系统中的可用内存量, 压缩的都是匿名页。
2020年1月10日