自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(132)
  • 资源 (1)
  • 收藏
  • 关注

原创 现代处理器结构

警告:本文章非权威,仅仅只是兴趣好吧,你可能是一个计算机专业的毕业生,也许作为学位课程的一部分你学习过硬件课程,但是也许这已经是几年前的事了,现在你也没记住多少关于处理器设计的一些细节了,那么这篇文章可能正适合于你。特别是,您可能没有意识到最近迅速发展的一些关键主题…流水线(超变量superscalar,乱序执行OOO,超长指令字VLIW,分枝预测branch prediction,假设predication)多核和同时多线程(SMT,又称超线程)单指令多数据的向量指令缓存或者内存层次结构。

2023-07-02 23:46:46 534

原创 深入ftrace uprobe原理和功能介绍

上一章我们学习了,kprobe 可以实现动态内核的注入,基于中断的方法在任意指令中插入追踪代码,并且通过 pre_handler/post_handler去接收回调。另一个 kprobe 的同族是,只不过是针对函数级别的内核监控,根据用户注册时提供的和来分别在函数进入时和返回前进行回调。本章的我们来学习uprobe ,顾名思义,相对于内核函数/地址的监控,主要用于用户态函数/地址的监控。听起来是不是有点神奇,内核怎么监控用户态函数的调用呢?

2022-11-24 08:34:19 3930 2

原创 深入ftrace kprobe原理解析

至此,我们知道Kprobe实现的本质是breakpoint和single-step的结合,这一点和大多数调试工具一样,比如kgdb/gdb。当 kprobe 被注册后,内核会将对应地址的指令进行拷贝并替换为断点指令(比如 X86 中的int 3)随后当内核执行到对应地址时,中断会被触发从而执行流程会被重定向到我们注册的函数当对应地址的原始指令执行完后,内核会再次执行从而实现指令级别的内核动态监控。也就是说,kprobe 不仅可以跟踪任意带有符号的内核函数,也可以跟踪函数中间的任意指令。

2022-11-20 22:45:59 2984

原创 深入ftrace function graph原理

我们了解了 ftrace 的两个核心机制 – 动态函数跟踪、动态函数图跟踪,二者分别向用户提供、接口来注册对函数进行跟踪以及对函数入口和返回进行跟踪的跟踪函数。最后我们以一张 ftrace 的架构图来结束本文。

2022-11-15 23:10:54 1484 2

原创 深入ftrace function原理

到此我们已经分析完了ftrace的各个阶段的行为,以及钩子函数的替换过程,基本上包含如下过程:编译阶段。通过编译选项 -pg -mrecord-mcount 在每个支持ftrace的函数中插入bl 0 指令链接阶段。会根据重定位段将bl 0 指令地址重定位为_mcount函数地址。运行阶段(1)ftrace_init:会将可trace函数中的bl _mcount替换为nop指令;

2022-11-11 22:13:51 1617 1

原创 linux进程管理(二十六) — 负载调节历代方案演变

下面是MTK的调度器的演变过程,我们顺着这个过程来学习下历代的调度器在手机系统上的演变过程。

2022-08-06 20:24:00 1099

原创 IO子系统(一) — 块设备驱动程序

所以块设备子系统,上承文件系统,下承具体的储存设备子系统,对于下层的诸多设备进行统一的抽象,以向上提供统一的块设备,起作用如下:就块设备本身来说,可以分为三层,本专题是针对这三层进行学习,了解其基本的工作原理块设备通常是以数据块大小(如512字节)为单位,能随机访问的设备,典型的块设备是系统中的储存设备,例如:硬盘、闪储、U盘等。块设备按块进行划分,具体块大小由具体设备决定,通常为扇区(512字节)的整数倍。设备自身定义的访问数据块本书称之为物理数据块,块设备中文件系统还会以若干个物理数据块为单位划分逻辑数

2022-07-01 21:56:36 1868

原创 文件系统(十二)—伪文件系统

前文中我们已经分析了文件系统,而文件系统的精髓所在是让用户可以通过文件描述符来对指定的进行一系列的操作。本章开始学习伪文件系统,伪文件系统和普通文件系统的区别在于,其对用户不可访问,即仅在内核态可见,从用户层的视角来看该文件系统并不存在。伪文件系统的作用是对一些操作系统中的元素进行封装,和普通的文件统一接口,如块设备,管道文件,套接字等。通过这种方式的统一封装,才实现了Linux一切皆文件的思想。如下图中红色的都应该算是伪文件系统,本章就学习其中的procfs/sysfs/pipefs。proc文件系统由p

2022-06-20 23:34:40 1416 1

原创 文件系统(九)—如何设计一个simplefs

对于Linux延续着Unix的一个哲学思想:一切皆文件,应用看到的所有对象都是文件。应用程序通过系统调用陷入内核中,访问内核的资源,VFS作为通用文件系统接口,通过各种不同文件系统的实现,主要是以块设备为基础的物理文件系统,例如EXT2/EXT3等,对于VFS层通过不断的演变支持了更多的文件系统,其主要是中间层,对上提供POSIX API,对下对接不同的文件系统驱动向上主要是提供file_operations抽象接口,包括文件的打开,读写,mmap映射,ioctl等,用户空间无须考虑具体的文件系统和实

2022-06-19 22:49:34 692

原创 文件系统(十二)—图解如何使用fuse文件系统

我们真实的来看怎么实现一个简单的fuse文件系统,我们还是以之前的例子,对于用户空间需要实现基于libfuse实现的应用程序hello

2022-06-05 21:24:18 1383

原创 文件系统(十一)—fuse内核实现

用户文件系统会越来越广泛使用,目前andriod12中已经到了fuse的文件系统,Android 实现了自己的 FUSE 守护程序来拦截文件访问,实施额外的安全和隐私功能,并在运行时操作文件。

2022-06-03 22:20:26 3966

原创 文件系统(十)—文件系统一致性

文件系统管理一组数据结构以实现预期的抽象:文件,目录,以及所有其他的元数据,以满足我们期望的从文件系统获得的基本抽象。文件系统必须持久化,存储在断电也能保留数据的设备上。所以文件系统面临了一个主要的挑战在于,如何在断电或者系统崩溃的情况下,更新持久化数据。如果在更新磁盘结构的过程中,机器断电,会发生什么?操作系统遇到错误并崩溃,会发生什么?本章中,我们详细探讨这个问题,看看文件系统克服它的一些方法1 背景我们假定磁盘上使用一个标准的简单的文件系统结构,类似于我们之前分析的文件系统,如下图所示

2022-05-29 20:56:54 2357

原创 文件系统(八)—文件系统的前世今生

原文:An Introduction to Linux’s EXT4 Filesystem链接: https://opensource.com/article/17/5/introduction-ext4-filesystem本文的目的是仔细阅读EXT4的历史记录,功能和最佳使用,并了解其与Ext文件系统的先前迭代的不同之处。在先前关于Linux文件系统的文章中,我写了一份说明书去介绍Linux文件系统,里面有一些高级的概念,比如说,一切都是文件。我很想去深入地讨论更多EXT文件系统的特性的信息。所以

2022-05-22 23:12:39 1117

原创 文件系统(七)—图解进程文件操作

文件系统(七)—进程文件操作学习文件系统,我们的目标是如何实现一个简单的文件系统?磁盘上需要什么结构?它们需要记录什么?如何访问?对于这些问题,我们就需要理解文件系统的基本工作原理,可以从以下两个方面着手文件系统的数据结构:文件系统在磁盘上使用哪些类型的结构来组织其数据和元数据?当一个进程打开一个文件时,会发生什么?在读取或写期间会访问哪些磁盘结构?访问方法:如何将进程发出的调用,如open()/write()/read()等,映射到它的结构上?在执行特定系统调用期间读取哪些结构本章就基于以上的

2022-05-19 22:43:46 1434

原创 文件系统(六)—文件系统mount过程

前一章学习了虚拟文件系统组成的超级块、索引节点、目录项、文件四个结构体对象,那么就开始看内核是如何建立挂载点目录项与挂载文件系统的?我们接着下面图,学习整个mount的过程。1 数据结构虚拟文件系统通过目录项dentry实例组成的跟文件系统管理内核所有的文件,具体文件系统根目录需要关联到内核跟文件系统中某一目录项**(挂载点)**才能接入跟文件系统,如下图所示将磁盘分区sda1的文件系统根目录与跟文件系统中的/mnt目录项建立关联,称之为挂载,/mnt目录项称之为挂载点根文件系统中的挂载点可以

2022-05-15 22:53:43 3020 1

原创 文件系统(五)—VFS初始化

介绍了内核虚拟文件系统的结构,具体文件系统的挂载,本文介绍虚拟文件系统的初始化。虚拟文件系统初始化工作主要包括各数据结构slab缓存的创建、管理散列表的创建,内核初始根文件系统的创建,以及挂载外部根文件系统等。内核在启动阶段需要对虚拟文件系统进行初始化,内核启动start_kernel函数中调用的与虚拟文件系统初始化相关的函数asmlinkage void __init start_kernel(void){ …… vfs_caches_init_early(); …… vfs_caches_

2022-05-08 23:45:12 1685

原创 文件系统(四)—快速文件系统

当Unix操作系统首次引入时,使用了minix文件系统,它非常简单,基本上,它的数据结构在磁盘上看起来像是这样:超级块包括了有关整个文件系统的信息,卷大小,有多少inode,有多少空闲块等等,磁盘的inode区域包括文件系统的所有inode,最后,大部分磁盘都被整个数据块占用。对于非常常见的读操作,每当第一次读取inode,然后读取文件的数据块时,就会导致寻道时间很长更糟糕的是,文件系统最终会变得非常的碎片化,该设计没有对空闲空间的管理,结果导致在磁盘上来回访问逻辑上连续的文件,从而大大的降低了性

2022-05-03 12:15:09 1227

原创 Linux 内核 VS 内存碎片 (上)

转载:https://pingcap.com/zh/blog/linux-kernel-vs-memory-fragmentation-1(外部)内存碎片是一个历史悠久的 Linux 内核编程问题,随着系统的运行,页面被分配给各种任务,随着时间的推移内存会逐步碎片化,最终正常运行时间较长的繁忙系统可能只有很少的物理页面是连续的。由于 Linux 内核支持虚拟内存管理,物理内存碎片通常不是问题,因为在页表的帮助下,物理上分散的内存在虚拟地址空间仍然是连续的 (除非使用大页),但对于需要从内核线性映射区分配连

2022-05-01 09:56:29 514

原创 文件系统(五) — 图解虚拟文件系统结构

最近一直忙于基于android的动态分区的方案和virtual A/B方案通过rust重写升级的框架,里面有将IO子系统的框架学习了,主要是基于deviceMapper的用法和实现原理,只是学习了基本的原理和如何使用,对于其最底下的IO层基本不知道如何实现,准备放到文件IO章节学习。本周末接着学习文件系统,之前了解了以下文件系统的基本知识,本次开始真正进入到内核的虚拟文件系统学习之旅。1 VFS架构我们从一个简单的问题开始,我们如何访问文件?作为一个普通的使用者,我们不太关系我们如何访问计算机上的数据,

2022-04-18 00:03:49 3080

原创 文件系统(三)—老祖宗长的什么样

文件系统(三)—老祖宗长的什么样文件系统已经发展的如此完善,同时文件系统的代码也越来越复杂,我们通过前面两章大致知道了可以如何去设计一个文件系统,所以我们有必要去了解一下linux文件系统的老祖宗长的什么样。一方面,我们可以通过这个可以了解文件系统最初的样子,更加加深的理解文件系统的理念和基础概念;另外一方面是现代的文件系统都比较庞大,不容易理解,而老的文件系统才几千行代码,理解起来比较容易。1 minix文件系统当编写原始Linux内核,Linus Torvalds需要一个文件系统,但是不想开发它。

2022-04-04 23:01:39 2343

原创 文件系统(二)—如何设计一个文件系统

前面一章主要学习了文件系统的存储和分配方式的理论知识,本章接着理论知识,如何设计一个文件系统(本章不涉及任何代码实现),其主要的内容包括如下:如何一步步设计一个文件系统,了解文件系统由那些组成当我们读写文件时底层的工作原理是什么,从组成到实现原理1. 文件系统的组成部分对于文件系统我们只需要支持两种最基本的操作:读和写,就可以解决长期的存储问题。不过,这里存在很多不便于实现的操作,特别是有很多程序或者多用户使用着的大型系统上,很容易产生一些问题,例如:如何找到对应的信息?如何防止一个用户读

2022-03-29 23:40:34 6902 1

原创 文件系统(一)---文件系统基础知识

前面主要是学习linux进程管理的调度,其细节越来越多,结合目前移动设备,其调度算法越来越复杂,涉及到芯片涉及,电源管理,多核负载等,这块内容暂时告一段落,本章正式进入到文件系统的学习。现在的磁盘是具有大容量、低成本以及持久化的特点,即使发生断电、磁盘上的数据也不会丢失。但是对于一般用户而言,磁盘的使用是一个非常痛苦的,因为他们不清楚如何驱动一个磁盘,以及计算数据在磁盘上存放的位置。对于操作系统是一个魔术师,它提供用户各种抽象。前面章节我们学习了进程的抽象是CPU,虚拟内存的抽象是内存,对于磁盘来说,操作

2022-03-28 23:02:06 7466

原创 [一文搞懂]深入浅出linux同步机制

进程同步机制因为现代操作系统是多处理器计算的架构,必然更容易遇到多个进程,多个线程访问共享数据的情况,如下图所示:图中每一种颜色代表一种竞态情况,主要归结为三类:进程与进程之间:单核上的抢占,多核上的SMP;进程与中断之间:中断又包含了上半部与下半部,中断总是能打断进程的执行流;中断与中断之间:外设的中断可以路由到不同的CPU上,它们之间也可能带来竞态;本章主要是学习的内容如下:原子锁解决什么问题,有什么缺陷自旋锁解决什么问题,原理和应用场景睡眠锁解决什么问题,mutex和Sema

2022-02-13 22:36:03 1871

原创 linux进程管理(二十五)—负载均衡

linux进程管理—负载均衡前面主要是学习进程的调度管理,默认都是在单CPU上的调度策略,在O(1)调度后,为了减小CPU之间的干扰,就会为每个CPU上分配一个任务队列,运行的时候可能会出现有的CPU很忙,有的CPU很闲,为了避免这个问题的出现,甚至最极端的情况是,一个 CPU 的可运行进程队列拥有非常多的进程,而其他 CPU 的可运行进程队列为空,这就是著名的 一核有难,多核围观,Linux 内核实现了 CPU 可运行进程队列之间的负载均衡。1 什么是CPU负载提到负载,我们首先会想到命令upti

2022-01-29 22:12:30 6753

原创 linux进程管理(二十四)—实时调度

首先看看维基百科对实时操作系统的定义:实时操作系统(Real-time operating system, RTOS),又称即时操作系统,它会按照排序运行、管理系统资源,并为开发应用程序提供一致的基础。实时操作系统与一般的操作系统相比,最大的特色就是“实时性”,如果有一个任务需要执行,实时操作系统会马上(在较短时间内)执行该任务,不会有较长的延时。这种特性保证了各个任务的及时执行。实时操作系统 (Real-time OS) 是相对于分时操作系统 (Time-Sharing OS) 的一个概念。在一个

2022-01-27 23:20:57 1530

原创 进程管理(二十三)—组调度器

CFS的调度器颗粒是进程,但是在某些应用场景中,用户希望的调度颗粒是用户组,例如下面的用户场景,主要用到服务器场景中A用户要跑一个任务,因为要调用一个库,只能单线程跑B用户跑并行的任务,创建了100个线程跑那么对于CFS会发生什么呢?用户A可使用的CPU时间越来越少。这显然是不公平的对于服务器中,我们希望这两个用户可以平均的分配CPU时间,所以这在调度颗粒为进程的CFS是很难做到的,拥有进程数量多的用户将被分配比较多的CPU资源,因此,我们引入组调度(Group Scheduling )的概念。

2022-01-23 19:41:02 1183

原创 进程管理(二十二)—CFS调度器

进程管理(十八)—CFS调度器CFS是内核使用的一种调度器或调度类,它主要负责处理三种调度策略:SCHED_NORMAL、SCHED_BATCH和SCHED_IDLE。调度器的核心在挑选下一个运行的进程时有可能会遍历所有的调度类别。实际上系统大多数进程通常都是CFS调度类负责处理的,因此为了优化下一个进程的挑选调度器核心会先判断当前进程是否采用了CFS调度策略,若是,则直接调用CFS代码来挑选下一个进程,若不是或CFS代码未能挑选到一个合适的进程,则会调用各个调度类的挑选函数来寻找一个合适的进程。若CFS

2022-01-16 19:05:22 1700

转载 深入理解overlayfs(二):使用与原理分析

版权声明:本文为CSDN博主「luckyapple1028」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/luckyapple1028/article/details/78075358在初步了解overlayfs用途之后,本文将介绍如何使用overlayfs以及理解该文件系统所特有的一些功能特性。由于目前主线内核对overlayfs正在不断的开发和完善中,因此不同的内核版本改动可能较大,本文尽量与最新的内核版本保持

2022-01-12 19:52:44 1446 1

原创 进程管理(十七)---cfs调度器基本概念

在O(n)和O(1)调度器中,时间片是一个很重要的概念,它决定了一个任务能够运行多长时间而不被抢占。对于内核,时间片的机制是这样的,每当系统时钟中断来临,调度器从当前任务的时间片中减去一个时钟周期,直至时间片耗完,这个时候当前任务返回用户空间会,换成其他任务执行,所以时间片的划分是调度器设计上重要的问题。为了解决上面问题,以往的调度器把动态优先级和时间片绑定在一起,高优先级的进程获得长的时间片,而低优先级的进程获得短的时间片,调度器优先调度具有时间片长的任务。但是这样分配不合理,时间片长的进程并不一定是当

2022-01-08 19:25:50 1506 4

原创 进程管理(二十一)---进程调度时机

上一章学习了调度的方式,分为主调度器和周期性调度器,明白了进程切换分为自愿(voluntary)和强制(involuntary)两种。自愿切换: 是指任务由于等待某种资源,将state改为非running状态后,主动调用schedule让出CPU任务因为等待 IO 操作完成或者其它资源而阻塞。任务显式地调用 schedule 前,把任务运行态设置成 TASK_UNINTERRUPTIBLE。保证任务阻塞后不能因信号到来而引起睡眠过程的中断,从而被唤醒。 Linux 内核各种同步互斥原语,如 M

2022-01-03 22:45:27 2551

原创 进程管理(二十)----进程调度器

对于调度器,一个很重要的是调度时机问题,在什么情况下,什么时候发生调度?也就是说在什么情况下,什么时候,把现在占用CPU的进程替换下来,根据进程生命周期的图示本章主要关注的是上图中schedule的调度时机,主要有两部分组成,一种是直接,比如上图中的进程等待资源的到位需要睡眠,或者处于其他的原因主动放弃CPU资源;另外一种是时间片耗尽而放弃调度,本章主要是结合源码,学习内容包括schedule()函数什么时候被调用主调度器和周期性调度器如何工作内核对于调度的各个场景是如何工作的1. 进程调

2021-12-26 21:38:35 1489 1

原创 进程管理(十九)----linux内核进程上下文(二)

我们知道当调用schedule函数进行主动调度时,首先会调用通过调度类找到下一个要被调度的进程,然后将当前进程切换状态放入对应调度类的调度队列里面,等待再次被唤醒。而对于被调度的这个队列我们就要对其进行上下文切换,上一章节我们学习了上下文切换的时候的基本原理后,本章主要是学习在最新的内核上基于ARM架构学习完整的进程上下文切换的过程,本文的内核版本号为linux4.9.88。1 context_switch代码分析在操作系统中把当前正在运行的进程挂起并恢复以前挂起的某个进程的执行,这个过程叫进程切换或

2021-12-08 23:31:30 2015

原创 进程管理(十八)--进程上下文切换(一)

学习了操作系统的基本原理和调度的相关知识,开始学习进程的上下文切换,本章主要要了解一下内容:用户级和内核级上下文切换的原理前面章节学习了进程由哪些部分组成,那么进程自身的上下文切换有哪些部分组成了何时发生进程的上下文切换进程间切换的线程和断点保存在哪里,结合linux0.11讲解进程切换的五部曲1 用户级线程上下文切换上文([进程管理(二)----线程的基本概念]((9条消息) 进程管理(二)----线程的基本概念_奇小葩-CSDN博客))中,我们讨论了何为多线程,而线程又分用户级线程和内核

2021-11-28 23:01:42 2044

原创 linux内存回收(三)--OOM Killer

当业务繁忙的服务器里,我们常常发现系统在非常大的内存压力情况下,触发了OOM Killer机制,OOM Killer机制是内存管理中在资源极端缺乏情况下一种迫不得已的进程终止机制,OOM Killer机制会根据算法选择并终止占用内存资源较多的进程,以便释放内存资源。本章的主要内容是了解OOM Killer是如何运转的。1 触发过程根据内存回收的流程,在慢速路径__alloc_pages_slowpath中,当反复尝试reclaim和compact后仍不成功,就会调用__alloc_pages_may_o

2021-10-24 22:57:17 3892

原创 深入理解overlayfs(一):初识

版权声明:本文为CSDN博主「luckyapple1028」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/luckyapple1028/article/details/77916194Overlayfs是一种类似aufs的一种堆叠文件系统,于2014年正式合入Linux-3.18主线内核,目前其功能已经基本稳定(虽然还存在一些特性尚未实现)且被逐渐推广,特别在容器技术中更是势头难挡。本系列博文将首先介绍overla

2021-10-20 10:23:07 1106 1

原创 linux内存回收(二)--直接内存回收机制

以下是几个常见的页面分配函数,可以看到最终都会调用__alloc_pages_nodemask()[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xuNvsneK-1633779953086)(D:\学习笔记\内存管理总结\内存回收.assets\bprgzwjybv.png)]核心梳理__alloc_pages_nodemask():上面我们看到__alloc_pages_nodemask()即页面分配器的’心脏’了,接下来我们就梳理下这颗’心脏’中都具体做了哪些事情,

2021-10-17 19:41:57 2880 1

原创 linux内存回收(一)---kswapd回收

​ 正式开始十一之旅,有大量的时间将目前工作中遇到的内存回收进行总结下,主要是对内存回收的整个过程进行重新梳理。在linux操作系统中,当内存充足的时候,内核会尽量使用内存作为文件缓存(page cache),从而提高系统的性能。例如page cache缓冲硬盘中的内容,dcache、icache缓存文件系统的数据,这些内容是为了提升性能而设计的,还可以再次从硬盘中重新读取来构建对象,这部分内容可以在内存紧张的时候可以直接释放。所以内存回收在Linux内存管理中占据非常重要的地位,系统的内存毕竟是有限

2021-10-07 21:23:04 5507 3

原创 Linux Cgroup 入门---CPU

前面一章,我们学习了cgroup的一些基础,这章我们开始学习在目前的系统中如何使用,在linux上,为了操作Cgroup,有一个专门的Cgroup文件系统,我们运行mount命令可以查看cgroup 文件系统多挂载到 /sys/fs/cgroup 下,通过上面的命令行,我们可以看到我们可以用 cgroup 控制哪些资源。我们在 /sys/fs/cgroup/ 下面能看到下面的目录结构我们可以想象,CPU 的资源控制的配置文件,应该在 cpu,cpuacct 这个文件夹下面。我们看到了 cgrou

2021-08-18 22:26:12 1038

原创 深入CGroup框架--基础篇

CGroup 全称是 Control Group,顾名思义,它是用来做“控制”的。控制什么东西呢?当然是资源的使用了。那它都能控制哪些资源的使用呢?本章主要进行总结,主要涉及到以下方面what:什么是cgroup以及cgroup的内核实现why: 能解决什么问题How: 如何使用cgroup1. 什么是cgroupcgroup是Linux下的一种将进程按组进行管理的机制,在用户层看来,cgroup技术就是把系统中的所有进程组织成一颗一颗独立的树,每棵树都包含系统的所有进程,树的每个节点是

2021-08-15 22:47:48 2793

原创 linux性能工具--ftrace使用

Ftrace设计作为一个内部的tracer提供给系统的开发者和设计者,帮助他们弄清kernel正在发生的行为,它能够调式分析延迟和性能问题。对于前一章节,我们学习了Ftrace发展到现在已经不仅仅是作为一个function tracer了,它实际上成为了一个通用的trace工具的框架一方面已经从function tracer扩展到irqsoff tracer、preemptoff tracer另一方面静态的trace event也成为trace的一个重要组成部分通过前面两节的学习,我们知道了什么是

2021-08-11 21:38:55 8157 2

sip协议文档

嵌入式开发的SIP协议文档,提供对SIP协议的描述,协议的分析过程和开发过程

2018-10-30

空空如也

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

TA关注的人

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