pwl999's blog

  • 首页

  • 关于

  • 标签

  • 分类

Android Binder

置顶 | 发表于 2018-12-12 | 更新于 2019-01-14 | 分类于 Android |
1、binder原理纵观现有市面上所有讲binder的文章,都存在一个最大的问题:没有讲清楚binder对象是什么?不清楚binder对象是什么,那就不能理解handle是什么?不能理解什么时候是binder什么时候是handle,那就不能真正理解整个IPC的通讯过程。 我们首先回到binder的目的,就是IPC(Inter-Process Communication)进程间通讯。那么怎么样实现进程间通讯呢?要素有三个: 函数指针; 函数参数; 函数返回值; binder通讯的本质实际上非常 ...
阅读全文 »

Systrace

置顶 | 发表于 2018-10-29 | 更新于 2019-01-14 | 分类于 Trace |
上图基本就能说清systrace的整个框架: 1、systrace调用atrace抓取目标机的trace数据; 2、systrace把trace数据和’prefix.html’、’suffix.html’、’systrace_trace_viewer.html’合成一个’trace.html’文件; 3、使用chrome浏览器打开’trace.html’就可以非常方便的以图形化的形式来查看和分析trace数据。背后是Trace-Viewer的脚本在运行; 内核态和用户态的存储trace数据 ...
阅读全文 »

Linux bpf+bcc (Index)

置顶 | 发表于 2018-10-16 | 更新于 2019-01-14 | 分类于 Trace |
1、内核态解析:1.1、bpf内核框架2、用户态(前端)解析:2.1、bcc3、参考资料:3.1、Berkeley Packet Filter (BPF) (Kernel Document) 3.2、BPF and XDP Reference Guide3.3、DTrace for Linux 2016 3.4、bcc/BPF Tool End-User Tutorial 3.5、bcc Python Developer’s Tutorial 3.6、bcc Reference Guide 3. ...
阅读全文 »

Linux Perf (Index)

置顶 | 发表于 2018-08-03 | 更新于 2019-01-14 | 分类于 Trace |
1、内核态解析:1.1、perf_event内核框架1.2、tracepoint events1.3、software events 1.4、hardware events2、用户态解析:2.1、simpleperfperf工作的基础是trace数据的采集和分析,但是当铺天盖地的trace数据采集上来的时候该如何分析?答案是具体数据具体分析。 perf在trace数据分析方面取得了很多成果,针对一系列具体场景给出了具体的分析工具(子命令): perf list。 perf stat。 pe ...
阅读全文 »

Linux Ftrace (Index)

置顶 | 发表于 2018-06-15 | 更新于 2019-01-14 | 分类于 Trace |
1、Ftrace原理和代码分析:1.1、ring buffer1.2、trace event1.3、tracer (function、function_graph、irq_off) 1.4、kprobe event1.5、syscall event2、Ftrace的使用指南:2.1、ftrace的使用2.2、trace event的使用2.3、kprobe event的使用2.4、uprobe event的使用Ftrace从字面上理解=Function trace,但是发展到现在已经不仅仅是fu ...
阅读全文 »

Device Tree 详解

置顶 | 发表于 2018-03-20 | 更新于 2019-01-14 | 分类于 Linux |
1、DTS语法对于DeviceTree的来历和用处大部分人都已经非常了解了,DeviceTree发源于PowerPC架构,为了消除代码中冗余的各种device注册代码而产生的,现在已经成为了linux的通用机制。 DeviceTree的结构非常简单,由两种元素组成:Node(节点)、Property(属性)。下图是一个真实的简单的DeviceTree树形结构图。 Node节点。在DTS中使用一对花括号”node-name{}”来定义; Property属性。在Node中使用”property ...
阅读全文 »

Linux Schedule

置顶 | 发表于 2017-12-16 | 更新于 2019-01-14 | 分类于 Linux |
1、Linux schedule框架(调度的时刻) Linux进程调度(schedule)的框架如上图所示。 本文的代码分析基于linux kernel 4.4.22,最好的学习方法还是”RTFSC” 1.1、中心是rq(runqueue)rq其实是runnable queue,即本cpu上所有可运行进程的队列集合。每个cpu每种类型的rq(cfs/rt)只有一个,一个rq包含多个runnable的task,但是rq当前正在运行的进程(current running task)只有一个。 既 ...
阅读全文 »

Linux Interrupt

置顶 | 发表于 2017-10-11 | 更新于 2019-01-14 | 分类于 Linux |
在面试的时候我们常常问或者被问一个问题:几种中断下半部机制softirq、tasklet、workqueue有什么区别?linux为什么要设计这几种机制?真正能够回答清楚的人还是少数的。下面我们就详细分析一下这其中的区别。 本文的代码分析基于linux kernel 3.18.22和arm64架构,最好的学习方法还是”RTFSC” 1. linux中断arm64和其他所有cpu架构的中断处理流程都是一样:正常执行流程被打断进入中断服务程序,保护现场、处理中断、恢复现场: [^ARMPG] 在 ...
阅读全文 »

Linux 进程的Stop,Park,Freeze

置顶 | 发表于 2017-10-11 | 更新于 2019-01-14 | 分类于 Linux |
在调试内核的时候,经常会碰到几个相近的概念:进程stop、进程park、进程freeze。这几个名词看起来都是停止进程,那么他们之间的区别和应用场景在分别是什么呢?下面就来分析一番。 本文的代码分析基于linux kernel 3.18.22,最好的学习方法还是”RTFSC” 1.进程stop进程stop分成两种:用户进程stop和内核进程stop。 用户进程stop可以通过给进程发送STOP信号来实现,可以参考“Linux Signal”这一篇的描述。但是对内核进程来说不会响应信号,如果碰 ...
阅读全文 »

Linux Workqueue

置顶 | 发表于 2017-10-11 | 更新于 2019-01-14 | 分类于 Linux |
workqueue是内核里面很重要的一个机制,特别是内核驱动,一般的小型任务(work)都不会自己起一个线程来处理,而是扔到workqueu中处理。workqueue的主要工作就是用进程上下文来处理内核中大量的小任务。 所以workqueue的主要设计思想:一个是并行,多个work不要相互阻塞;另外一个是节省资源,多个work尽量共享资源(进程、调度、内存),不要造成系统过多的资源浪费。 为了实现的设计思想,workqueue的设计实现也更新了很多版本。最新的workqueue实现叫做C ...
阅读全文 »
123
pwl999

pwl999

RTFSC(Read The Fucking Source Code)

30 日志
3 分类
22 标签
© 2019 pwl999
由 Hexo 强力驱动 v3.8.0
|
主题 – NexT.Gemini v6.6.0