自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Buildroot 根文件系统制作教程(x86_64 + initramfs)

下载 buildroot 稳定版(约 7.6MB)# 解压并重命名为 buildroot。

2026-11-09 19:26:20 37

原创 安卓的根文件系统

安卓的根文件系统比较特殊,它不遵循传统 Linux 的 FHS(文件系统层次结构标准),因此你熟悉的 、 等目录在根目录下并不存在。现代安卓的根文件系统通常是 。从 Android 10 开始,构建系统会将原本属于根目录的内容合并到 中,并在启动时直接把它挂载为根文件系统()。因此,你在安卓根目录()下能看到的内容,很大程度上就是 分区里的内容。它们并不在根目录下,而是被移到了 目录内。具体来说::这个目录存放的是非启动必要的程序和数据,比如键盘布局、共享文件、时区数据等。关于 :传统的 Linux

2026-10-14 11:14:38 296

原创 Linux的缺页异常居然可以睡眠?

用户地址缺页是进程上下文中的同步异常,可以睡眠;内核地址缺页是否允许睡眠取决于是否在原子上下文以及页表是否已建立。现代 x86_64 的。

2026-09-28 10:11:14 295

原创 内存管理:rmapping的anon_vma作用?

https://ljs.io/anon_vma.pdf

2026-07-19 10:55:32 144

原创 定位errno根因的瑞士军刀诞生了!ftrace的funcgraph-retval:定位内核函数或系统调用返回值errno根因的利器

过去当应用的某个系统调用返回了错误码errno(例如EPERM),只能知道大概原因是权限失败,但是究竟是什么底层原因往往一无所知。只能凭借资深Linux内核专家依靠经验,通过ftrace或kretprobe去一个函数一个函数的试一遍,最终找到最底层的函数返回errno的原因,非常费事。现在Linux 6.12+的版本已经支持funcgraph-retval,可以轻松解决问题。功能可以帮助你定位返回-1的根因。它的核心价值在于,能清晰展示出-1。

2026-07-15 21:58:30 206

原创 实时Linux:高实时内核应怎么配置?

(实际上,Linux 可以做得比这好得多,但这需要精心挑选硬件,并且可能需要 Linux 实时专家的协助。如果中断在一个 CPU 上触发,而唤醒的实时任务却被调度到另一个 CPU 上运行,这是另一个延迟来源。实际上,要获得更低的延迟,更少依赖于对 Linux 的微调,而更多地取决于所选硬件以及实时应用的设计、实现和构建。最后,必须分配实时应用在其生命周期内所需的栈和堆空间,并对这些空间进行写入操作,以触发栈和堆分配物理 RAM。利用前面提到的工具和接口,可以调整实时任务和中断以使用这些隔离的 CPU。

2026-07-06 15:41:26 317

原创 Linux内存管理中的page cache的两种类型:MAP_PRIVATE和MAP_SHARED:原理和使用场景

MAP_SHARED:修改写回文件且所有映射者可见,底层使用 page cache,适合共享和持久化。:修改不写回文件且对其他进程不可见,使用 COW 创建匿名页副本,适合节省内存且需要隔离的场景(如动态库)。两者的选择决定了数据流的路径(页缓存 vs. 匿名页)和内核的内存回收行为(MAP_SHARED脏页可回收但需写回,的私有页只能换出到 swap)。

2026-07-01 10:47:30 346

原创 Linux 移除slob、slab,只保留slub

SLOB:已在Linux 6.4中移除。SLAB:已在Linux 6.8中移除。

2026-06-18 15:15:01 200

原创 Linux的开发节奏

修复补丁必须详细描述“引发的问题”和“修复原理”,且必须获得相应维护者的“Reviewed-by”或“Acked-by”签名。:子系统维护者(如网络、文件系统负责人)拥有较高的自主权,只要代码逻辑经过初步review,就可以发给Linus纳入主线。Linux内核的RC(Release Candidate,发布候选)版本遵循一个稳定且可预测的节奏。:相当于每周末把这辆车开到赛道上跑几圈,发现方向盘异响就调一下,发现刹车偏软就换一个零件,直到最终达到出厂标准。后,内核会被认为足够稳定,并发布最终版本。

2026-06-16 16:02:21 301

原创 【Linux内存回收】 Shrinker(收缩)和Reclaim(回收)的区别

大家在学习kernel 内存回收的代码流程中,看到过shrinker和reclaim两个词。他们的字面意思分别是收缩和回收。具体而言,有什么区别呢?特性常规回收(Page Reclaim)Shrinker 回收管理对象用户态文件页、匿名页内核内部缓存(dentry、inode、文件系统元数据等)数据结构LRU 链表(每个 zone 的lruvec子系统自定义(slab 缓存、radix tree 等)回收函数→→ 子系统的回调谁执行回收内核内存管理核心代码各个子系统自己实现可回收性标识。

2026-06-16 15:22:34 310

原创 内存回收:先回收page cache还是匿名页?

先说结论:在 Linux 内存回收流程中,并不存在一个绝对的“先 A 后 B”的序列,而是采用按优先级和比例并行扫描、综合回收的策略。但就回收的难易程度和倾向性而言,通常文件页(页缓存)最先被回收,其次是可回收的 Slab 缓存,最后才是匿名页。

2026-06-12 14:39:08 335

原创 如何申请Linux内核的官方邮箱

然而,企业邮件网关常常会对进出邮件进行后期处理,例如添加冗长的法律声明或执行反钓鱼链接隔离,这些都会干扰正常的补丁提交流程。若以上三项均无结果,您的申请将被拒绝。若在 lore.kernel.org 上能找到记录,但内容不具实质性(例如:您的贡献未获得积极回应),申请也可能被拒绝。如果您在 MAINTAINERS 文件中列出,并且您的 PGP 密钥拥有足够多的签名以进入信任网络(web of trust),您的账号将被立即开通。若申请通过,您将收到一封包含邀请链接的邮件,发送至您提供的联系方式。

2026-05-31 21:41:59 243

原创 swap机制

Swap机制作为内存回收全流程的一部分,用于在内存紧张下的一种应对机制,专门针对无后备文件的物理页面(即,被lock或pin的页面不可swap除外),这类页面不可以被直接回收释放,因为如果用户后续要访问,则无法恢复回来。

2026-05-23 12:08:07 208

原创 mremap:用户态调用mremap后VMA的pgoff以及page会发生发生

先说结论:1、执行mremap后,如果新的addr之前被映射过,之前映射过的page会被释放掉,新的addr先unmap掉。重新把旧addr的page重新映射到新的addr,中间出现一段未映射的地址空隙。那么就会新建一个vma。3、旧的page内容不会变,page->index(pgoff)也不会变。

2026-04-09 14:42:12 203

原创 Linux水线和内存分配快速路径和慢路径的关系

这意味着:只有目标内存区域(zone)的空闲页数。(compaction),直到满足分配或最终失败。,并传入水位标志 ALLOC_WMARK_LOW。进行后台异步回收(因为此时可能已低于。,则快速路径分配失败,返回 NULL。(direct reclaim)和/或。时,才能从该 zone 成功分配。快速路径失败后,内核进入。

2026-03-08 22:41:28 222

原创 Linux内核调度器的发展历史(上)

调度器的具体实现模块是通过调度类来实现的,所以任何一个调度器必然有自己的一套调度类sched_class结构体,结构体抽象类一系列所有调度器都必须要实现的接口,必须enqueue_task|dequeue_task,pick_next_task,balance(怎么把进程均衡到CPU的runqueue上)因此,当它被唤醒时,它会立即位于红黑树的最左侧,从而被迅速调度,带来非常流畅的用户体验。:随着多核处理器的普及,O(1)调度器在每个CPU的运行队列负载均衡方面表现不佳,容易出现CPU负载不均的情况。

2026-03-08 17:13:39 362

原创 详解KSM(内存合并) 页跟踪原理

随着内存合并近几年发展的成熟(KSM页面进程级跟踪或扫描优化)以及bug修复,内存合并技术在越来越多的厂商得到应用,除了应用到最初的目标场景:KVM虚拟机场景以外,在容器或普通应用如桌面浏览器应用等也有很高的价值,例如Meta公司就曾分享过KSM在facebook的应用内存收益很大,另外在一些通信、嵌入式设备等内存资源紧张的设备上也有很多的应用。),KSM的基本原理已有KSM官方资料,此处不再赘述。这里主要深入讲解下KSM的页跟踪原理,该内容本文独一份,其他地方没有看到这块讲解。

2026-02-04 15:59:14 809

原创 编译kernel的依赖包

编译kernel的依赖包

2025-08-17 19:26:10 181

原创 用vmware安装没有桌面的OpenEuler怎么用本地Windows远程连接虚拟机中的Linux?

ip addr add dev ens33 192.168.1.99/24 (这一步是为了和Host上的网卡配置保持同网段)systemctl restart NetworkManager (网络模式切换为网桥后,我们重新启动网络管理)2、配置vmware的模式为桥接模式(这种模式下host的Windows才能访问虚拟机中的Linux)ping 192.168.1.1 (ping一下网关,你家的路由器默认是这个)1、给vmware安装VMware Tools。Host上的原始配置如下(Host不动)

2025-08-17 15:55:41 226

原创 记事本-跨平台

记事本-跨平台

2022-10-17 09:37:06 205

转载 linux内存-内存回收

一、什么时候回收内存?1、直接内存回收有新的大块内存分配请求,但是剩余内存不足。这个时候系统就需要回收一部分内存,进而尽可能地满足新内存请求。2、定期扫描回收(kswapd)操作系统内核线程kswapd定期进行回收内存,并通过设定三个内存阈值来衡量内存的使用情况,分别是页最小阈值(pages_min) 页低阈值(pages_low) 页高阈值(pages_high)kswapd定期扫描内存的使用情况,并根据剩余内存落在这三个阈值的空间位置,进行内存的回收操作。1)free

2022-05-18 16:33:45 2920

原创 内核Document

kernel、linux

2022-01-05 11:27:04 524

转载 To Linux kernel社区发送补丁patch

本文主要参考提交内核补丁到Linux社区的步骤 - 广漠飘羽 - 博客园为了便于自己记忆,和备份。记录一下提交patch的流程:一、下载源码(clone分支)在官网下载最新代码,或者通过MAINTAINERS寻找对应子系统的仓库代码。通常linux-next的仓库是最新的分支代码,git clone这个就行。二、创建补丁1. 下载后修改代码2. 然后 git add -A3. git commit -m "information about this patch"4.

2021-12-04 11:22:12 1975

空空如也

空空如也

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

TA关注的人

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