pwl999's blog

  • 首页

  • 关于

  • 标签

  • 分类

Linux Signal

置顶 | 发表于 2017-10-11 | 更新于 2019-01-14 | 分类于 Linux |
信号的基本使用场景:使用“ctrl+c”中止一个程序,或者使用”kill pid”命令杀掉一个进程。Linux信号机制基本上每个同学都用过,但是信号的具体实现机制还是有很多人不清楚的。在很多人的概念中信号是一种异步机制,像中断一样。但是除了硬中断,信号也是由中断实现的吗?如果不是中断,系统又怎么样来利用软件机制模拟类似如异步中断的动作? 本文的代码分析基于linux kernel 3.18.22,最好的学习方法还是”read the fucking source code” 1.信号的响 ...
阅读全文 »

Linux Time

置顶 | 发表于 2017-10-11 | 更新于 2019-01-14 | 分类于 Linux |
1、Linux时钟框架[^DroidPhoneo] 上图是linux时钟框架一个经典的描述。本质上linux各种时钟架构和服务是基于硬件提供的两种timer而构建的。 1、定时Timer 这类timer每个cpu都有一个独立的,称为local timer。这类timer的中断一般都是PPI(Private Peripheral Interrupt)类型,即每个cpu都有独立一份中断。 与PPI对应的是SPI(Shared Peripheral Interrupt,即多个cpu共享同一个中断。 ...
阅读全文 »

Linux BPF 2.1、bcc

发表于 2018-10-16 | 更新于 2019-01-14 | 分类于 Trace
bcc全称为(BPF Compiler Collection),它是模仿gcc(GNU Compiler Collection)的命名风格。 BPF是运行在内核态的一种虚拟机语言,我们在用户态可以通过Clang+LLVM把c语言编译成BPF目标码,然后通过加载器loader(bcc/perf/iproute2)将BPF目标码通过bpf()系统调用加载到内核当中,最后通过perf的ioctl命令PERF_EVENT_IOC_SET_BPF将加载到内核中的BPF程序和对应子模块(tracing/n ...
阅读全文 »

Linux BPF 1.1、bpf内核框架

发表于 2018-09-28 | 更新于 2019-01-14 | 分类于 Trace
BPF的字面上意思Berkeley Packet Filter意味着它是从包过滤而来。如果在开始前对BPF缺乏感性的认识建议先看一下参考文档:“3.1、Berkeley Packet Filter (BPF) (Kernel Document)”、“3.2、BPF and XDP Reference Guide”。 本质上它是一种内核代码注入的技术: 内核中实现了一个cBPF/eBPF虚拟机; 用户态可以用C来写运行的代码,再通过一个Clang&LLVM的编译器将C代码编译成BPF目标 ...
阅读全文 »

Linux BPF 3.2、BPF and XDP Reference Guide

发表于 2018-09-14 | 更新于 2019-01-14 | 分类于 Trace
开源软件Cilium深度的使用了BPF来做网络安全,它的文档中使用了一个章节专门的来介绍BPF的原理和使用。 参考原文:BPF and XDP Reference Guide 注意:本文档部分针对的是希望深入了解BPF和XDP的开发人员和用户。尽管阅读本参考指南可能有助于拓宽你对Cilium的理解,但使用Cilium并不是必须的。请参考入门指南和概念以获得更高级别的介绍。 BPF是Linux内核中高度灵活和高效的类似虚拟机的构造,允许以安全的方式在各种挂起点执行字节码。它被用于许多Linux ...
阅读全文 »

Linux BPF 3.1、Berkeley Packet Filter (BPF) (Kernel Document)

发表于 2018-09-07 | 更新于 2019-01-14 | 分类于 Trace
关于bpf最早是应用于network的filter,后续才被应用到trace,所以kernel中关于bpf的文档是”Documentation/networking/filter.txt”。 参考原文:Linux Socket Filtering aka Berkeley Packet Filter (BPF) 1、简介:LSF(Linux Socket Filtering)是从BPF(Berkeley Packet Filter)派生而来。尽管BSD和Linux kernel的过滤(filte ...
阅读全文 »

Linux Perf 2.1、simpleperf

发表于 2018-08-03 | 更新于 2019-01-14 | 分类于 Trace |
因为perf原生的用户态工具(kerneldir/tools/perf)交叉编译出错较多,用户态源码分析改用android 7.0简化版simpleperf来分析。simpleperf支持完整perf命令中的一些常见子命令。 1、命令框架源码入口在system/extras/simpleperf/main.cpp: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 ...
阅读全文 »

Linux Perf 1.4、hardware events

发表于 2018-08-02 | 更新于 2019-01-14 | 分类于 Trace |
可以通过perf list命令来查看系统中的hardware event: 1234567# simpleperf list hwList of hardware events: cpu-cycles instructions cache-references cache-misses branch-misses 还有hardware-cache event: 12345678910# simpleperf list cacheList of hw-cache events: L1- ...
阅读全文 »

Linux Perf 1.3、software events

发表于 2018-07-31 | 更新于 2019-01-14 | 分类于 Trace |
可以通过perf list命令来查看系统中的software event: 1234567891011# simpleperf list swList of software events: cpu-clock task-clock page-faults context-switches cpu-migrations minor-faults major-faults alignment-faults emulation-faults 1、原理介绍:software pmu的 ...
阅读全文 »

Linux Perf 1.2、tracepoint events

发表于 2018-07-26 | 更新于 2019-01-14 | 分类于 Trace |
perf复用了ftrace中trace_event的所有插桩点(即tracepoint),trace数据即可以通过ftrace的通道提供,也可以被包装成perf_event供perf工具使用。 可以通过perf list命令来查看系统中的tracpoint event,可以看到和/sys/kernel/debug/tracing/events/路径下的trace_event一致: 1234567891011121314# simpleperf list tracepoint | moreList ...
阅读全文 »
123
pwl999

pwl999

RTFSC(Read The Fucking Source Code)

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