自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(7)
  • 收藏
  • 关注

原创 创建内核线程机制分析

_kthread_create_on_node函数中将create节点加入到kthread_create_list链表,并唤醒kthreadd内核线程进行处理,kthreadd线程会创建新内核线程,并将新线程的task_struct保存在create->result,最后对线程设置线程名,调度策略,以及cpu亲和性结束。kthread函数先获取到锁(xchg返回不为NULL)的情况下,__kthread_create_on_node不管是等待中被杀,还是一直等待,都能创建内核线程成功。

2025-12-02 18:06:27 336

原创 hungtask机制分析

hungtask的作用就是定期(hung_task_check_interval_secs)循环检测系统上的所有线程,如果发现有线程在一段时间(hung_task_timeout_secs秒)内状态一直是D(TASK_UNINTERRUPTIBLE)状态,就认为进程异常,从而进行相应的告警(设置了hung_task_warnings)和让系统panic(设置了sysctl_hung_task_panic)nvcsv主动上下文切换的情况:IO阻塞,锁等待,主动调用schedule等。

2025-11-25 17:04:56 275

原创 oom机制分析

oom_kill_process函数处理选中的进程,如果进程正在退出,让oom_reaper现成去回收内存,否则让__oom_kill_process函数处理。可以看到oom_reaper函数是死循环,等待oom_reaper_list不为空的事件发生时被唤醒,从队列拿出一个task交给oom_reap_task处理。wake_oom_reaper函数将受害者进程加入oom_reaper_list队列,唤醒oom_reaper内核线程。task_will_free_mem函数判断进程是否可以立刻释放内存。

2025-11-24 18:44:28 272

原创 内核日志限速功能分析

在[begin, begin+interval]时间内,并且打印消息次数没超过burst,则函数返回1,表示允许打印消息,否则对missed计数,在[begin, begin+interval]之外,并且missed有计数的情况下,才打印一次消息被抑制信息,然后重新设置下一个时间段的[begin, begin+interval]进行限速。上面代码表示如果__ratelimit(&oom_rs)返回非0,允许dump_header打印日志,返回0不允许打印,日志被限速了。

2025-06-25 12:39:43 779

原创 内核对申请虚拟内存的处理策略overcommit

0: heuristic overcommit (this is the default) 默认值,只检测申请的内存页是否超过物理内存页和交换页之和,没超过则允许。避免每次统计提交申请内存页数都增加到全局fbc->count,只有当前cpu上统计达到batch之后才增加到fbc->count,提高性能。vm_commit_limit函数计算策略值为OVERCOMMIT_NEVER(2)的时候,初始允许申请的内存上限。vm_acct_memory用来累加申请的虚拟内存页数。

2025-06-19 16:26:14 210

原创 SystemV 消息队列收发流程分析

发送和接收函数都在ipc/msg.c文件中for循环中的主要处理逻辑是通过msg_fits_inqueue判断是否加入新消息会导致消息队列满1:消息队列未满,则跳出for循环,继续发送流程处理;

2024-10-16 17:37:14 700

原创 【openEuler上使用qemu调试linux内核】

打开DEBUG_INFO,会编译出带调试信息的vmlinux,后续用gdb vmlinux调试。没有命令的话通过 yum install qemu-system-x86_64 -y 安装。这三个模块编译进内核能让内核在启动时识别到我们制作的rootfs.img系统盘为sda。设置BLK_DEV_SD=y 将sd_mod.ko模块编译进内核。设置ATA_PIIX=y 将ata_piix.ko编译进内核。-S #在启动时冻结cpu,类似于启动时打了一个断点。设置ATA=y 将libata.ko编译进内核。

2024-07-14 12:40:01 2119 2

空空如也

空空如也

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

TA关注的人

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