<?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[《top-down性能分析法》视频分享]]></title><link>https://blog.csdn.net/21cnbao/article/details/160124877</link><guid>https://blog.csdn.net/21cnbao/article/details/160124877</guid><author>21cnbao</author><pubDate>Mon, 13 Apr 2026 06:23:34 +0800</pubDate><description><![CDATA[几个top-down性能分析的案例，memory bound, frontend bound, false sharing, cache颠簸，prefetch等案例。以及参与内核社区开发贡献志愿者招募流程说明。]]></description><category></category></item><item><title><![CDATA[while(1)；的top-down分析]]></title><link>https://blog.csdn.net/21cnbao/article/details/160317067</link><guid>https://blog.csdn.net/21cnbao/article/details/160317067</guid><author>21cnbao</author><pubDate>Sun, 12 Apr 2026 12:36:39 +0800</pubDate><description><![CDATA[这种极简循环里，它被定义为 Core Bound 的子项，表示“虽然我没卡住（0% Backend Bound），但我已经被这条单指令压榨到了单端口执行的极限”。指令在现代 CPU 中通常在前端就被处理掉（Nop-elimination），或者被分配到一个极其简单的微操作。frontend bound消除，backend bound到15.7%，84.2%的时间在retiring指令。这一半的 Slot 退休了（50% Retiring），另一半空着（50% Frontend Bound）。]]></description><category></category></item><item><title><![CDATA[while(1)；的top-down分析]]></title><link>https://blog.csdn.net/21cnbao/article/details/160289502</link><guid>https://blog.csdn.net/21cnbao/article/details/160289502</guid><author>21cnbao</author><pubDate>Sun, 12 Apr 2026 12:36:39 +0800</pubDate><description><![CDATA[这种极简循环里，它被定义为 Core Bound 的子项，表示“虽然我没卡住（0% Backend Bound），但我已经被这条单指令压榨到了单端口执行的极限”。指令在现代 CPU 中通常在前端就被处理掉（Nop-elimination），或者被分配到一个极其简单的微操作。frontend bound消除，backend bound到15.7%，84.2%的时间在retiring指令。这一半的 Slot 退休了（50% Retiring），另一半空着（50% Frontend Bound）。]]></description><category></category></item><item><title><![CDATA[while(1)；的top-down分析]]></title><link>https://blog.csdn.net/21cnbao/article/details/160230077</link><guid>https://blog.csdn.net/21cnbao/article/details/160230077</guid><author>21cnbao</author><pubDate>Sun, 12 Apr 2026 12:36:39 +0800</pubDate><description><![CDATA[这种极简循环里，它被定义为 Core Bound 的子项，表示“虽然我没卡住（0% Backend Bound），但我已经被这条单指令压榨到了单端口执行的极限”。指令在现代 CPU 中通常在前端就被处理掉（Nop-elimination），或者被分配到一个极其简单的微操作。frontend bound消除，backend bound到15.7%，84.2%的时间在retiring指令。这一半的 Slot 退休了（50% Retiring），另一半空着（50% Frontend Bound）。]]></description><category></category></item><item><title><![CDATA[while(1)；的top-down分析]]></title><link>https://blog.csdn.net/21cnbao/article/details/160194660</link><guid>https://blog.csdn.net/21cnbao/article/details/160194660</guid><author>21cnbao</author><pubDate>Sun, 12 Apr 2026 12:36:39 +0800</pubDate><description><![CDATA[这种极简循环里，它被定义为 Core Bound 的子项，表示“虽然我没卡住（0% Backend Bound），但我已经被这条单指令压榨到了单端口执行的极限”。指令在现代 CPU 中通常在前端就被处理掉（Nop-elimination），或者被分配到一个极其简单的微操作。frontend bound消除，backend bound到15.7%，84.2%的时间在retiring指令。这一半的 Slot 退休了（50% Retiring），另一半空着（50% Frontend Bound）。]]></description><category></category></item><item><title><![CDATA[while(1)；的top-down分析]]></title><link>https://blog.csdn.net/21cnbao/article/details/160159651</link><guid>https://blog.csdn.net/21cnbao/article/details/160159651</guid><author>21cnbao</author><pubDate>Sun, 12 Apr 2026 12:36:39 +0800</pubDate><description><![CDATA[这种极简循环里，它被定义为 Core Bound 的子项，表示“虽然我没卡住（0% Backend Bound），但我已经被这条单指令压榨到了单端口执行的极限”。指令在现代 CPU 中通常在前端就被处理掉（Nop-elimination），或者被分配到一个极其简单的微操作。frontend bound消除，backend bound到15.7%，84.2%的时间在retiring指令。这一半的 Slot 退休了（50% Retiring），另一半空着（50% Frontend Bound）。]]></description><category></category></item><item><title><![CDATA[while(1)；的top-down分析]]></title><link>https://blog.csdn.net/21cnbao/article/details/160125206</link><guid>https://blog.csdn.net/21cnbao/article/details/160125206</guid><author>21cnbao</author><pubDate>Sun, 12 Apr 2026 12:36:39 +0800</pubDate><description><![CDATA[这种极简循环里，它被定义为 Core Bound 的子项，表示“虽然我没卡住（0% Backend Bound），但我已经被这条单指令压榨到了单端口执行的极限”。指令在现代 CPU 中通常在前端就被处理掉（Nop-elimination），或者被分配到一个极其简单的微操作。frontend bound消除，backend bound到15.7%，84.2%的时间在retiring指令。这一半的 Slot 退休了（50% Retiring），另一半空着（50% Frontend Bound）。]]></description><category></category></item><item><title><![CDATA[while(1)；的top-down分析]]></title><link>https://blog.csdn.net/21cnbao/article/details/160091431</link><guid>https://blog.csdn.net/21cnbao/article/details/160091431</guid><author>21cnbao</author><pubDate>Sun, 12 Apr 2026 12:36:39 +0800</pubDate><description><![CDATA[这种极简循环里，它被定义为 Core Bound 的子项，表示“虽然我没卡住（0% Backend Bound），但我已经被这条单指令压榨到了单端口执行的极限”。指令在现代 CPU 中通常在前端就被处理掉（Nop-elimination），或者被分配到一个极其简单的微操作。frontend bound消除，backend bound到15.7%，84.2%的时间在retiring指令。这一半的 Slot 退休了（50% Retiring），另一半空着（50% Frontend Bound）。]]></description><category></category></item><item><title><![CDATA[几个简单程序的top-down性能分析]]></title><link>https://blog.csdn.net/21cnbao/article/details/160063346</link><guid>https://blog.csdn.net/21cnbao/article/details/160063346</guid><author>21cnbao</author><pubDate>Sat, 11 Apr 2026 19:44:21 +0800</pubDate><description><![CDATA[另外，在无false sharing情况下，Backend_Bound.Core_Bound.Ports_Utilization明显变高，有用功做地更多。可以看出backend bound里面core bound的比例大幅提高到55.9%，而memory bound的比例则减小到18.2%。core bound占据23.1%，memory bound占据21.9%，memory bound主要在L3 bound。它几乎没有backend bound，都是frontend bound和retiring。]]></description><category></category></item><item><title><![CDATA[本周日下午5点活动《top-down性能分析法》]]></title><link>https://blog.csdn.net/21cnbao/article/details/159999746</link><guid>https://blog.csdn.net/21cnbao/article/details/159999746</guid><author>21cnbao</author><pubDate>Thu, 09 Apr 2026 17:42:08 +0800</pubDate><description><![CDATA[2. 会议主题2: 招募对内核真诚热爱的狂热分子一起参与Linux内核社区工作，难题攻关（前期将主要负责问题建模和数据采集）。Barry Song invites you to a meeting on VooV Meeting（腾讯会议） —— 《top-down性能分析法》无需报名，4:57开放会议进入，先进先得。1. 通过几个实例来分析处理器执行指令时候的top-down模型和数据采集方法，程序执行的瓶颈，IPC因为什么而下降。你将得不到一毛钱工资，但是我将真诚地和你一起工作。》），欢迎你的加入。]]></description><category></category></item><item><title><![CDATA[AWS工程师报告PostgreSQL性能在Linux 7.0下降50%到底是怎么一回事？]]></title><link>https://blog.csdn.net/21cnbao/article/details/159933868</link><guid>https://blog.csdn.net/21cnbao/article/details/159933868</guid><author>21cnbao</author><pubDate>Tue, 07 Apr 2026 11:02:05 +0800</pubDate><description><![CDATA[假设没有PREEMPT_LAZY的情况下（PREEMPT情况），fair调度类的task b本身可以在时刻1抢占task a，而随着PREEMPT_LAZY的引入，这个抢占需要延迟到下一个tick的到来。优先级继承和优先级顶棚的故事听起来动人，但是他们本质上是拆东墙补西墙，在简单的RTOS和workload有一定作用（尤其是锁依赖链简单的系统），在复杂的系统经常。它指出7.0内核使用PREEMPT_LAZY默认替代服务器领域的PREEMPT_NONE后，用户态的一个spinlock存在疯狂自旋。]]></description><category></category></item><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></channel></rss>