<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[宋宝华]]></title><description><![CDATA[宋宝华]]></description><link>https://blog.csdn.net/21cnbao</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; 21cnbao]]></copyright><item><title><![CDATA[4个内核狂热分子今天又卷了一天]]></title><link>https://blog.csdn.net/21cnbao/article/details/159837223</link><guid>https://blog.csdn.net/21cnbao/article/details/159837223</guid><author>21cnbao</author><pubDate>Sat, 04 Apr 2026 18:14:05 +0800</pubDate><description><![CDATA[原先Patchset提出的设想是，在I/O等待的page fault retry路径上采用per-vma lock替换mmap_lock锁，以缓解rwsem锁的优先级翻转，而Matthew Wilcox提出这个方法可能没有修复Google的一个问题：memcg超载后，第一次page fault虽然给I/O申请了folio，但是retry PF近来的时候，folio已经被LRU回收，于是导致workload无法推进！建模，把复杂的问题能通过简单的模型说清楚，这是解决问题的最关键一步！]]></description><category></category></item><item><title><![CDATA[我们的老朋友茶总推出了一个memcg BPF hooks]]></title><link>https://blog.csdn.net/21cnbao/article/details/159807941</link><guid>https://blog.csdn.net/21cnbao/article/details/159807941</guid><author>21cnbao</author><pubDate>Fri, 03 Apr 2026 08:03:47 +0800</pubDate><description><![CDATA[具体来说，当某个tool call的 cgroup 超过其软限制（soft limit）或硬限制（hard limit）时，AgentCgroup 会通过这些钩子插入自定义逻辑，控制throttle的延迟，从而更有效地利用内存资源。企图给 Linux 内核的memcg添加 eBPF 扩展能力，主要目标是让用户态的 eBPF 程序可以动态介入内存 cgroup 的行为，例如内存压力判断和 throttle 策略等 — 本质上是开放内核内存控制逻辑的 hook 接口。茶总一出，谁与争锋。倚天屠龙，横扫江湖。]]></description><category></category></item><item><title><![CDATA[C23的一个溢出检测增强]]></title><link>https://blog.csdn.net/21cnbao/article/details/159621274</link><guid>https://blog.csdn.net/21cnbao/article/details/159621274</guid><author>21cnbao</author><pubDate>Sun, 29 Mar 2026 07:53:36 +0800</pubDate><description><![CDATA[时间回退到公元2009年，笔者在blackfin arch上面工作，有一个IP通话的软件(我甚至已经忘了它的名字)，在测试过程中，时不时会随机挂断或者crash。这个ktime会在2038年溢出，而两个ktime_add则会在更早的时间点溢出。__builtin_add_overflow 是一个编译器内建函数（builtin），不是标准 C 的一部分，但在GCC 和Clang 里都支持。在很久很久以前，大森林里面住着许多奇妙的生灵。从那一天开始，笔者就对运算溢出保持着本能的警惕，进入防御性编程的模式。]]></description><category></category></item><item><title><![CDATA[EROFS文件系统概述]]></title><link>https://blog.csdn.net/21cnbao/article/details/159341350</link><guid>https://blog.csdn.net/21cnbao/article/details/159341350</guid><author>21cnbao</author><pubDate>Sat, 21 Mar 2026 18:23:35 +0800</pubDate><description><![CDATA[因此，在容器场景下，若未对镜像来源强管控（或镜像管控出现漏洞），使用未经检查的、通用文件系统格式的不可信镜像将严重威胁宿主机集群安全。为解决上述问题，Docker 镜像（后由 OCI 组织标准化）采用了更简单且符合 POSIX 标准的 TAR 归档格式来构建、分发和部署镜像，通过 AUFS / OverlayFS 读写分离，把可写层完全隔离在可信的通用文件系统中（即用户的本地文件系统，不随远程不可信镜像分发），从而解决了不可信磁盘镜像的安全风险，并通过 Gzip 压缩进一步减小了体积。]]></description><category></category></item><item><title><![CDATA[Reconsidering the multi-generational LRU]]></title><link>https://blog.csdn.net/21cnbao/article/details/159274973</link><guid>https://blog.csdn.net/21cnbao/article/details/159274973</guid><author>21cnbao</author><pubDate>Thu, 19 Mar 2026 14:03:06 +0800</pubDate><description><![CDATA[原文出处：]]></description><category></category></item><item><title><![CDATA[sg dma缓冲区cache同步批处理优化]]></title><link>https://blog.csdn.net/21cnbao/article/details/159153666</link><guid>https://blog.csdn.net/21cnbao/article/details/159153666</guid><author>21cnbao</author><pubDate>Mon, 16 Mar 2026 17:43:09 +0800</pubDate><description><![CDATA[当然，也有相当多的硬件并不支持CPU和外设之间的cache coherence的，这种情况下，无论是面向CPU还是device，都可能需要进行cache的clean/invalidate动作，这类动作往往比较昂贵，成为火焰图热点。结合arm64微架构的知识以及dsb的原理，这里有个优化机会，可以N个entries只发一次dsb，即最后一次性dsb等待前面的N个cache操作完成。经笔者观察，目前arm64的相关实现，采用的每个sg entry进行一个cache动作，然后就发dsb同步等待的方式。]]></description><category></category></item><item><title><![CDATA[淘宝内核组001号员工，20年经验“小菜鸟”：我用AI写代码，但不担心“手艺”退化]]></title><link>https://blog.csdn.net/21cnbao/article/details/159063226</link><guid>https://blog.csdn.net/21cnbao/article/details/159063226</guid><author>21cnbao</author><pubDate>Sat, 14 Mar 2026 04:15:51 +0800</pubDate><description><![CDATA[采访 | 梦依丹       嘉宾 | 李勇责编 ｜张红月出品 | CSDN（ID：CSDNnews）“系统软件领域博大精深，和高手相比我还是小菜鸟。不过菜也不妨碍我喜欢，不妨碍我开心。”“好奇心和热爱，是我一直以来持续终身学习和做选择的原动力。”这不仅是资深 Linux 内核开发者李勇的自我剖白，也是他二十余年技术人生的最佳注脚。他曾与 Linus Torvalds 同台论道，是淘宝内核组的“001号员工”，亲手开启了中国互联网公司自研内核的时代。他参与过 OCFS2、Bcache 等多个重量级项目，是圈]]></description><category></category></item><item><title><![CDATA[nullfs：让initramfs也可以umount和pivot_root]]></title><link>https://blog.csdn.net/21cnbao/article/details/158987184</link><guid>https://blog.csdn.net/21cnbao/article/details/158987184</guid><author>21cnbao</author><pubDate>Thu, 12 Mar 2026 16:05:51 +0800</pubDate><description><![CDATA[在nullfs出现之前，因为原始的initramfs rootfs是内核启动时的“始祖”，它是不可卸载的。所以，从initramfs切换到磁盘rootfs目前的做法非常“暴力”：开发者必须手动递归删除 initramfs 里的所有文件。Linux 7.0推出了一个重要的特性：nullfs(空文件系统)，一个完全immutable的假的根文件系统。此时，虽然新旧根都在同一个路径点上，但新根在“下面”（作为真正的根），旧根在“上面”（作为一个覆盖层挂载点）。它是一个完全不可变的、永远为空的单实例文件系统。]]></description><category></category></item><item><title><![CDATA[meminspect和minidump: 只dump调试感兴趣的memory]]></title><link>https://blog.csdn.net/21cnbao/article/details/158950987</link><guid>https://blog.csdn.net/21cnbao/article/details/158950987</guid><author>21cnbao</author><pubDate>Wed, 11 Mar 2026 05:24:53 +0800</pubDate><description><![CDATA[要关注的内存区域可能包括2类：静态内存（全部变量之类的）和动态内存（可能动态申请和释放，因此region可能add或者remove）。这一点需要接受，因为这是减少 dump 体积所带来的必然权衡。meminspect只是标内存region的，它最终还是要与其他调试工具连通。用于在 Qualcomm 平台上导出最小化的 crash dump 信息。的做法，我们可以只保留必要的数据。这样做的意义在于：在生产环境中，以便后续排查问题，因此减少每个 dump 的体积非常重要。这些信息可以支持最基本的系统状态分析。]]></description><category></category></item><item><title><![CDATA[Linux内核可编程与AI驱动的资源控制或成为未来的主流]]></title><link>https://blog.csdn.net/21cnbao/article/details/158905115</link><guid>https://blog.csdn.net/21cnbao/article/details/158905115</guid><author>21cnbao</author><pubDate>Tue, 10 Mar 2026 09:21:37 +0800</pubDate><description><![CDATA[另外，当agent未来成为mainstream，agent intention驱动的资源控制，或许比现在操作系统的reaction模型靠谱。因为agent知道自己接下来想干什么，需要多少资源，所以它可以用它的intention，提早规划CPU、memory、I/O资源。但是用户的需求经常是burst的，比如瞬间的资源需求大量增加。AI主导的资源控制或更加进行prediction的资源控制，在资源瓶颈到来前，提早规划，从而规避未来的瓶颈。1. 内核可编程，一些策略性的东西会有越来越多的人提出eBPF的诉求。]]></description><category></category></item><item><title><![CDATA[谈一谈服务器CPU拓扑架构与Linux调度的问题]]></title><link>https://blog.csdn.net/21cnbao/article/details/158875963</link><guid>https://blog.csdn.net/21cnbao/article/details/158875963</guid><author>21cnbao</author><pubDate>Mon, 09 Mar 2026 07:38:10 +0800</pubDate><description><![CDATA[NUMA的跳数想象成一个从你和你老婆，到你爸妈，再到你兄弟姐妹，再到你堂兄堂姐妹的系统。自己到老婆是0hop（在同一个NUMA，当然家里的小娃、狗狗也属于同一个NUMA，可以参与搬砖），到自己的爹妈是1hop，到兄弟姐妹是2hops，到堂兄弟姐妹是3hops，当然，你还可以有各种表亲，4hops，5hops什么的。当然，你的爹妈，你的兄弟姐妹，你的堂兄堂弟，你的远方亲戚，他们也同样有自己的0hop夫妻，1hop爹妈，2hops兄弟姐妹，这些人接到了同样的workload，就是往自己家里搬10000块砖。]]></description><category></category></item><item><title><![CDATA[分享Linux内核新春活动结出的果实]]></title><link>https://blog.csdn.net/21cnbao/article/details/158867037</link><guid>https://blog.csdn.net/21cnbao/article/details/158867037</guid><author>21cnbao</author><pubDate>Sun, 01 Mar 2026 07:40:30 +0800</pubDate><description><![CDATA[这几天Xueyuan做出了很多的贡献，在我的dma-mapping: support batched cache sync的patchset v3的测试环节，可以说是废寝忘食，也填补了与我时差的空白。大家因为共同的爱好而聚在一起，就是最好的缘分。》，该活动收获了一个重要的果实，志愿者和爱好者Xueyuan Chen主动加入、积极和我一起参与社区的工作。我的分享不到一小时，只播下了一粒小小的种子，但收获远远超过了付出。]]></description><category></category></item><item><title><![CDATA[MGLRU问题5应对: 延迟到map时激活readahead的folios]]></title><link>https://blog.csdn.net/21cnbao/article/details/158874861</link><guid>https://blog.csdn.net/21cnbao/article/details/158874861</guid><author>21cnbao</author><pubDate>Thu, 26 Feb 2026 08:25:52 +0800</pubDate><description><![CDATA[MGLRU会在page fault上下文，把预读的folio都自动激活到LRU的youngest位置，但是这些预读的folios可能并不会真地访问。但是他们占据了LRU里面最不容易被回收的有利位置，却不是真正的热页。最终导致大量不必要的refault。发送了一个RFC的草案。该草案将folio激活延迟到最终map folio的时刻。如果folio没有最终被map，将不会被激活，从而更加易于回收。后续需要和社区一起讨论出最终可登录mainline的代码。针对昨天讨论的MGLRU问题5（《]]></description><category></category></item><item><title><![CDATA[荣耀在MGLRU内存回收上的发力或恰到好处]]></title><link>https://blog.csdn.net/21cnbao/article/details/158874152</link><guid>https://blog.csdn.net/21cnbao/article/details/158874152</guid><author>21cnbao</author><pubDate>Wed, 25 Feb 2026 04:58:13 +0800</pubDate><description><![CDATA[MGLRU在社区已经存在一段时间了，作为比传统active/inactive LRU更加先进的回收算法，在Android领域的应用也逐步兴起，但是直接用还是有很多问题需要解决。关于MGLRU的更多细节，可以阅读笔者之前的《我们更加不需要堆砌patch的数量，只有一步一个脚印做，让每个脚印都闪闪发光、天日可见、人神共赏，才是立足之道，也是真正的踏实，哪怕只走了10步，也比胡乱堆砌的1000步强。可行的 workaround：强制把老的文件 folio 升代，但可能导致文件页在稍年轻代聚集问题；]]></description><category></category></item><item><title><![CDATA[Jim Huang的《Improve Load Balancing withMachine Learning Techniques basedon sched_ext Framework》]]></title><link>https://blog.csdn.net/21cnbao/article/details/158871921</link><guid>https://blog.csdn.net/21cnbao/article/details/158871921</guid><author>21cnbao</author><pubDate>Tue, 24 Feb 2026 16:43:20 +0800</pubDate><description><![CDATA[Jim Huang的《Improve Load Balancing withMachine Learning Techniques basedon sched_ext Framework》值得一读。]]></description><category></category></item><item><title><![CDATA[熠熠生辉 | 2023 年 Linux 内核十大技术革新功能]]></title><link>https://blog.csdn.net/21cnbao/article/details/158874549</link><guid>https://blog.csdn.net/21cnbao/article/details/158874549</guid><author>21cnbao</author><pubDate>Sun, 22 Feb 2026 09:05:25 +0800</pubDate><description><![CDATA[这个机制我们在2022年终盘点中也有提及。在Steven的patch里面，仍然不可能允许用户态去关闭抢占调度，但是用户态在拿spinlock时，可以对内核进行某种暗示（比如通过在一片用户空间和内核空间共享的内存填充一个RSEQ_CR_FLAG_IN_CRITICAL_SECTION），当task B企图在A的临界区抢占的时候，内核看到这个flag，可以让抢占稍微延后一点时间允许A继续执行，这样正在spinlock临界区执行的线程A可以利用这段延后的时间，把自己的临界区执行完，这样C的自旋等待将大为缩短。]]></description><category></category></item><item><title><![CDATA[为了忘却的纪念——2022 Linux 内核十大技术革新功能 | 年终盘点]]></title><link>https://blog.csdn.net/21cnbao/article/details/158870885</link><guid>https://blog.csdn.net/21cnbao/article/details/158870885</guid><author>21cnbao</author><pubDate>Sun, 22 Feb 2026 09:05:25 +0800</pubDate><description><![CDATA[本文来自  CSDN 重磅策划的《2022 年技术年度盘点》栏目。2022 年，智能技术变革留下了深刻的脚印，各行各业数字化升级催生了更多新需求。过去一年，亦是机遇与挑战并存的一年。在本篇文章中，长期奋斗在一线的 Linux 内核开发者、经典书籍《Linux 设备驱动开发详解》作者宋宝华老师为大家解剖 2022 年 Linux 内核开发的十大革新技术功能，纪念这平凡而又不凡的 Linux 内核之旅。作者 | 宋宝华       责编 | 梦依丹出品 | CSDN（ID：CSDNnews）滚滚长江东逝水，浪花]]></description><category></category></item><item><title><![CDATA[2024年Linux内核十大技术革新盘点｜年终盘点]]></title><link>https://blog.csdn.net/21cnbao/article/details/158866570</link><guid>https://blog.csdn.net/21cnbao/article/details/158866570</guid><author>21cnbao</author><pubDate>Sun, 22 Feb 2026 09:05:25 +0800</pubDate><description><![CDATA[这样开销未免就有点太大了，其实仔细看DEFINE_ALLOC_TAG的定义，它定义的是一个static struct alloc_tag _alloc_tag的，关键是static，而且link在一个特定的section里面：__section(ALLOC_TAG_SECTION_NAME),所以，用我的tag地址，减去section的开始地址就差不多得到tag在线性区域的存放位置了。但是公平其实可以被另外一种方式来实现，CFS的算法是谁的虚拟运行时间最小，就跑谁（欠谁的钱多，先还谁）；]]></description><category></category></item><item><title><![CDATA[马年新春《2025年Linux内核十大技术革新盘点》分享会视频]]></title><link>https://blog.csdn.net/21cnbao/article/details/158875929</link><guid>https://blog.csdn.net/21cnbao/article/details/158875929</guid><author>21cnbao</author><pubDate>Wed, 18 Feb 2026 05:32:49 +0800</pubDate><description><![CDATA[马年新春，大年初一，视频解读。，以及分享后的互动交流。]]></description><category></category></item><item><title><![CDATA[2025 年 Linux 内核十大技术创新｜年终盘点]]></title><link>https://blog.csdn.net/21cnbao/article/details/158865769</link><guid>https://blog.csdn.net/21cnbao/article/details/158865769</guid><author>21cnbao</author><pubDate>Mon, 16 Feb 2026 12:00:58 +0800</pubDate><description><![CDATA[目前 6.17 合入的是一个 baby step，支持 P1 和 P2 本身在一个 CPU 上的时候的代理执行，目前显然没有实际意义，因为哪怕手机只有 8 个核，P1 和 P2 在同一个 CPU 的机会也很渺茫。由于 swap table 的显著优势来源于查询路径的缩短、locality 的提升、lock contention 的减小，相对 xarray 加速了 swapcache 的查询、修改等操作，属于基础设施的改善，其优势在服务器等场景会呈现较大的实用价值，对一些关键业务的吞吐量带来提升。]]></description><category></category></item></channel></rss>