自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

宋宝华

宋宝华

  • 博客(320)
  • 资源 (7)
  • 收藏
  • 关注

原创 《Linux设备驱动开发详解》虚拟机及案例代码下载

《Linux设备驱动开发详解》虚拟机下载

2022-07-11 12:21:01 7392 19

原创 《Linux设备驱动开发详解(第3版)》(即《Linux设备驱动开发详解:基于最新的Linux 4.0内核》)进展同步更新

本博实时更新《Linux设备驱动开发详解(第3版)》(即《Linux设备驱动开发详解:基于最新的Linux 4.0内核》)的最新进展。 目前已经完成稿件。2015年8月9日,china-pub开始上线预售:http://product.china-pub.com/47339722015年8月20日,各路朋友报喜说已经拿到了书。本书已经rebase到开发中的Linux 4.0内核,案例多数基于多核CORTEX-A9平台。本书微信公众号"linux阅码场", 扫描下方二维码关注

2014-06-30 20:22:54 65491 129

转载 有这么一群人,在一起啃 Linux kernel

说实话,没有那么多传奇故事,更多是很具体的活:看代码路径,复现实验,想清楚场景,写 changelog,发 patch,然后等 review。最开始,是 Barry(宋宝华)老师发起了一张“英雄帖”,把几个愿意花时间啃内核问题的人招呼到了一起。我们想把这些事摊开:看过的代码,做过的实验,踩过的坑,patch 为什么这么写,又为什么被打回来。我们想成为这样的人,也想遇到更多这样的人。我们是一群 Linux kernel 狂热爱好者,没有收益,没有赞助,也没有什么复杂的背景。今天开始,这里就是“笑傲内核”。

2026-05-24 15:04:22 17721

原创 DMA Buffer Cache同步的批处理优化及高通平台的实践

活动,“笑傲内核”小组核心成员陈雪原将代表小组出席活动,进行主题分享《DMA Buffer Cache同步的批处理优化及高通平台的实践》。2026年5月30日,深圳《

2026-05-23 15:33:34 185

原创 绝对不能因为AI而丧失独立思考的能力

对计算机的理解不能丢,对问题本质的理解不能丢,任何时候都要冷静思考,问题是什么,哪行代码最重要,前后逻辑是什么,要在哪里加trace,应该指挥AI写什么样的验证程序。我们应该通过前期的思考,分解问题,找到一个AI干最少的活、最精确的活的方法。绝对不能反过来被AI指挥。很多人有了AI之后,做事情已经完全不用脑子了,一开始没有经过严谨思考就指挥AI干活。现在已经有很多人离了AI已经不知道怎么干活了,就跟离了手机一样整个人就失魂落魄了!我真地觉得我们应该减少对AI的依赖,我们可以依靠AI,但是不能依赖AI。

2026-05-15 18:23:00 10486 1

原创 LSF/MM/BPF系列:Yang Shi针对ARM64的this_cpu_ops优化

这里提出了严峻的挑战,就是每个CPU需要有单独的kernel page table,尽管里面绝大多数内容应该是一模一样的(应该也是可以共享的),除了local mapping的这些percpu数据以外。在x86_64情况下,每个CPU通过将各自的。这个__per_cpu_local_off在各个CPU是一样的(关闭抢占也不再必要),当然它们对应的物理页面的位置确实是不同的。对于x86处理器而言,由于segment寄存器的存在,this_cpu_*操作可以一条指令完成,这个过程是原子的。

2026-05-12 18:08:18 16199

原创 《top-down性能分析法》视频分享

几个top-down性能分析的案例,memory bound, frontend bound, false sharing, cache颠簸,prefetch等案例。以及参与内核社区开发贡献志愿者招募流程说明。

2026-04-13 06:23:34 12171

原创 while(1);的top-down分析

这种极简循环里,它被定义为 Core Bound 的子项,表示“虽然我没卡住(0% Backend Bound),但我已经被这条单指令压榨到了单端口执行的极限”。指令在现代 CPU 中通常在前端就被处理掉(Nop-elimination),或者被分配到一个极其简单的微操作。frontend bound消除,backend bound到15.7%,84.2%的时间在retiring指令。这一半的 Slot 退休了(50% Retiring),另一半空着(50% Frontend Bound)。

2026-04-12 12:36:39 1986

原创 几个简单程序的top-down性能分析

另外,在无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。

2026-04-11 19:44:21 9925

转载 本周日下午5点活动《top-down性能分析法》

2. 会议主题2: 招募对内核真诚热爱的狂热分子一起参与Linux内核社区工作,难题攻关(前期将主要负责问题建模和数据采集)。Barry Song invites you to a meeting on VooV Meeting(腾讯会议) —— 《top-down性能分析法》无需报名,4:57开放会议进入,先进先得。1. 通过几个实例来分析处理器执行指令时候的top-down模型和数据采集方法,程序执行的瓶颈,IPC因为什么而下降。你将得不到一毛钱工资,但是我将真诚地和你一起工作。》),欢迎你的加入。

2026-04-09 17:42:08 2446

原创 AWS工程师报告PostgreSQL性能在Linux 7.0下降50%到底是怎么一回事?

假设没有PREEMPT_LAZY的情况下(PREEMPT情况),fair调度类的task b本身可以在时刻1抢占task a,而随着PREEMPT_LAZY的引入,这个抢占需要延迟到下一个tick的到来。优先级继承和优先级顶棚的故事听起来动人,但是他们本质上是拆东墙补西墙,在简单的RTOS和workload有一定作用(尤其是锁依赖链简单的系统),在复杂的系统经常。它指出7.0内核使用PREEMPT_LAZY默认替代服务器领域的PREEMPT_NONE后,用户态的一个spinlock存在疯狂自旋。

2026-04-07 11:02:05 409 1

原创 4个内核狂热分子今天又卷了一天

原先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无法推进!建模,把复杂的问题能通过简单的模型说清楚,这是解决问题的最关键一步!

2026-04-04 18:14:05 708

原创 我们的老朋友茶总推出了一个memcg BPF hooks

具体来说,当某个tool call的 cgroup 超过其软限制(soft limit)或硬限制(hard limit)时,AgentCgroup 会通过这些钩子插入自定义逻辑,控制throttle的延迟,从而更有效地利用内存资源。企图给 Linux 内核的memcg添加 eBPF 扩展能力,主要目标是让用户态的 eBPF 程序可以动态介入内存 cgroup 的行为,例如内存压力判断和 throttle 策略等 — 本质上是开放内核内存控制逻辑的 hook 接口。茶总一出,谁与争锋。倚天屠龙,横扫江湖。

2026-04-03 08:03:47 10751

原创 C23的一个溢出检测增强

时间回退到公元2009年,笔者在blackfin arch上面工作,有一个IP通话的软件(我甚至已经忘了它的名字),在测试过程中,时不时会随机挂断或者crash。这个ktime会在2038年溢出,而两个ktime_add则会在更早的时间点溢出。__builtin_add_overflow 是一个编译器内建函数(builtin),不是标准 C 的一部分,但在GCC 和Clang 里都支持。在很久很久以前,大森林里面住着许多奇妙的生灵。从那一天开始,笔者就对运算溢出保持着本能的警惕,进入防御性编程的模式。

2026-03-29 07:53:36 10395

转载 EROFS文件系统概述

因此,在容器场景下,若未对镜像来源强管控(或镜像管控出现漏洞),使用未经检查的、通用文件系统格式的不可信镜像将严重威胁宿主机集群安全。为解决上述问题,Docker 镜像(后由 OCI 组织标准化)采用了更简单且符合 POSIX 标准的 TAR 归档格式来构建、分发和部署镜像,通过 AUFS / OverlayFS 读写分离,把可写层完全隔离在可信的通用文件系统中(即用户的本地文件系统,不随远程不可信镜像分发),从而解决了不可信磁盘镜像的安全风险,并通过 Gzip 压缩进一步减小了体积。

2026-03-21 18:23:35 4985

转载 Reconsidering the multi-generational LRU

原文出处:

2026-03-19 14:03:06 2817

原创 sg dma缓冲区cache同步批处理优化

当然,也有相当多的硬件并不支持CPU和外设之间的cache coherence的,这种情况下,无论是面向CPU还是device,都可能需要进行cache的clean/invalidate动作,这类动作往往比较昂贵,成为火焰图热点。结合arm64微架构的知识以及dsb的原理,这里有个优化机会,可以N个entries只发一次dsb,即最后一次性dsb等待前面的N个cache操作完成。经笔者观察,目前arm64的相关实现,采用的每个sg entry进行一个cache动作,然后就发dsb同步等待的方式。

2026-03-16 17:43:09 493

转载 淘宝内核组001号员工,20年经验“小菜鸟”:我用AI写代码,但不担心“手艺”退化

采访 | 梦依丹 嘉宾 | 李勇责编 |张红月出品 | CSDN(ID:CSDNnews)“系统软件领域博大精深,和高手相比我还是小菜鸟。不过菜也不妨碍我喜欢,不妨碍我开心。”“好奇心和热爱,是我一直以来持续终身学习和做选择的原动力。”这不仅是资深 Linux 内核开发者李勇的自我剖白,也是他二十余年技术人生的最佳注脚。他曾与 Linus Torvalds 同台论道,是淘宝内核组的“001号员工”,亲手开启了中国互联网公司自研内核的时代。他参与过 OCFS2、Bcache 等多个重量级项目,是圈

2026-03-14 04:15:51 18619

原创 nullfs:让initramfs也可以umount和pivot_root

在nullfs出现之前,因为原始的initramfs rootfs是内核启动时的“始祖”,它是不可卸载的。所以,从initramfs切换到磁盘rootfs目前的做法非常“暴力”:开发者必须手动递归删除 initramfs 里的所有文件。Linux 7.0推出了一个重要的特性:nullfs(空文件系统),一个完全immutable的假的根文件系统。此时,虽然新旧根都在同一个路径点上,但新根在“下面”(作为真正的根),旧根在“上面”(作为一个覆盖层挂载点)。它是一个完全不可变的、永远为空的单实例文件系统。

2026-03-12 16:05:51 417

原创 meminspect和minidump: 只dump调试感兴趣的memory

要关注的内存区域可能包括2类:静态内存(全部变量之类的)和动态内存(可能动态申请和释放,因此region可能add或者remove)。这一点需要接受,因为这是减少 dump 体积所带来的必然权衡。meminspect只是标内存region的,它最终还是要与其他调试工具连通。用于在 Qualcomm 平台上导出最小化的 crash dump 信息。的做法,我们可以只保留必要的数据。这样做的意义在于:在生产环境中,以便后续排查问题,因此减少每个 dump 的体积非常重要。这些信息可以支持最基本的系统状态分析。

2026-03-11 05:24:53 457

原创 Linux内核可编程与AI驱动的资源控制或成为未来的主流

另外,当agent未来成为mainstream,agent intention驱动的资源控制,或许比现在操作系统的reaction模型靠谱。因为agent知道自己接下来想干什么,需要多少资源,所以它可以用它的intention,提早规划CPU、memory、I/O资源。但是用户的需求经常是burst的,比如瞬间的资源需求大量增加。AI主导的资源控制或更加进行prediction的资源控制,在资源瓶颈到来前,提早规划,从而规避未来的瓶颈。1. 内核可编程,一些策略性的东西会有越来越多的人提出eBPF的诉求。

2026-03-10 09:21:37 10807

原创 谈一谈服务器CPU拓扑架构与Linux调度的问题

NUMA的跳数想象成一个从你和你老婆,到你爸妈,再到你兄弟姐妹,再到你堂兄堂姐妹的系统。自己到老婆是0hop(在同一个NUMA,当然家里的小娃、狗狗也属于同一个NUMA,可以参与搬砖),到自己的爹妈是1hop,到兄弟姐妹是2hops,到堂兄弟姐妹是3hops,当然,你还可以有各种表亲,4hops,5hops什么的。当然,你的爹妈,你的兄弟姐妹,你的堂兄堂弟,你的远方亲戚,他们也同样有自己的0hop夫妻,1hop爹妈,2hops兄弟姐妹,这些人接到了同样的workload,就是往自己家里搬10000块砖。

2026-03-09 07:38:10 703

原创 分享Linux内核新春活动结出的果实

这几天Xueyuan做出了很多的贡献,在我的dma-mapping: support batched cache sync的patchset v3的测试环节,可以说是废寝忘食,也填补了与我时差的空白。大家因为共同的爱好而聚在一起,就是最好的缘分。》,该活动收获了一个重要的果实,志愿者和爱好者Xueyuan Chen主动加入、积极和我一起参与社区的工作。我的分享不到一小时,只播下了一粒小小的种子,但收获远远超过了付出。

2026-03-01 07:40:30 6457

原创 MGLRU问题5应对: 延迟到map时激活readahead的folios

MGLRU会在page fault上下文,把预读的folio都自动激活到LRU的youngest位置,但是这些预读的folios可能并不会真地访问。但是他们占据了LRU里面最不容易被回收的有利位置,却不是真正的热页。最终导致大量不必要的refault。发送了一个RFC的草案。该草案将folio激活延迟到最终map folio的时刻。如果folio没有最终被map,将不会被激活,从而更加易于回收。后续需要和社区一起讨论出最终可登录mainline的代码。针对昨天讨论的MGLRU问题5(《

2026-02-26 08:25:52 443

原创 荣耀在MGLRU内存回收上的发力或恰到好处

MGLRU在社区已经存在一段时间了,作为比传统active/inactive LRU更加先进的回收算法,在Android领域的应用也逐步兴起,但是直接用还是有很多问题需要解决。关于MGLRU的更多细节,可以阅读笔者之前的《我们更加不需要堆砌patch的数量,只有一步一个脚印做,让每个脚印都闪闪发光、天日可见、人神共赏,才是立足之道,也是真正的踏实,哪怕只走了10步,也比胡乱堆砌的1000步强。可行的 workaround:强制把老的文件 folio 升代,但可能导致文件页在稍年轻代聚集问题;

2026-02-25 04:58:13 504

转载 Jim Huang的《Improve Load Balancing withMachine Learning Techniques basedon sched_ext Framework》

Jim Huang的《Improve Load Balancing withMachine Learning Techniques basedon sched_ext Framework》值得一读。

2026-02-24 16:43:20 68

转载 2024年Linux内核十大技术革新盘点|年终盘点

这样开销未免就有点太大了,其实仔细看DEFINE_ALLOC_TAG的定义,它定义的是一个static struct alloc_tag _alloc_tag的,关键是static,而且link在一个特定的section里面:__section(ALLOC_TAG_SECTION_NAME),所以,用我的tag地址,减去section的开始地址就差不多得到tag在线性区域的存放位置了。但是公平其实可以被另外一种方式来实现,CFS的算法是谁的虚拟运行时间最小,就跑谁(欠谁的钱多,先还谁);

2026-02-22 09:05:25 312

转载 为了忘却的纪念——2022 Linux 内核十大技术革新功能 | 年终盘点

本文来自 CSDN 重磅策划的《2022 年技术年度盘点》栏目。2022 年,智能技术变革留下了深刻的脚印,各行各业数字化升级催生了更多新需求。过去一年,亦是机遇与挑战并存的一年。在本篇文章中,长期奋斗在一线的 Linux 内核开发者、经典书籍《Linux 设备驱动开发详解》作者宋宝华老师为大家解剖 2022 年 Linux 内核开发的十大革新技术功能,纪念这平凡而又不凡的 Linux 内核之旅。作者 | 宋宝华 责编 | 梦依丹出品 | CSDN(ID:CSDNnews)滚滚长江东逝水,浪花

2026-02-22 09:05:25 184

转载 熠熠生辉 | 2023 年 Linux 内核十大技术革新功能

这个机制我们在2022年终盘点中也有提及。在Steven的patch里面,仍然不可能允许用户态去关闭抢占调度,但是用户态在拿spinlock时,可以对内核进行某种暗示(比如通过在一片用户空间和内核空间共享的内存填充一个RSEQ_CR_FLAG_IN_CRITICAL_SECTION),当task B企图在A的临界区抢占的时候,内核看到这个flag,可以让抢占稍微延后一点时间允许A继续执行,这样正在spinlock临界区执行的线程A可以利用这段延后的时间,把自己的临界区执行完,这样C的自旋等待将大为缩短。

2026-02-22 09:05:25 151

原创 马年新春《2025年Linux内核十大技术革新盘点》分享会视频

马年新春,大年初一,视频解读。,以及分享后的互动交流。

2026-02-18 05:32:49 662

转载 2025 年 Linux 内核十大技术创新|年终盘点

目前 6.17 合入的是一个 baby step,支持 P1 和 P2 本身在一个 CPU 上的时候的代理执行,目前显然没有实际意义,因为哪怕手机只有 8 个核,P1 和 P2 在同一个 CPU 的机会也很渺茫。由于 swap table 的显著优势来源于查询路径的缩短、locality 的提升、lock contention 的减小,相对 xarray 加速了 swapcache 的查询、修改等操作,属于基础设施的改善,其优势在服务器等场景会呈现较大的实用价值,对一些关键业务的吞吐量带来提升。

2026-02-16 12:00:58 197

原创 sched_ext: 让不同workload的不同cgroup有不同的调度器

来自Tejun Heo,为 sched_ext 增加了基于cgroup 的子调度器(sub-scheduler)支持,使多个 BPF 调度器可以按 cgroup 层级结构协同运行:父调度器负责在不同 cgroup(租户/分区)之间分配 CPU 资源,子调度器负责各自 cgroup 内部的任务调度。父 scheduler的。上图中,数据库系统的调度器能够理解查询的优先级和锁持有者的重要性(criticality)。虚拟机管理程序(VMM)可以与虚拟机内部的调度器协同,并智能地安排 vCPU 的位置。

2026-02-15 16:44:56 727

原创 延迟抢占用户态线程:调度器时间片扩展time slice extension

当内核同意时间片扩展时,会把 rseq::slice_ctrl::request清零,并将 rseq::slice_ctrl::granted置为 1,表示扩展已批准;想象用户态的线程A拿到了spinlock,由于用户态spinlock并不会像内核态spinlock那样禁止抢占,完全有可能线程B抢占线程A,线程B可能运行很久,而假设线程C需要等待线程A的spinlock释放,这个C的等待可能是非常长的。rseq::slice_ctrl::request =1,它。RSEQ的时间片扩展工作,主要由。

2026-02-13 14:07:58 488

原创 公平CFS调度类:SCHED_NORMAL、SCHED_BATCH和SCHED_IDLE

公平CFS调度类:SCHED_NORMAL、SCHED_BATCH和SCHED_IDLE,它们的相同与不同。

2024-12-22 13:47:20 2313 2

原创 宋宝华:谈一谈Linux写时拷贝(COW)的安全漏洞(1)

COW技术,爆出了巨大的漏洞,让父子进程间可以向对方泄露写过的新数据,成为了Linux内核的惊天大瓜。

2022-01-09 20:10:20 8765 12

转载 CPU漏洞详解

1. 导言性能测试对于 Linux 发行版来说至关重要,Alibaba Cloud Linux 2 也是如此。(Alibaba Cloud Linux 2 是阿里巴巴操作系统团队推出的一款...

2021-10-03 08:33:21 6423

原创 什么时候需要cpu_relax()锁

一个最典型的要使用pu_relax()锁的场景是忙等待(也就是死循环等一个事情的发生),在内核里面有大量的代码,比如等寄存器状态:比如做延迟:简单来说,你如果在内核里面写了忙等待的代码,都...

2021-09-23 19:27:06 3756

原创 宋宝华:为了不忘却的纪念,评Linux 5.13内核

Linux 5.14于14小时之前发布了,而我5.13的总结还没有写出,我早觉得有写一点东西的必要了,这虽然于搬砖的码农毫不相干,但在追求进步的工程师那里,却大抵只能如此而已。为了不忘却的...

2021-08-30 20:29:00 12563 7

转载 深入理解Linux内核之进程睡眠(下)

4.用户态睡眠以sleep为例来说明任务在用户态是如何睡眠的。首先我们通过strace工具来看下其调用的系统调用:$stracesleep1...close(3)...

2021-08-14 16:30:40 3114

转载 深入理解Linux内核之进程睡眠(上)

1开场白环境:处理器架构:arm64内核源码:linux-5.10.50ubuntu版本:20.04.1代码阅读工具:vim+ctags+cscope无论是任务处于用户态还是内核态,经常会...

2021-08-14 16:30:40 2999

Linux总线、设备和驱动模型

宋宝华 - Linux总线、设备和驱动模型的详细讲座的ppt分享。

2017-08-12

宋宝华 - 深入探究Linux设备树CSDN讲座ppt

宋宝华 - 深入探究Linux设备树CSDN讲座ppt。详细的论述的device tree的方方面面。

2017-08-20

宋宝华-PowerPC VxWorks BSP学习与分析

讲述PowerPC VxWorks BSP和设备驱动开发全套流程。

2010-03-13

在ARM板子上直接跑的gdb

在ARM板子上直接跑的gdb, 版本GDB 7.5,static编译的。可以放在板子上直接调程序,看bt,看core dump。

2017-02-25

Android和Ubuntu同时运行

Android和Ubuntu同时运行的视频

2012-05-03

LDD6410 S3C6410开发板开发与使用手册

LDD6410 S3C6410开发板开发与使用手册,全面描述了U-BOOT、Linux、BSP、驱动、Android 1.6,QT embedded 4.5.3的移植和开发技术。

2010-03-09

LDD6410 S3C6410开发板原理图

LDD6410 S3C6410开发板原理图

2010-03-09

空空如也

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

TA关注的人

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