- 博客(621)
- 资源 (44)
- 收藏
- 关注
原创 3.2 Android eBPF程序类型
从帮助函数中,我们可能基于内核的eBPF开放API,对eBPF的能力有一个比较细致的认识,但是这并不能让我们从全局,或者更概括的认识eBPF。eBPF程序类型能够更宏观的告诉我们,eBPF能做哪些事情
2023-09-17 22:12:37
340
原创 3.1 Android eBPF代码仓解读
前面已经介绍,Android从9.0版本开始支持eBPF,并且主要用于网络及CPU性能的监控上。它包含一个eBPF加载器和库。加载器在Andoroid init启动/system/etc/bpf/下的所有eBPF程序,ebpf程序在完成加载后,内核ebpf程序进行verify和attach,顺利的话,最终,ebpf程序会被hook或插入到指定的内核函数中,这样就可以完成对内核活动的监控。
2023-09-10 22:08:00
363
原创 [实践篇]13.24 QNX镜像编译
在QNX中镜像的编译是以build_file_tmpl(也就是以.build.tmpl为后缀的文件)为单元来实现的,且每个镜像对应一个img_name.build.tmpl。
2023-08-19 15:08:04
171
原创 [实践篇]13.23 QNX环境变量profile
env用于查看和设置环境变量。如果执行env工具不带任何参数,则可以查看当前已经支持的所有的环境变量。
2023-08-19 11:59:25
545
原创 【CGroupAndroid实践篇】四、Native Service进程启动及控制组迁移
承接上一篇,在cgroup子系统初始化完成后,init会继续执行开机流程,且通过代哦用ExecuteCommand()函数。
2023-08-13 16:14:39
134
原创 CGroupAndroid实践篇】三、Android CGroup控制组初始化
创建控制组节点(也就是在cgroup子系统层级目录下创建子目录)修改权限等
2023-08-11 22:29:20
558
原创 2.12 Android ebpf帮助函数解读(十一)
帮助函数的介绍是根据其引入内核的时间来排序介绍的,从前面包括本篇博客的介绍我们可以看到bpf最初的设计就是为网络而生的。
2023-08-02 21:30:32
461
原创 2.11 Android ebpf帮助函数解读(十)
帮助函数的介绍是根据其引入内核的时间来排序介绍的,从前面包括本篇博客的介绍我们可以看到bpf最初的设计就是为网络而生的。
2023-07-29 15:44:35
368
原创 2.10 Android ebpf帮助函数解读(九)
帮助函数的介绍是根据其引入内核的时间来排序介绍的,从前面包括本篇博客的介绍我们可以看到bpf最初的设计就是为网络而生的。
2023-07-29 15:30:02
463
原创 2.8 Android ebpf帮助函数解读(七)
帮助函数的介绍是根据其引入内核的时间来排序介绍的,从前面包括本篇博客的介绍我们可以看到bpf最初的设计就是为网络而生的。
2023-07-22 15:16:25
248
原创 2.9 Android ebpf帮助函数解读(八)
帮助函数的介绍是根据其引入内核的时间来排序介绍的,从前面包括本篇博客的介绍我们可以看到bpf最初的设计就是为网络而生的。
2023-07-22 15:15:47
147
原创 2.7 Android ebpf帮助函数解读(六)
帮助函数的介绍是根据其引入内核的时间来排序介绍的,从前面包括本篇博客的介绍我们可以看到bpf最初的设计就是为网络而生的。
2023-07-11 21:35:06
390
原创 2.6 Android ebpf帮助函数解读(五)
帮助函数的介绍是根据其引入内核的时间来排序介绍的,从前面包括本篇博客的介绍我们可以看到bpf最初的设计就是为网络而生的。
2023-07-08 19:03:21
397
原创 2.5 Android ebpf帮助函数解读(四)
帮助函数的介绍是根据其引入内核的时间来排序介绍的,从前面包括本篇博客的介绍我们可以看到bpf最初的设计就是为网络而生的。
2023-07-02 11:33:17
251
原创 2.4 Android ebpf帮助函数解读(三)
帮助函数的介绍是根据其引入内核的时间来排序介绍的,从前面包括本篇博客的介绍我们可以看到bpf最初的设计就是为网络而生的。
2023-06-24 12:22:09
487
原创 2.3 Android ebpf帮助函数解读(二)
帮助函数的介绍是根据其引入内核的时间来排序介绍的,从前面包括本篇博客的介绍我们可以看到bpf最初的设计就是为网络而生的。我们继续来介绍。skb检索realm或route,也就是skb tclassid字段。所检索到的标识符是用户提供的标记,与net_cls cgroup 使用的标记类似(可参考bpf_get_cgroup_classid()帮助函数的说明),但此处标记由route(目标条目)保存而不是由task。
2023-06-11 22:38:21
466
原创 2.2 Android ebpf帮助函数解读(一)
在开始我们的helloworld之前,我们先了解下内核ebpf子系统为我们提供了哪些能力。这样我们后面编写起来才会游刃有余。
2023-06-01 23:25:34
457
原创 2.1 Android ebpf编程规则
有很多开源的库和框架可用于编写eBPF程序。而Android当然也支持BCC,不过这部分放到最后再讲。因为Android也实现了自己的eBPF加载器。从本章开始我们通过实例hello world一步步剖析在Android傻姑娘ebpf的编程,编译,加载以及在内核中实际的运行原理。加载器这一部分,我们也会独立成章,详细进行拆解。
2023-06-01 23:20:07
391
原创 1.4 Android下使能eBPF
由于eBPF可运行用户提供的eBPF程序来扩展内核,这些程序可以附加到内核中的探测点或事件,用于收集有用的内核统计信息,监控和调试。eBPF使用bpf(2)系统调用加载到内核中,并作为eBPF机器指令的二进制块由用户来提供。Android构建系统支持使用本文所述的build文件语法将C程序编译为eBPF程序。并且Android包含了一个eBPF加载器和库,这样Android可以在启动初始化阶段加载eBPF程序。
2023-05-31 23:28:00
564
原创 1.3 eBPF的工作原理初探
上一节提到过,eBPF程序是面向BPF体系结构指令集编写的,它并不直接运行在Linux内核中,我们可以理解为它是运行在eBPF虚拟机,由eBPF虚拟机来执行eBPF字节码,就像java运行在jvm一样。我们用一张原理图来看下eBPF程序的编译,加载,验证,钩子,映射等结点。如上是详细的eBPF的工作流程,首先eBPF程序是一个C语言编写的代码源文件bpf_prog.c,通过LLVM将源文件编译成bpf_prog.o对象文件(ELF)。
2023-05-29 07:17:14
462
原创 1.1 什么是eBPF?(上)
大多数介绍eBPF的文章都是用“eBPF是一种革命性的内核技术”来描绘的。这样讲一点也不夸张。因为它允许在Linux的内核中执行沙盒程序,在不改变内核源码或加载内核模块的前提下直接地,安全地,快捷地扩展内核,并改变内核的行为。可以想像在运行时,将用户空间的eBPF程序加载到内核中是如何的一种颠覆。不像应用程序,由于内核拥有全局查看并控制整个操作系统的特权,其核心角色和对于稳定性和安全性的要求非常严格,这也成为了内核持续演进的阻碍,这也导致Linux操作系统级别的创新比较低。
2023-05-26 23:05:47
647
原创 eBPF - 开篇
近年来,eBPF发展比较快,越来越受很多大厂的追捧,一些Top手机厂商,云厂商都有针对性的开发了一些实用工具来帮助更好的监控系统基础能力和性能。作为操作系统的从业者,我们很难不去学习,尤其在“降本增效”的当下,eBPF能为我们的开发和优化带来颠覆性的影响。虽然很难去综合地针对每一部分去拆解,去学习。但还是有一些入门的技巧。接下来我们会系统地来讨论,为什么eBPF那么地受追捧,功能那么的强大。当然我们也会参照官网运行一些示例来帮助更好的理解eBPF的编译,加载以及校验和运行。
2023-05-25 23:05:15
629
原创 Linux内存从0到1学习笔记(6.13 libc库对内存管理之ptmalloc)--- 更新中
今天介绍的ptmalloc其实是指GNU libc中默认的内存分配器,目前普遍使用的ptmalloc实际上是基于早期malloc(dlmalloc)的基础上演进而来。相对于dlmalloc,ptmalloc增加了动态分配去(dynamic arena)每一个分配区利用互斥锁(mutex)使线程对于该分配区的访问互斥。进程可以是单线程,也可以是多线程,因此每个就进程可以有一个主分配区和多个线程分配区。
2023-05-15 22:55:52
387
原创 Linux内存从0到1学习笔记(6.12 应用程序是如何申请内存的呢?)
前面提到了应用程序大多基于glibc的malloc/free进行内存的分配。这里不讨论共享内存,因为共享内存都是预先分配好的,所以由共享内存mmap和shm所设计的内存泄漏比较少见。接下来我们从应用调用的维度来看下,应用程序都有哪些调用入口,以及它们是如何申请和释放内存的。
2023-05-08 22:02:52
406
原创 Linux内存从0到1学习笔记(6.11内存管理总结)
我们常说的内存优化常常要进行分层优化,且应用程序的优化是我们的主要战场。这里的分层优化分别指应用程序层,和中间层(libc.so),内核层。
2023-05-03 22:18:36
106
原创 [实践篇]13.22 la qcom平台Watchdog Bark/Bite学习总结
对于la系统,我们常见的几种重启情况包括内核态重启和用户态重启。内核空间的重启又包括电源状态异常导致的重启,内核看门狗的狗咬狗叫重置,以及内核子系统/驱动/其他模块异常导致的Panic Crash。今天我们还是先聚焦看门狗的狗咬和狗叫。
2023-03-19 21:53:44
657
1
原创 [实践篇]13.21 la qcom watchdog学习笔记
wdt定时器配置了一个狗叫-Bark和狗咬-Bite时间,如果没有在规定的时间周期内喂狗-Pet,即系统出现无响应的情况,则需要被重置。狗叫超时会导致狗叫中断和内核panic。也就是说如果wdt定时器没有被及时重置,则会发生狗咬事件,这个事件是一种安全模式下的中断,会通过wdt触发soc重置。驱动要像狗叫和狗咬中断一样,将喂狗超时和狗叫超时编写到wdt中。
2023-02-25 21:33:01
591
原创 [实践篇]13.20 Qnx进程管理slm学习笔记(三)
QNX系统的启动包括系统基础服务,中间件服务,以及各式各样的应用进程。它们之间有着千丝万缕的联系和相互依赖,因此这些进程需要在一些特定的时序下有序启动,以保证系统的正常启动和运行。此外,系统物理资源非常有限,在高负载的业务并发场景下,可能会存在严重的资源竞争,那么进程优先级管理也是很重要的。我们既要保证系统基础服务持续提供能力,也要确保用户的极致体验,这就需要对进程进行合适的管理和监控。
2023-02-12 21:17:57
521
原创 [实践篇]13.19 Qnx进程管理slm学习笔记(二)
QNX系统的启动包括系统基础服务,中间件服务,以及各式各样的应用进程。它们之间有着千丝万缕的联系和相互依赖,因此这些进程需要在一些特定的时序下有序启动,以保证系统的正常启动和运行。此外,系统物理资源非常有限,在高负载的业务并发场景下,可能会存在严重的资源竞争,那么进程优先级管理也是很重要的。我们既要保证系统基础服务持续提供能力,也要确保用户的极致体验,这就需要对进程进行合适的管理和监控。
2023-02-12 15:50:09
530
原创 [实践篇]13.18 Qnx进程管理slm学习笔记(一)
QNX系统的启动包括系统基础服务,中间件服务,以及各式各样的应用进程。它们之间有着千丝万缕的联系和相互依赖,因此这些进程需要在一些特定的时序下有序启动,以保证系统的正常启动和运行。此外,系统物理资源非常有限,在高负载的业务并发场景下,可能会存在严重的资源竞争,那么进程优先级管理也是很重要的。我们既要保证系统基础服务持续提供能力,也要确保用户的极致体验,这就需要对进程进行合适的管理和监控。
2023-02-12 11:10:09
702
原创 [实践篇]13.17 时间不同步怎么办?
在项目开发过程中,对于大部分开发和质量的同学来说,拥有一套完整的硬件开发环境是非常奢侈的。没有wifi,没有tbox等的情况下,除了影响部分业务的提测,在遇到问题时由于时间不同步导致的第一现场时间不准确,也会干扰问题的分析和解决。
2023-02-12 10:54:52
136
原创 【系统稳定性】1.2 问题矩阵(一)
项目在研发过程中常常遇到的稳定性问题往往来源于如暴力测试、研发自测、测试复现、场测路试问题、老化(如Monkey等)问题、Beta测试、产线生产问题,用户舆情反馈等。
2023-01-29 22:09:47
465
原创 Linux内存从0到1学习笔记(8.14 dma-buf内存调试二 bufinfo介绍)-- 更新中
bufinfo是我们调试dmabuf使用的一个非常有效的debug 信息。因此我们需要了解下它的由来以及记录的关键信息。并且根据场景需要来对跟踪的信息进行调整和完善,以满足我们的调试需要。
2023-01-11 22:23:48
836
原创 [实践篇]13.16 vmm_service监听qvm事件原理及其自定义事件详解
前面通过【实践篇】13.11扒一扒qvm与vmm之间的那点事儿,我们了解到vmm_service通过监听vmm设备节点,来接收qvm的状态事件或控制等信息,并根据对应的状态进行相关的处理,以满足系统服务的鲁棒性,下面我们来聊一聊虚拟机事件的收发原理。
2023-01-07 23:03:17
680
原创 Linux内存从0到1学习笔记(8.13 dma内存调试一)
现在我们对dma-buf几个紧密关联的结构体有所了解,再结合相应的导入器,导出器使用示例,dma-buf的使用已经不再陌生。那么在日常使用过程中常常会遇到哪些问题呢?
2023-01-02 21:04:18
829
原创 Linux内存从0到1学习笔记(8.12 dma-buf导出器和导入器使用示例 四)
前面解释了使用dma_buf所涉及的几个重要的结构体以及导出器的示例,我们再来介绍下导入器具体示例。
2022-12-28 21:09:18
654
pageowner 解析工具
2022-05-13
SELinux4AndroidO
2018-02-05
recovery_l10n
2015-04-10
解决Android4.3彩信幻灯片中gif格式图片不能正常播放
2014-07-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人