当前位置: 首页 > news >正文

内核相关所有专栏导航(持续更新)

—————————————

—————————————

调度子系统篇

—————————————

一、调度基础概念及各个调度类

1.1 调度基础概念及重要变量

1.1.1 调度时间片与调度时延

调度时间片“过长”的原因及调度时间片的观测

不修改内核镜像的情况下,使用内核模块实现“及时”的调度时间片超时事件上报

调度时延的观测

1.1.2 idle与忙碌

抓取cpu持续忙碌状态的方法

1.1.3 on_cpu与on_rq

抓取任务D状态超时事件监控程序的进一步改进

1.1.4 rq lock

调度关键路径里调整优先级导致hardlockup

1.1.5 rq_clock_task及其他时间接口

与调度相关的内核时间接口的分析及实现介绍

内核模块里访问struct rq及获取rq_clock_task时间的方法

在计算进程D状态持续时间及等IO的时间遇到的一处问题

1.2 cfs相关

1.2.1 cfs基础

CFS及RT调度整体介绍

1.2.2 cgroup cfs相关

cgroup父子进程的加组实验

cgroup threaded功能例子

cgroup sched_cfs_bandwidth_slice参数的作用及效果

cgroup进行限额的逻辑场景之put_prev_entity及dequeue_entity

cgroup cpu相关的基础概念及相关内核逻辑的耗时测试

1.2.3 调度抢占

内核调度抢占模式——voluntary和full对比

内核cfs的唤醒抢占特性

1.3 rt相关

rt的cpu占比抓取

二、中断与任务

2.1 中断基础

show_interrupts函数及nr_irqs

剔除中断和调度影响的耗时测量方法

硬中断关闭后的堆栈抓取方法

preempt_count()、in_interrupt()等上下文判断常用函数及宏介绍

2.2 时钟中断

sched_timer与nohz初步介绍

查看jiffies更新的cpu与nohz_full

nohz和hotplug里与tick_sched相关的逻辑细节梳理

2.3 hrtimer

rt-linux下的“硬实时”的hrtimer通知机制

2.4 中断上下文及preempt_count

中断上下文及抢占标志位的检查——基于调度及锁举例

2.5 workqueue工作队列相关

workqueue的work派发策略上的实验及相关原理

创建kworker线程的逻辑与need_more_worker

ordered的workqueue及__WQ_ORDERED

2.6 tasklet相关

tasklet上下文内存分配触发might_alloc检查及同步回收调用链

内核调度代码关键路径下的低延迟唤醒

调度关键路径里调整优先级导致hardlockup

2.7 NMI中断

有关arm64下arch_local_irq_disable里中断优先级逻辑

硬中断关闭后的堆栈抓取方法

arm64下的nmi的相关逻辑

2.8 软中断

rcu_read_lock_bh及软中断处理的相关细节介绍

三、唤醒与信号signal处理

3.1 唤醒相关核心逻辑分析

使用数据断点调试唤醒任务时__state的变化

sched_waking事件及try_to_wake_up函数解析

3.2 信号signal

抓取信号发生时的发送者和接受者的堆栈——以gdb attach为例

gdb attach不上的原因分析

信号处理的疑问及进一步实验

do_exit的hungtask问题及coredump的实验及原理分析一

coredump的实验及原理分析二

四、poll及epoll机制

cgroup的pressure功能和psi的原理及epoll原理详细介绍

epoll的LT及ET模式相关的细节实验及相关原理——ep_item_poll函数

epoll的LT及ET模式实验及原理——ET模式是否会通知多次?

五、cpu状态机及热插拔

cpu的possible present online active的mask细节

cpu hotplug的调用链整理

nohz和hotplug里与tick_sched相关的逻辑细节梳理

六、内核同步原语

6.1 内存屏障

循环内的会被其他核修改的变量需要使用volatile的例子说明,及内存屏障的原理及使用

6.2 rcu相关

rcu的实例、注意事项及原理讲解

抓取rcu stall初始现场的方法

rt-linux下rcu的提升进程优先级相关的rcub线程的创建逻辑

rt-linux下两层spinlock会不会触发rcu临界区内的WARN_ONCE打印?

rcu_read_lock_bh及软中断处理的相关细节介绍

6.3 顺序锁

顺序锁的原理和使用注意事项

6.4 读写锁

进程内mmap锁相互干扰问题

七、rt-linux专题

7.1 优先级反转

rt-linux之防止优先级反转

7.2 rt-linux里的锁

rt-linux里的泛rtmutex锁的调用链整体分析

rt-linux下__slab_alloc里的另外一处可能睡眠的逻辑

rt-linux下两层spinlock会不会触发rcu临界区内的WARN_ONCE打印?

7.3 rt-linux下的D状态

rt-linux下的D状态的堆栈抓取及TASK_RTLOCK_WAIT状态

7.4 rt-linux下的cgroup问题

rt-linux下的cgroup cpu的死锁bug

rt-linux下的底层锁依赖因cgroup cpu功能导致不相干进程的高时延问题

—————————————

—————————————

内存子系统篇

—————————————

八、内存回收

内存回收相关内核基础概念——MIGRATE_TYPE

tasklet上下文内存分配触发might_alloc检查及同步回收调用链

madvise MADV_FREE对文件页统计的影响及原理

九、内存分配、pagecache与锁内存

9.1 内存分配与锁内存

内存管理相关——malloc,mmap,mlock与unevictable列表

内存管理之——get_user_pages和pin_user_pages及缺页异常

rt-linux下__slab_alloc里的另外一处可能睡眠的逻辑

进程内mmap锁相互干扰问题

9.2 pagecache与锁pagecache

借助内核逻辑锁pagecache到内存

脚本抓取elf文件里有任务映射使用的部分大小及脚本使用注意事项

抓取正在使用的elf里代码段的使用情况数据

9.3 文件页的预取与预映射

内核的文件预取逻辑及blockdev的相关配置

文件页的预映射逻辑

9.4 vmlck大于rss问题分析

vmlck大于rss的问题分析

9.5 内存回收

内存回收实验通过ko抓取相关page的内存回收逻辑

十、共享内存

10.1 tmpfs

tmpfs的监控筛选/dev/shm下的shmem创建

10.2 memfd

memfd配合跨进程传输fd的例子及原理

获取任意一个进程的共享内存的fd对应的资源,增加引用,实现数据的接管——包含非export的内核函数的模块内使用

10.3 shmem映射的监控

shmem的映射监控按照绝对路径过滤

10.4 vdso

vdso概念及原理,vdso_fault缺页异常,vdso符号的获取

—————————————

—————————————

文件系统篇

—————————————

十一、inode、dentry及mount路径

11.1 inode、dentry及软链接、硬链接

关于inode,dentry结合软链接及硬链接的实验

11.2 inode的完整路径包含mount路径

获取inode的完整路径包含挂载的路径

抓取缺页异常的iowait事件及文件绝对路径的改进

十二、块设备抽象层

参考下面链接里的 2.13 任务退出时的task_work会执行filemap_flush 一节

coredump的实验及原理分析二

十三、文件系统的读写

13.1 ext4

参考下面链接里的 2.13 任务退出时的task_work会执行filemap_flush 一节

coredump的实验及原理分析二

—————————————

—————————————

系统信息监控篇

—————————————

十四、常用调试手段

14.1 tracepoint及kprobe及ftrace

内核tracepoint的注册回调及添加的方法

内核模块注册调度的tracepoint的回调,逻辑里判断当前线程处于内核态还是用户态的方法

kprobe及kretprobe的基于例子来调试分析其原理

用简易的替代tracepoint的一个调试手段调试进程创建时的状态

简易的替代tracepoint的调试手段的进一步改进

ftrace的trace_marker使用

14.2 调试用的接口及技巧

常用的底层调试用的不容易记住的命令整理(持续更新)

内核调试日志相关函数及宏

内核里常用宏BUG_ON/WARN_ON/WARN_ONCE

用简易的替代tracepoint的一个调试手段调试进程创建时的状态

简易的替代tracepoint的调试手段的进一步改进

剔除中断和调度影响的耗时测量方法

内核执行时动态的vmlinux的反汇编解析方法及static_branch_likely机制

内核模块注册调度的tracepoint的回调,逻辑里判断当前线程处于内核态还是用户态的方法

监测各个核上cpu上的线程是内核线程还是用户线程,处于内核态还是用户态的方法

14.3 内核逻辑里抓取用户栈

内核逻辑里抓取用户栈的几种方法

十五、调度相关系统监测

15.1 系统的调度统计信息

cpu的iowait指标解释及示例

获取进程或线程级别的iodelay的方法

/proc/stat里的idle及iowait统计项的波动问题

nohz和hotplug里与tick_sched相关的逻辑细节梳理

/proc/<pid>/下的节点的读取及相关内核逻辑分析及getrusage

15.2 cpu忙碌状态抓取

rt的cpu占比抓取

抓取cpu持续忙碌状态的方法

15.3 调度时延及调度时间片监测

调度时延的观测

不修改内核镜像的情况下,使用内核模块实现高效监控调度时延

调度时间片“过长”的原因及调度时间片的观测

不修改内核镜像的情况下,使用内核模块实现“及时”的调度时间片超时事件上报

15.4 内核逻辑里获取父子进程的cmdline

内核模块里获取当前进程和父进程的cmdline的方法及注意事项,涉及父子进程管理,和rcu的初步介绍

15.5 D状态及iowait监测

cpu的iowait指标解释及示例

获取进程或线程级别的iodelay的方法

线程每次iodelay监控及D状态开始和结束监控并做堆栈记录

在计算进程D状态持续时间及等IO的时间遇到的一处问题

rt-linux下的D状态的堆栈抓取及TASK_RTLOCK_WAIT状态

抓取任务D状态超时事件监控程序的进一步改进

增加等IO状态的唤醒堆栈打印及缺页异常导致iowait分析

缺页异常导致的iowait打印出相关文件的绝对路径

打印长时间D且是iowait的堆栈及相关文件的绝对路径

抓取缺页异常的iowait事件及文件绝对路径的改进

register_kretprobe的使用及对抓取iowait程序的改进

15.6 硬中断关闭监测

硬中断关闭后的堆栈抓取方法

15.7 rcu stall相关

抓取rcu stall初始现场的方法

15.8 用户栈的高效解析

用户栈的高效解析逻辑

15.9 perf相关

perf原理介绍

十六、内存相关系统监测

16.1 非内嵌式观察任务运行变量

非gdb方式观察应用程序的运行时的变量状态

非侵入式观测进程里的某个线程的tls数据

16.2 数据断点的使用

观测指定内存上是否被读写,若触发条件打印调用栈

使用数据断点调试唤醒任务时__state的变化

16.3 获取内存内容的几种方法

获取内存内容的几种方法

16.4 共享内存的监控

tmpfs的监控筛选/dev/shm下的shmem创建

shmem的映射监控按照绝对路径过滤

16.5 pagecache的监测

脚本抓取elf文件里有任务映射使用的部分大小及脚本使用注意事项

抓取正在使用的elf里代码段的使用情况数据

十七、调试用的用户态工具相关

17.1 gdb相关

抓取信号发生时的发送者和接受者的堆栈——以gdb attach为例

gdb attach不上的原因分析

信号处理的疑问及进一步实验

17.2 vmtouch相关

脚本抓取elf文件里有任务映射使用的部分大小及脚本使用注意事项

抓取正在使用的elf里代码段的使用情况数据

17.3 分析sys高问题

分析sys高问题的方法总结

17.4 coredump相关

do_exit的hungtask问题及coredump的实验及原理分析一

coredump的实验及原理分析二

17.5 vscode相关

使用vscode远程登录服务器提升工作效率的若干技巧

vscode的缓存文件夹及查看进程读写的文件

17.6 vs2019相关

vs2019进行远程linux用户态调试

linux上对于so库的调试——包含通过vs2019远程ssh调试so库

vs2019远程调试——设置远程机器上的include目录和so目录

十八、其他调试类功能及问题

18.1 quickack

通过内核模块按fd强制tcp的quickack方法

定制setsockopt只设置一次实现指定sock的永久quickack

18.2 cgroup相关

cgroup cpu相关的基础概念及相关内核逻辑的耗时测试

cgroup的pressure功能和psi的原理及epoll原理详细介绍

内核的PSI的原理及代码分析

18.3 进程/线程创建和退出事件

进程/线程创建和退出事件的捕获

18.4 抓取内存回收调用链堆栈

内存回收实验通过ko抓取相关page的内存回收逻辑

—————————————

—————————————

其他篇

—————————————

十九、用户态调度类问题相关

19.1 条件变量相关

notify_one的逻辑里的“反向”唤醒现象的分析及原理

notify_one耗时久的优化尝试

二十、内核编程技巧

20.1 分支预测

内核static_branch_likely、likely及inline相关优化实验

20.2 内存拷贝

内核态函数strlcpy及strscpy以及用户态函数strncpy

使用SIMD思想进行memcpy的优化

20.3 使用另一个ko里提供的基础函数

insmod一个ko提供基础函数供后insmod的ko使用的方法

20.4 新增传递内核启动参数

module_param用于传递内核启动参数的细节

20.5 内核态代码使用用户态数据

内核态代码直接使用用户态数据的注意事项

关于stac和clac的进一步细节及EFLAGS

20.6 __private及sparse工具

内核里的__private变量的使用及sparse

20.7 ALTERNATIVE机制

“asm volatile(ALTERNATIVE”机制基于arch_local_irq_enable的实验及原理分析

二十一、内核社区

向内核社区提交补丁

社区补丁的回复及常用链接

社区补丁需要按需进行修改的一些要求

http://www.jsqmd.com/news/475039/

相关文章:

  • 2026年昆明养殖污水处理可靠厂家深度评估 - 2026年企业推荐榜
  • Qt C++开发一个扬尘监测终端系统
  • 亚洲美女-造相Z-Turbo开源可部署价值:规避SD社区模型版权风险,满足企业数据不出域要求
  • NEURAL MASK幻镜部署教程:NVIDIA Jetson边缘设备低功耗运行方案
  • Ostrakon-VL-8B部署案例:离线环境部署方案——无网络状态下运行全部功能
  • Qwen3-ASR-1.7B惊艳效果展示:音乐教学录音→乐理术语+节奏描述精准转写
  • Qwen3-0.6B-FP8轻量部署教程:适配消费级GPU的FP8版Qwen3实战入门
  • Qwen3-0.6B-FP8 FP8量化技术解析:Intel低比特推理优化原理与实测收益
  • Qwen3-ASR-0.6B从零开始教程:Linux环境supervisor服务配置与自动恢复机制
  • Cosmos-Reason1-7B惊艳输出:多约束条件下最优解存在性逻辑论证
  • Llama-3.2V-11B-cot多场景落地:已接入3家AI教育公司内容生成中台
  • Qwen3-4B-Instruct-2507快速上手:10分钟完成chainlit调用
  • BGE Reranker-v2-m3惊艳案例:技术面试题库中精准匹配候选人回答与标准答案
  • VibeVoice社区贡献指南:如何参与开源项目改进与维护
  • Qwen3-TTS-VoiceDesign入门必看:3步完成1.7B模型本地部署与声音风格生成
  • Qwen2.5-7B-Instruct参数详解:28层GQA架构、RoPE适配与RMSNorm调优
  • Ollama部署ChatGLM3-6B-128K完整指南:从模型选择、GPU显存优化到推理加速
  • VibeVoice Pro多语言语音教程:混合语种文本流式合成技巧
  • ⚖️Lychee-Rerank效果展示:不同Instruction设置对法律条款匹配结果的影响对比
  • 从底层数学到大模型微调:带你拆解 AI 的“大脑”
  • OneAPI宠物健康管家:接入MiniMax宠物图像识别+千问症状分析+文心一言营养建议
  • Springboo中事务事件监听类的使用
  • Jimeng LoRA部署教程:Jetson AGX Orin边缘设备轻量化部署可行性报告
  • 阿里通义Z-Image-Turbo实战案例:风景油画风格生成参数详解
  • PyQt5/PySide6的moveToThread:移动到线程
  • Android boot_progress_start日志的含义
  • 单片机的工厂方法模式
  • AIVideo如何降本提效?中小企业AI视频创作平台落地实践
  • 小工厂也能搞智能排程?MES+轻量化APS的落地思路
  • 3D Face HRN惊艳案例:3D人脸重建+风格迁移联合生成艺术化头像