乐于分享
好东西不私藏

AI几度崩溃劝他放弃!Linus亲历地狱调试:怒怼“训练你的人没我倔”,重启18次手撕显卡惊天Bug!

AI几度崩溃劝他放弃!Linus亲历地狱调试:怒怼“训练你的人没我倔”,重启18次手撕显卡惊天Bug!

屏幕是一片死寂的漆黑

无论怎么按键盘,图形界面就是死活刷不出来。屏幕背后,GNOME 桌面显示管理器正在陷入疯狂的死循环,启动、崩溃、重启、再崩溃

坐在电脑前的,正是 56 岁的“Linux 之父”林纳斯·托瓦兹(Linus Torvalds)

而此时,协助调试的 AI 好几次都给出同样的判断:

问题不可能存在,也无解,应该写一份报告后停止排查。

换作普通开发者,折腾到这步大概率就砸键盘重装系统了。但站在它面前的,是整个开源世界公认脾气最硬的“暴躁老哥”。

面对 AI 的多次劝退,Linus 毫不客气地顶了回去:

“我严重怀疑,训练这玩意儿的人,大概没我这么倔!”

▲ 社交媒体爆料:Linus 借力 AI 搞定顽固显卡 Bug

整整一天的“地狱级调试”,24 个调试补丁18 次内核重启

最终,Linus 带着被他训得服服帖帖的 AI,在一行潜伏了两年的显卡底层代码里,将一个取整函数换成另一个,瞬间终结了这场黑屏噩梦!

祖师爷亲自下场!不写代码的 Linus 为何被逼进“调试地狱”?

经常关注 Linux 内核圈的人都知道,Linus Torvalds 日常很少亲自写内核补丁

作为掌管全球数十亿台设备底层命脉的“终极裁判”,他日常的工作极其纯粹:审查代码、合并全世界顶级工程师提交的 Pull Request、以及在邮件列表里火力全开地骂人。

能让祖师爷亲自披挂上阵、肉身写补丁的场景,在近年来罕见到了极点。

偏偏这一次,这枚“幽灵暗雷”精准地砸在了 Linus 自己的主力机上。

他的机器搭载了 Intel 最新的 Battlemage G21 独立显卡(16GB 显存)在一次合并窗口期间,由于用户态组件的细微变化,机器在冷启动时几乎百分之百必现黑屏

无论机器的核心算力跑得多欢快,屏幕就像被焊死了一样,漆黑一片。

▲ GitHub 提交记录中,Linus 记录下这场“地狱调试”与 AI 的极限拉扯

这个问题还极具欺骗性:偶尔重启一下 GDM 又能进桌面;有时屏幕局部出现怪异的花屏;而在绝大多数冷启动中,系统则直接陷入黑屏死循环。

Linus 彻底被激怒了

他没有把锅甩给 Intel 的驱动团队慢慢排期,而是直接抄起键盘,拉上 AI,开启了一场被他自己称为“来自地狱的调试会话(debug session from hell)”

小白也能懂:一行致命代码,如何让顶级显卡瞬间“脑瘫”?

要理解这个 Bug 有多刁钻,可以用一个极简的比喻来拆解。

显卡上的显存(VRAM),就像是一个巨大的公共出租仓库操作系统和各种软件,都可以来这里租借货架放东西(比如游戏贴图、窗口画面、以及管理内存的“GPU 页表”)。

但在现代高端 GPU 里,为了节省数据传输的带宽,硬件会对画面进行实时压缩。

既然有压缩,就必须有地方存放“压缩状态的元数据”。Intel 采用了一种叫 Flat CCS 的架构,简单说,就是在显存里硬性划出一块“自留地”,专门给显卡硬件记账用

这块地是绝对的“私人禁区”,外人绝对不能碰!

【显卡总显存】┌───────────────────────────────┬──────────────────┐│      操作系统可用的公共显存     │ 硬件保留区(CCS)   ││     (用来放页表、贴图、窗口)    │  (硬件私有账本)  │└───────────────────────────────┴──────────────────┘                                ▲                          这里的界线划在哪?

显卡驱动在启动时,必须明确告诉内存分配器:“客人们能用的货架,到哪一个地址必须截止!”

两年前,Intel 工程师提交了一行代码。由于硬件手册里写着 CCS 的硬件视图需要按 128KB 边界对齐,开发者在计算可用内存上限时,顺手写了一个 round_up()(向上取整)

灾难,就在这里悄然埋下了引线

在 Linus 这台机器上,硬件保留区的起始基址恰好未按 128KB 对齐(大约在 0x3fafff800)。驱动执行了向上取整后,直接把分界线往后推到了 0x3fb000000

原本属于硬件私有禁区的最后 2KB 空间,被大笔一挥,当成“普通可用显存”白白送给了操作系统分配器!

▲ 提交说明详述了显存边界错误与黑屏的因果链

当系统冷启动时,负责合成桌面的图形组件(Mesa)刚好把至关重要的三级 GPU 页表放进了这多出来的 2KB 空间里。

然而,显卡的压缩硬件在后台自顾自地工作,它根本不管你放了什么,直接按照自己的规则往这块私有区域里狂写压缩元数据(类似 0xcccc... 的特征字节)!

这等于客人刚把最核心的“账本索引”放进货架,仓库管理员半夜就按照自己的习惯把墨水泼了上去。

第二天一早,合成器一读取页表,发现全是乱码,当场崩溃;显示管理器 GDM 试图挽救,立刻重启它;一重启,页表再次被硬件覆写,再次崩溃……无限黑屏循环就此诞生!

修复方案其实极其简单:把分界线从“向上取整”改成 round_down()(向下取整)!宁可少给分配器分一页内存,也绝不能越雷池半步。

可问题是:在包含几千万行代码的 Linux 内核与驱动迷宫里,你怎么知道是这个词写反了?

24个补丁、18次重启!当世界上最倔的人遇到“想摆烂的AI”

在茫茫代码海中抓这种幽灵 Bug,靠肉眼看是根本不可能看出来的。

它需要极度枯燥、机械且高强度的“物理排雷”:在内核里插桩打日志 -> 编译内核 -> 重启开机 -> 抓取微秒级的崩溃现场 -> 分析内存地址 -> 调整猜想 -> 重新插桩……

这正是 AI 大显身手的地方

Linus 把 AI 当作了高强度的“苦力工具(grunt work)”:让它飞速生成内核调试补丁、在各个可疑函数里埋设探针、迅速解析开机抓到的十六进制内存转储日志。

但调试底层硬件驱动,远比跑一段 Python 脚本复杂。

随着排查深入,各种假象层出不穷由于旧代码里存在互相掩盖的错误断言,日志反馈出的信息充满了矛盾。

这时候,大模型的“天生缺陷”彻底暴露了,它开始投降了

在数次分析陷入死胡同时,AI 多次断言问题“不可能且无解”,建议写一份报告后停止调试。

这正是大模型典型的“中位数怠惰”它的训练数据里,充满了大量普通人类在遇到绝境 Bug 时放弃、抱怨、或者转向其他事务的语料。遇到离群的死磕场景,AI 会倾向于给出“最合理的放弃借口”。

但 Linus 偏偏是那个处于人类智力和偏执度最顶端的“离群值”。

每一次 AI 喊着“不可能、算了吧”,Linus 都会直接把它怼回去,强行纠正它的假设,逼着它根据最新的内存特征(比如那些被篡改的 0xcccc 数据)继续生成下一组探测代码。

整整 24 个临时调试补丁!整整 18 次真机内核重启!

在 Linus 钢铁般的意志压迫下,AI 像一台不知疲倦的超级工兵,终于配合他将嫌疑范围层层剥离,最终精准锁定了那个本不该存在的 round_up()

功劳认账!Linus 让 AI 代写了正式提交说明

当那行 round_up() 被修正为 round_down() 的一瞬间,显示器瞬间被点亮,熟悉的 Linux 登录界面重新跃然眼前。

困扰多时的黑屏梦魇,灰飞烟灭

这个修复补丁最终以 commit 818bebeb63dd 正式并入了 Linux 7.3 主线,并被迅速标记回移植(backport)到各大长期支持的稳定内核分支中。

令人莞尔的是,Linus 展现了他极其公平的一面。

既然 AI 在这场恶战中承担了海量的苦活累活,他索性让 AI 撰写了这篇正式提交记录(commit message)的主体技术说明,并在文末用第一人称写下了那段注定会被载入开源史册的调侃:

“这本质上就是一个把错误的 round_up() 改成 round_down() 的一行补丁,但为了找到它,经历了 24 个补丁和 18 次内核重启……它得到了一个 AI 的巨大帮助。我本想称它为不知疲倦的助手,但它其实多次告诉我这个问题不可能且无解。我怀疑这东西是被没我这么倔的人训练出来的。”

终极洞察:人类意志如何驾驭 AI 工具

回顾整场风波,如果抽离出社交媒体上那些浮躁的“AI 封神”噱头,你会发现 Linus 用这场实战,给全行业上了一堂极具分量的“AI 时代人机协作示范课”

这甚至与他过去一年对 AI 态度的演变完美契合:

  1. 他从不盲目排斥 AI
    :早在业余做吉他效果器项目时,他就曾用 AI 工具做过音频可视化的“vibe coding”;
  2. 他痛恨无脑滥用 AI
    :几个月前,面对无数人拿着 AI 自动生成的垃圾漏洞报告疯狂轰炸 Linux 安全邮件列表,Linus 曾公开大骂这种没有理解、纯属制造噪音的行为是在谋杀维护者的精力;
  3. 他划清了工具与主权的界限
    :面对极端的“反 AI 原教旨主义者”,他曾直言 Linux 无意加入反 AI 阵营,有异议者可以 fork;而在自己遭遇死局时,他亲自示范了什么叫把 AI 按在执行层,把判断权留在脑子里

这正是整起事件最深刻的启示:

大模型是一台算力惊人、不知疲倦的机枪,但它没有方向盘,甚至会在泥潭面前劝你掉头回家。

系统最终能走多远,取决于屏幕前那个读得懂每一行汇编、看得清每一个硬件边界、并且比机器还要固执的人类灵魂

正如一位开发者在推特上的精辟总结:

“连 AI 在 Linus 身边,都必须把‘放弃’给我咽回去。”