内核链表
1-背景
链表是最最常用的数据结构之一,在c语言中没有cpp stl中那些可以动态申请的各种容器,所以链表是非常常用的用来动态分配的数据结构。
内核中也定义了一些基础的api,用来实现链表的各种操作,并且这些基础api也是经过了多年的维护、优化,最大程度的保障了性能以及安全。
在这片文章里总结、记录一下内核链表api的操作吧。
比较有趣的是,这些内核链表的api几乎都是linus 19年前实现的代码,这么多年一直没人修改或者说不必修改。
2-数据结构
内核定义了一个标准的基础链表数据结构list_head
struct
kdump调试
1-背景
kdump是linux用来分析crash问题的一种手段,在内核发生crash后,会主动启动第二内核,将当前内存中的所有状态转存至本地文件vmcore中。
但是有些服务器总是无法正常生产vmcore,我们这里总结一些简单的调试手段。
我们可以通过主动触发一个crash来验证机器是否可以生成kdump
echo c > /proc/sysrq-trigger
2-用户态服务
kdump存在一个用户态服务kdump.service,我们可以通过查看这个服务状态检查用户态是否已经住备好了正常捕获内核panic事件。
如下是一个正常的kdump.service状态
$ systemctl status
Makefile指南
0、前言
内核编译以及工具开发过程中,经常会涉及到Makefile文件,这一次详细来看一下Makefile相关的内容。
官方手册:Learn Makefiles
很好的学习文章:跟我一起写Makefile
1、入门
1.1-Makefile的作用
编译一个最简单的.c文件通常会使用到
gcc main.c
但是在大型复杂项目在构建的时候,
perf使用简介
0、前言
perf是内核的一个性能工具集合,可以很方便、有效的对内核的性能指标进行分析、追踪,可以检测 CPU 性能计数器、跟踪点、kprobes 和 uprobes(动态跟踪)。
Perf Main Page
perf的功能其实非常非常强大,使用的方法以及可拓展性非常非常多,这里只是简单介绍一些常用的工具、