自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

内核工匠

内核工匠秉承开源精神,分享Linux内核相关黑科技、技术文章、技术资讯和精选教程,文章首发在微信公众号“内核工匠”(Linux-Tech),欢迎大家关注,共同交流探讨

  • 博客(154)
  • 收藏
  • 关注

原创 Perfetto工具集之traced_perf

1.Perf工具概览linux中包含了众多性能分析工具,perf(特指linux-tools perf)工具是2009年在linux内核2.6.31中引入的一个工具。它的主要功能是可以跟踪hardware performance counter(PMU)、tracepoints、software performance counter(hrtimer)、dynamic probes等信息。linu...

2023-01-20 17:00:40 940

原创 CHRE架构简介

一、CHRE定义与用途CHRE全称为Context Hub Runtime Environment,是Google提供的在低功耗处理器上运行应用程序而实现的一个通用软件平台。CHRE具有简单、标准化、嵌入式支持友好的特点,应用在需要始终在线运行或需要频繁上下文交互,并且算力要求不高的场景,广泛运用在Android系统开发,为传感器、蓝牙、Wifi、音频等模块提供了友好的API支持。二、CHRE架构...

2023-01-13 17:00:52 286

原创 CFS组调度

注:本文缩写说明一、CFS组调度简介1.1. 存在的原因总结来说是希望不同分组的任务在高负载下能分配可控比例的CPU资源。为什么会有这个需求呢,比如多用户计算机系统每个用户的所有任务划分到一个分组中,A用户90个相同任务,而B用户只有10个相同任务,在CPU完全跑满的情况下,那么A用户将占90%的CPU时间,而B用户只占到了10%的CPU时间,这对B用户显然是不公平的。再或者同一个用户,既想-j6...

2023-01-06 17:00:34 295

原创 Alarm介绍

一、背景Alarm用于实现Android中的定时任务,在Android的各个架构层次都有广泛的应用,和timer不同的是,timer在系统休眠后不会触发,而alarm在系统休眠后,可以借助RTC唤醒系统。在功耗调试过程中,也会遇到alarm频繁唤醒系统导致功耗高的情况,所以梳理alarm的整体流程是有必要的。本文主要介绍alarm整体流程和从功耗角度关注的部分细节,如alarm唤醒类型,alarm...

2022-12-30 17:00:38 390

原创 Android电源管理介绍

一、电源管理基础知识1.1电源管理的几种状态Android kernel源码中,定义了三种电源状态,在kernel/power/suspend.c中:对应的宏定义/include/linux/suspend.h1.2 电源管理状态的介绍:PM_SUSPEND_ON设备处于正常工作状态PM_SUSPEND_STANDBY设备处于省电状态,但还可以接收某些事件PM_SUSPEND_MEM设备进入睡眠状...

2022-12-23 17:00:36 888 1

原创 TEEOS基础特性安全存储技术简介

1、安全存储简介安全存储是TEEOS重要特性之一,安全存储主要用来为用户保存敏感数据如密钥等信息。用户在使用安全存储功能保存数据时会在TEE内对数据进行加密,然后保存到REE侧的相关存储区域中。根据对数据存储的安全性要求和使用场景TEE常见的安全存储一般分为RPMB安全存储、SFS安全存储。RPMB安全存储是eMMC中的一个具有安全特性的分区,其特点是非安全世界不可见,可以防止重放和回滚攻击,但是...

2022-12-16 17:00:07 178

原创 单机存储系统可靠性及相关技术介绍

一、存储系统可靠性的影响因素单机存储系统包括存储硬件和存储软件。存储硬件又包含存储介质、存储控制器、设备固件;存储软件栈层次则更为复杂,以Linux为例包括:存储设备驱动层、 块设备层(Block Layer)、可选的虚拟块设备层(Device Mapper)、文件系统层等。如下图所示,各个层次可进一步细分,整个存储栈非常复杂庞大。存储系统的可靠性依赖各层硬件和软件的可用性,另一方面也包括存储系统...

2022-12-09 17:00:47 333

原创 TEE安全系统SMC深入理解

1、TEE背景在文章开始之前提几个问题:Android手机中至少运行着几个操作系统OS?如何进入安全操作系统?异常等级和安全操作系统之间的关系?SMC调用的实质、约定及流程是什么?随着智能手机的普及,手机上数据的价值越来越高,如电子支付密码(包括传统密码、指纹、人脸),带版权信息的数据等。为了进一步保护这些数据的安全,ARM提出了trustzone技术,其原理是将cpu的工作状态和其它相关硬件资源...

2022-12-02 17:00:41 1122

原创 DRM架构介绍(一)

1、 DRM简介(Direct Rendering Manager)传统linux显示设备驱动开发时,通常使用FB驱动架构,随着显卡性能升级:显示覆盖(菜单层级)、GPU加速、硬件光标,传统FB架构无法很好支持,此外,对于多应用的访问冲突也无法很好控制。在这样的背景下,DRM应用而生。DRM是linux内核中负责与显卡交互的管理架构,用户空间很方便的利用DRM提供的API,实现3D渲染、视频解码和...

2022-11-25 17:00:01 1515 1

原创 Linux Scheduler之rt选核流程

本文主要从代码的角度讲述了Linux rt选核的主要流程,旨在让读者对于rt线程及其选核逻辑有一个初步的认识,利用rt线程的优点,可以解决当前系统中因为调度延迟引起的一些性能问题。

2022-11-21 16:28:23 157

转载 重要通知! 首届中国eBPF大会全程线上直播议程发布

首届中国eBPF大会线上议程更新 受新冠疫情影响,经会议组委会反复权衡,2022首届中国eBPF大会将于11月12日通过线上直播的形式举行,内容丰富,精彩纷呈,欢迎大家的参与。议程速览采得百花终成蜜,经历了无数困难,朝思暮想的eBPF大会终于即将到来了。通过线上直播,相信会吸引更多小蜜蜂的到来,那么就请小蜜蜂们来看看这场百花大会将有哪些花朵争芳斗艳吧~小伙伴们找到自己感兴趣的课题了吗?...

2022-11-11 17:00:22 32

转载 【直播预告】从A76到 A78——在变化中学习ARM微架构

伴随智能手机高速发展,处理器架构设计开发ARM公司几乎每年都更新CPU的核心架构。从2018年至2020年,ARM公司基于ARMv8架构推出了三代Cortex-A76、Cortex-A77、Cortex-A78 CPU内核架构。基于这几代CPU架构,芯片设计厂商也设计了多款性能优异的处理器产品。2022年11月13日在直播间等你解答遇到的难题1讲师介绍程杰,东南大学硕士毕业,毕业后加入高通公司从事...

2022-11-04 17:00:50 324

原创 CFS线程调度机制分析

一、前言操作系统上运作着各种应用、服务来满足用户需求,这些应用、服务实现的功能,通常都会依托一个个具体的线程来完成。在2022年的今天,无论是手机用户还是平台厂商,都不会容忍一台手机的功能仅限于单一的通信功能。手机设备不比服务器,其多核架构体系上只存在8个cpu core,而执行线程的数量却轻而易举超过8个。每个cpu上该执行什么线程,是由linux线程调度器来进行决策的,关于这一部分,网上已经有...

2022-11-04 17:00:50 1040

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

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

2022-10-28 17:00:59 654

转载 DirtyPipe 利用(CVE-2022-0847)

事件背景3月初,国外安全研究人员披露了一个新的Android/Linux内核的高危漏洞,漏洞编号为CVE-2022-0847。由于类似大名鼎鼎的DirtyCOW(脏牛)漏洞,又被命名为DirtyPipe(脏管道)。漏洞从上游linux内核5.8版本的一个补丁引入,影响所有使用linux内核的操作系统,在最新的手机系统Android12+kernel5.10上也有巨大安全危害。经过我们内部研究发现,...

2022-10-21 17:00:21 829 1

转载 时间变动通知|第17届CLK大会将于10月23日线上直播

各位亲爱的小伙伴:由于疫情和不可抗力的原因,经 CLK 组委会商讨,会议将延期一天举行,于 10 月 23 日通过直播形式进行,欢迎大家参与。除了满满的干货,我们还准备了千元京东卡、书籍等 100+ 份礼品,将在抽奖环节赠送给大家,不见不散哦!线上直播通道PART 1 上午专场主论坛9:00~11:50扫码或通过链接访问:https://live.csdn.net/room/csdnlive1...

2022-10-21 17:00:21 54

原创 Hungtask原理及分析

一、简介Linux系统在运行过程中,可能发生各种各样的卡死情况。有的表现为某个或某些CPU无法调度其他进程或无法响应中断,如正在CPU上运行的进程禁止了抢占或禁止了本地中断后,但其需要的资源一直无法获得(如发生了死锁等情况),而一直占据着CPU;有的表现为某些重要进程一直不能运行,虽然不至于使某个或某些CPU上无法调度其他进程,但由于重要进程运行异常,系统已无法正常进行业务处理,例如重要进程长期处...

2022-10-14 17:00:17 603

转载 Android蓝牙协议栈漏洞剖析

一.背景介绍蓝牙协议相对于其他通信协议如WIFI(802.11)、传统TCP/IP议协等来说,更为复杂,目前蓝牙核心规范(5.3)高达3085页。蓝牙的这种复杂性使得对蓝牙的各个协议的实现进行安全测试与审计变得相对困难,从而导致协议的实现和使用容易出现较多的安全漏洞。但是从另一方面来说,它的复杂性也会要求研究员或攻击者进行漏洞挖掘的技术门槛变得相对更高,需要突破的难点也会更多。图1 蓝牙核心规范...

2022-09-30 17:00:15 266

原创 futex问答

一、什么是futex?futex是Fast Userspace muTEX的缩写,该机制是由Rusty Russell、Hubertus Franke和Mathew Kirkwood在2.5.7版本的内核中引入,虽然名字中有互斥锁(mutex)的含义,但实际它是一种用于用户空间应用程序的通用同步工具(基于futex可以在userspace实现互斥锁、读写锁、condition variable等同...

2022-09-23 17:00:07 347

原创 Cryptocell-712安全引擎概述

一、基于trustzone的SoC里有什么?Trustzone是ARM架构的安全扩展,是一个系统级别的安全方案,包括硬件方案和软件方案。在一个支持Trustzone的SoC上,硬件IP包括:CPU:目前主要的Cortex-A系列CPU都实现TrustZone安全扩展。Trustzone system IP:SoC内部支持TrustZone扩展的MMU、Cache、Bus、GIC、TZASC、TZP...

2022-09-16 17:00:31 512

原创 减少无线链接切换导致数据体验变差的技术简介

一 、问题背景现在的智能终端普遍存在多种无线资源,比如比较常见的Wifi链接和蜂窝(Celluar)链接,目前的智能终端设备,普遍的做法是在同一时间,终端只使用其中一种无线资源作为通信传输。随着用户的移动,受限于无线资源存在的覆盖区域限制,势必会发生在多种无线资源之间的链路切换,而这个切换就会带来断开和重建链路的时间开销,反映在用户感知上就会出现卡顿或者断流,严重影响用户的数据体验。下图是Zoom...

2022-09-09 17:00:35 270

原创 Perfetto分析进阶

一、Perfetto介绍Perfetto是AndroidQ中引入的全新下一代平台级跟踪工具,为Android、Linux和Chrome平台提供了一种通用的性能检测和跟踪分析工具集。其核心是引入了一种全新的用户空间到用户空间的跟踪协议,该协议基于protobuf序列化机制将抓取的数据填充到共享内存缓冲区,可用于获取平台内部的内置数据源(例如ftrace、atrace、logcat),也提供了SDK...

2022-09-02 17:00:29 4287

原创 原理和实战解析Linux中如何正确地使用内存屏障

圈里流传着一句话“珍爱生命,远离屏障”,这足以说明内存屏障是一个相当晦涩和难以准确把握的东西。使用过弱的屏障,会导致软件不稳定。使用过强的屏障,会引起性能问题。所以工程上,追求恰到好处、不偏不倚的屏障。本文力求用最浅显的语言,讲清楚内存屏障最晦涩的道理,本文也会给出五个工程案例,这些案例皆见于开源的代码,不涉及任何组织和个人未公开的技术。一、引子我国古代著名程序猿韩愈曾经写下一个名为《春雪》的函数...

2022-08-27 08:00:02 375 4

原创 超标量处理器

一、引言处理器(central process unit,简称CPU)是手机的核心部件,其主要功能是取指令并译码执行。CPU主要包括控制器和运算器两个部件,它对在手机中的所有硬件资源(如存储器,输入输出单元)进行控制调配,执行运算。在系统中所有软件层的操作,最终都将通过指令集映射为CPU的操作,因此,它的性能高低直接影响着用户的体验。得益于半导体工艺的进步,架构的演进,CPU的性能不断地提升。然而...

2022-08-19 17:10:25 3014 1

原创 读写信号量

一、前言最近参加了很多D状态导致卡顿问题的分析,都是在等待内核中的某一把mutex或者rwsem锁。mutex比较简单一些,只会有一个线程持锁,其它线程睡眠等待。而rwsem就稍显复杂,会存在多个线程同时持锁,导致等待的线程睡眠很长时间的情况。并且,我们对rwsem锁传递的优化,只能是writer持锁才能传递,reader持锁时传递不了。为了弄明白其中的原理,决定认真看一...

2022-08-12 17:00:15 486

原创 Ftrace function graph简介

引言由于android开发的需要与systrace的普及,现在大家在进行性能与功耗分析时候,经常会用到systrace跟pefetto. 而systrace就是基于内核的event tracing来实现的。以如下的一段pefetto为例。可以看到tid=1845的线程,在被唤醒到CPU5上之后,在runnable状态上维持了503us才开始运行,一共运行了498us.通过...

2022-08-05 17:40:13 418

原创 Binder中的SEAndroid控制

前言Binder 也即Android独有的进程间通信方式,在 Android 系统中无处不在。区别于共享内存、socket、管道等其他进程间通信的手段,Binder 的实现较为独特。从本质上讲,Binder 是借由对/dev/binder 的一系列操作实现的,在内核中作为驱动存在,当然其权限控制可以正常借由Linux的安全模块实现。同时,由于所有系统服务都需要在Servi...

2022-07-29 17:50:59 434

原创 从A76到A78——在变化中学习ARM微架构

一、引言伴随智能手机的高速发展,移动处理器架构设计厂商ARM公司几乎每年都更新CPU的核心架构。从2018至2020年,ARM公司基于ARMv8架构推出了三代Cortex-A76、Cortex-A77、Cortex-A78经典CPU核心架构。基于这几代CPU架构,芯片设计厂商也设计了多款性能优秀的处理器产品。本文从A76微架构开始学习,通过对比每一代的变化,让读者了解处理...

2022-07-22 17:39:17 3031

原创 手机平台上的用户空间锁概述

前言作为一个长期工作在内核的工程师,本无意去窥探上层锁机制的秘密。然而实际工作中你就会发现,无论是内核锁还是用户空间锁,其基本原理都是一样的。这样,所有在内核锁上的优化其实都可以平移到用户空间,实现“一鱼两吃”,也是美事一桩。不过,手机平台上,上层代码是Java或者C++语言写的,作为c程序员,对Java和C++都几乎是一无所知,在探索上层锁的过程中也是“滴滴血泪”,不足...

2022-07-15 17:00:06 253

原创 Linux Cpuidle介绍

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

2022-07-08 17:13:23 1550

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

计算机科学的先驱Donald Knuth(高德纳)曾经说过:“过早的优化是万恶之源”,更详细的原文如下:“We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should no...

2022-07-01 17:00:02 935

原创 自旋锁探秘

一、前言本公众号之前已经有了一篇关于spinlock的文档(Linux kerenl同步机制(上篇)),在之前的文章中有对自旋锁进行简单的介绍,同时给出了API汇整和应用场景。不过该文章中的自旋锁描述是基于比较老的内核版本,那时候的自旋锁还是ticket base锁,而目前最新内核中的自旋锁已经进化成queued spinlock,因此需要一篇新的自旋锁文档来跟上时代。此...

2022-06-24 17:00:55 340

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

一、引言本文的目标是帮助大家深入理解Android系统资源异常之文件描述符异常,对于文件描述符异常的通用检测机制,当前包括fdtrack和fdsan两种机制展开剖析。通过阅读本篇文章,期望读者可以了解到:1)什么是文件描述符2)linux kernel中如何使用文件描述符,来管理进程打开文件资源3)android fdsan机制设计思路与实现4)android fdtra...

2022-06-13 17:00:46 858

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

一、概述计算机编程语言顾名思义,是用来和计算机进行沟通的语言。计算机编程语言伴随着计算机的发明,作为计算机领域各种软件的基础,不断推动着计算机技术的发展。本文中,将主要关注设计开发一种计算机编程语言,对于其他类似的语言,比如MarkDown、数据查询语言、数据交换语言等不涉及。计算机编程语言自从诞生以来,不断发展,很多已经逐渐消失在历史的长河中,当前(2022年)最流行的...

2022-06-02 18:06:50 1772

原创 UEFI简介

前言大多数人接触UEFI都是在PC的应用场景上,有在PC上安装过多操作系统的经历的同学,通常会进入UEFI界面设置操作系统引导顺序、CPU虚拟化等设置。UEFI诞生之初也确实是作为BIOS的替代者,主要应用在PC电脑上。随着手机/平板等移动设备的发展,高通从MSM8998开始使用UEFI替代LK(Little Kernel)作为手机的Bootloader,作为一个嵌入式开...

2022-05-31 17:02:12 5430

原创 Linux中断子系统之中断映射

中断是当前计算机系统的基础功能,也是系统响应外设事件的必备桥梁。不同的架构对中断控制器有不同的设计理念,本文针对ARM公司提供的通用中断控制器(GIC,Generic Interrupt Controller)介绍在linux系统中的硬件中断号与软件中断号的映射过程。首先,我们先来理解一下硬件中断号和软件中断号。硬件中断号:GIC为每一个硬件中断源都分配了一个唯一编号,称...

2022-05-20 17:00:59 630

原创 dex文件格式介绍

前言dex(Dalvik Executable)是Android平台源代码文件(java,kotlin)经过编译、重构、重排、压缩、混淆后的字节码文件,是对传统的class 文件再处理。dex 更适合于资源有限的嵌入式设备使用,和class 文件比,dex 明显的优势主要表现在下面两个方面1)体积更小,dex 在class的基础上,将多个class 文件特征进行统一处...

2022-05-13 17:00:00 3008

原创 调度器分支之RTG

一、引言网上关于RTG内容很少,本文以作者个人的理解为主,难免存在偏差与瑕疵,欢迎指正。本文以codeaurora的https://source.codeaurora.cn/quic/la/kernel/msm-4.14/代码及msm-5.4进行分析。在详细介绍rtg之前,需要了解一下rtg的背景。Rtg叫着related thread group.顾名思义“相关线程组”...

2022-04-29 17:00:00 2481 1

原创 Mutex内核同步机制详解

一、Mutex锁简介在linux内核中,互斥量(mutex,即mutual exclusion)是一种保证串行化的睡眠锁机制。和spinlock的语义类似,都是允许一个执行线索进入临界区,不同的是当无法获得锁的时候,spinlock原地自旋,而mutex则是选择挂起当前线程,进入阻塞状态。正因为如此,mutex无法在中断上下文使用。和mutex更类似的机制(无法获得锁时都...

2022-04-22 17:00:00 10

原创 BatteryHistorian Android手机耗电分析神器

Battery-Historian是谷歌推出的一款专门分析Bugreport的工具,是谷歌2015年I/O大会上推出的一款检测运行在android5.0(Lollipop)及以后版本的设备上电池的相关信息和事件的工具,是一款对于分析手机状态,历史运行情况很好的可视化分析工具。当设备在使用电池的时候,它可以使开发者们看到系统级和应用级事件图表,在图表时间轴上可以缩放和平移,...

2022-04-15 17:00:00 4383

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除