
Linux stability
文章平均质量分 78
lzhf1122
这个作者很懒,什么都没留下…
展开
-
linux内存的反向映射
逆向映射是指在已知page frame的情况下(可能是PFN、可能是指向page descriptor的指针,也可能是物理地址,内核有各种宏定义用于在它们之间进行转换),找到映射到该物理页面的虚拟页面们。由于一个page frame可以在多个进程之间共享,因此逆向映射的任务是把分散在各个进程地址空间中的所有的page table entry全部找出来。之所以建立逆向映射机制主要是为了方便页面回收。原创 2023-03-28 09:40:48 · 786 阅读 · 0 评论 -
atomic 原子操作
修改一个变量会经过读、修改、写的操作序列。但有时该操作序列在执行完毕前会被其他任务或事件打断。比如在多CPU体系结构中,运行在两个CPU上的两个内核控制路径同时并行执行上面操作序列,有可能发生下面的场景:linux专门定义了一种只进行原子操作的类型atomic_t。原创 2023-03-02 10:03:32 · 2170 阅读 · 0 评论 -
内核数据结构-XArray
XArray是一种抽象数据类型,类似于一个大的指针数组,它满足了许多与哈希或常规可调整大小数组相同的需求。由于 xarray 中的数据都是指针,使用 RCU 这种无锁的方法查找数据是再合适不过了。xarray 数据结构主要的应用场景是在文件缓存。我们知道在Linux内核中,为了加快文件的访问速度,将空闲的内存页就用做了磁盘的 cache。一个文件的缓存通过 address_space 数据结构进行管理,而这里面用于记录文件数据与内存页之间映射关系的数据结构就是采用了 xarray。原创 2023-02-09 10:00:03 · 1402 阅读 · 0 评论 -
GCC工具集的使用
通过使用 -f 选项,可以告诉工具输出函数名。Addr2line 工具是一个可以将指令的地址和可执行映像转换成文件名、函数名和源代码行数的工具。ar是一个归档工具,用于建立、修改、提取归档文件(archive)。strip工具用于删除文件中的符号,在资源有限的系统中,可以使用这种方法为程序进行瘦身。nm工具用于显示文件中的符号,可以用于各种ELF格式文件。objdump工具用来查看编译后目标文件的组成。objcopy工具用于对目标文件的内容进行转换。strings工具用于查看文件中的字符串。原创 2023-01-19 08:44:25 · 1400 阅读 · 0 评论 -
kmemleak工具
内存泄漏分为用户态的内存泄漏和内核态的内存泄漏,我们本文主要关注的是内核态的内存泄漏。工作中比较常见的内存泄漏按照发生泄漏的频率可以划分以下几种类型:1、一次性内存泄漏,只在初始化过程中或某一次条件触发产生的内存泄漏。2、偶发性内存泄漏,在某种条件下偶尔触发产生的内存泄漏。3、频发性内存泄漏,内存泄漏点被频繁的触发。对于频发性内存泄漏我们有比较多的调试手段去定位,比如我们可以先通过/proc/meminfo信息大致确定下内存泄漏发生在哪个模块中,再通过其他手段进一步定位。原创 2023-01-18 09:51:36 · 1100 阅读 · 0 评论 -
ftrace工具
Ftrace是Linux进行代码级实践分析最有效的工具之一,比如我们进行一个系统调用,出来的时间过长,我们想知道时间花哪里去了,利用Ftrace就可以追踪到一级级的时间分布。原创 2023-01-11 09:48:07 · 242 阅读 · 0 评论 -
Linux oom机制
Linux oom是由于内存泄漏或者内存使用不合理而导致的问题。在讲OOM之前,我们先来了解一下内核内存回收的总体框架。原创 2023-01-05 09:46:54 · 2033 阅读 · 0 评论 -
kprobe调试工具
debug内核函数变量的时候最常用的是添加log,用printk看下相关的信息,但是这种方式往往需要重新编译内核,然后再启动设备。而Kprobe可以在运行的内核中动态插入探测点,执行你预定义的操作。可以跟踪内核几乎所有的代码地址,并且当断点被击中后会响应处理函数。使用kprobe最常用的就是查询函数调用的参数和返回值。目前,使用kprobe可以通过自行编写内核模块,向内核注册探测点,探测函数可根据需要自行定制,使用灵活方便;原创 2022-12-28 09:19:58 · 734 阅读 · 0 评论 -
Linux抢占(PREEMPTION)
进程切换有自愿(Voluntary)和强制(Involuntary)之分,简单来说,自愿切换意味着进程需要等待某种资源,强制切换则与抢占(Preemption)有关。抢占(Preemption)是指内核强行切换正在CPU上运行的进程,在抢占的过程中并不需要得到进程的配合,在随后的某个时刻被抢占的进程还可以恢复运行。发生抢占的原因主要有:进程的时间片用完了,或者优先级更高的进程来争夺CPU了。原创 2022-12-24 19:06:16 · 1447 阅读 · 0 评论 -
softlockup与hardlockup
所谓lockup,是指某段内核代码占着CPU不放。Lockup严重的情况下会导致整个系统失去响应。首先只有内核代码才能引起lockup,因为用户代码是可以被抢占的,不可能形成lockup(下文“实时进程会不会造成系统lockup”会介绍一种例外)其次内核代码必须处于禁止内核抢占的状态(preemption disabled),因为Linux是可抢占式的内核,只在某些特定的代码区才禁止抢占,在这些代码区才有可能形成lockup。原创 2022-12-24 16:57:56 · 644 阅读 · 0 评论 -
kdump功能
kdump 是一种先进的基于 kexec 的内核崩溃转储机制。当系统崩溃时,kdump会将内存导出为vmcore保存到磁盘。在kernel1运行的时候,在内存中给kernel2(捕获内核)预留空间。在kernel1 crash的时候,就会进入kernel2,kernel2 执行用户态程序makedumpfile对kernel1的内存镜像进行裁剪和压缩,最后将kernel1的vmcore保留在磁盘中并重启。原创 2022-12-24 13:19:29 · 1669 阅读 · 0 评论 -
vim+cscope阅读源码
做嵌入式开发时,可以使用vim+cscope打造一个舒适的源码阅读环境。1.添加自定义的vim配置文件使vim更易用。2.cscope是查看代码的利器。可以定位函数、变量定义及被引用的代码位置。原创 2022-12-23 18:25:15 · 1130 阅读 · 0 评论 -
Hungtask
hungtask表现为某些重要进程一直不能运行,如长期处于uninterruptible sleep状态(也就是常说的D状态。可以采取多种方法检测:定时轮询系统中的所有task,然后判断处于D状态的task的上下文切换次数是否和之前轮询时的相等,如果相等则表明该task两个轮询间隔期间一直处于D状态,可以认为该task有hang的情况;或只关注重要进程的运行情况,让这个重要进程在规定时间内模拟喂狗操作,若发现没有及时喂狗,则认为其有hang的情况。原创 2022-12-19 22:04:16 · 1087 阅读 · 0 评论 -
内核mutex实现原理
mutex锁的特点1.不同于信号量,mutex需要谁拿的锁谁来释放锁。2.不同于自旋锁,mutex临界区允许睡眠。3.不同于自旋锁,mutex在拿锁时若锁被别人持有,会根据锁的持有者是否正在运行来决定是乐观自旋或是睡眠等待。原创 2022-12-16 09:33:39 · 426 阅读 · 0 评论 -
内核定时器(timer)实现
定时器层是基于tick层(高精度定时器)之上的,是根据系统jiffies来触发的,精度相对比较低。利用定时器,我们可以设定在未来的某一时刻,触发一个特定的事件。经常,也会把这种低精度定时器称作时间轮(Timer Wheel)。参考链接:linux 内核 定时器(timer)实现机制。原创 2022-12-16 09:26:53 · 143 阅读 · 0 评论 -
可强占RCU
RCU机制属于无锁编程的一种,在访问读端临界区时不需要加锁,故不存在上面提到的锁的问题,所以拥有极好的扩展性,且可以多个读者同时存在。那为什么不用RCU锁取代其他锁呢?前面说到读端不用加锁,但是写端是需要加锁的,用来保证写者之间的同步,这一特点限制RCU的适用场景一定是读多写少的,否则相对其他锁优势就没那么明显了。且由于读端无锁写端才需要加锁,RCU又是可以读者写者共存的,即多个读者一个写者同时存在。原创 2022-12-15 09:46:14 · 1321 阅读 · 0 评论 -
基于printk问题调试
printk()是Linux内核中最广为人知的函数之一。它是我们打印消息的标准工具,通常也是追踪和调试 的最基本方法。所有的printk()消息都会被打印到内核日志缓冲区,这是一个通过/dev/kmsg输出到用户空间的环 形缓冲区。读取它的通常方法是使用 dmesg。原创 2022-12-14 09:30:10 · 350 阅读 · 0 评论 -
内核地址消毒剂(KASAN)
KernelAddressSANitizer(KASAN)是一种动态内存安全错误检测工具,主要功能是 检查内存越界访问和使用已释放内存的问题。原创 2022-12-14 09:22:26 · 1180 阅读 · 0 评论 -
稳定性开发常用网址
内核稳定性开发常用的一些网站汇总原创 2022-12-14 08:46:28 · 265 阅读 · 0 评论 -
踩内存问题
问题难点:A发生踩内存时,系统不一定马上崩溃,当B再去访问内存时发生crash。A和B没有关系,所以抓到真凶A是问题的关键。原创 2022-12-13 09:21:36 · 1249 阅读 · 0 评论 -
内核稳定性
内核稳定性问题指的是系统发生了死机或异常重启(oops/panic等软硬件问题),影响用户体验,甚至造成生命财产的损失。原创 2022-12-13 08:51:55 · 2571 阅读 · 0 评论 -
Linux内存模型
内存模型的设计则主要是权衡以下两点(空间与时间):1. 尽量少的消耗内存去管理众多的struct page2. pfn_to_page和page_to_pfn的转换效率。原创 2022-12-11 22:55:19 · 710 阅读 · 0 评论 -
Linux 伙伴系统
本文介绍linux伙伴系统的主要实现原创 2022-12-10 21:17:42 · 979 阅读 · 0 评论 -
slub debug
slub debug工具介绍原创 2022-12-09 08:29:38 · 1024 阅读 · 0 评论 -
pstore
pstore最初是用于系统发生oops或panic时,自动保存内核log buffer中的日志。原创 2022-12-09 08:20:40 · 2607 阅读 · 0 评论 -
Linux stability
创建该专栏目的:系统地整理遇到的linux稳定性问题以及相关的知识点,便于回顾和查缺补漏原创 2022-12-08 09:49:04 · 593 阅读 · 1 评论