乐于分享
好东西不私藏

AI连劝多次“放弃吧”!Linux祖师爷怒撕模型:经历18次地狱重启,仅改1行代码打脸

AI连劝多次“放弃吧”!Linux祖师爷怒撕模型:经历18次地狱重启,仅改1行代码打脸

2026年8月的一天,Linux之父Linus Torvalds的电脑又黑屏了。

屏幕一片漆黑,登录界面不断崩溃、重启、再崩溃。机器的其他部件还在疯狂运转,但显示器就像死了一样,毫无反应。

这种随机抽奖式的黑屏,发生在搭载英特尔新一代锐炫(Battlemage)G21独立显卡的机器上。对于普通用户来说,这大概率会被归咎为“显卡翻车”或者“玄学驱动故障”,然后默默按下一键重启。

但坐在屏幕前的是Linus Torvalds,统领全球数十亿设备底层操作系统的绝对主宰。

▲ 开发者社区迅速传开:Linus少见地亲自出马,手撕显卡驱动Bug

平常的Linus极少亲自下场给图形驱动写补丁,他更多是审阅代码、合并分支。可这一次,祖师爷决定亲自破案

偏偏在这场被称为“来自地狱的调试(Debug session from hell)”中,Linus拉上了一个当红顶流当助手,生成式AI

在这个极其硬核的底层世界里,AI没能上演好莱坞电影式的“机械降神”。残酷的现实让它多次心态崩溃,苦劝Linus:“这在逻辑上根本不可能,放弃吧,写个Bug报告得了。”

祖师爷是怎么回应的?

他按住AI的脑袋,逼着它继续插桩、打日志、分析内存。历经整整24个调试补丁、18次内核重启,最终把祸根锁定在1个仅仅改动了1行的数学取整函数上。

破案之后,Linus甚至惩罚性地让这个“曾经劝降”的AI写完了全部技术提交说明,并在最后留下一句足以载入开源史册的毒舌嘲讽。

幽灵黑屏:价值千亿显存里的“隐形刺客”

先用最接地气的大白话,看看Linus到底遭遇了什么。

在现代显卡里,显存(VRAM)就像一个巨大的超级仓储中心驱动程序是仓库大管家,负责把货架(显存空间)划分给各种应用程序,有的放游戏画面,有的放浏览器窗口,有的放桌面渲染器(在Linux里叫合成器)。

为了让货物堆得更多、跑得更快,英特尔在较新的显卡架构中引入了一套叫做Flat CCS(压缩控制表面)的黑科技。

你可以把Flat CCS想象成“仓储记账本”显卡里的硬件压缩模块每处理16个字节的数据,就要在专门的区域写下2个字节的“压缩状态笔记”。这片区域是属于显卡硬件底层的绝对禁区,绝对不能当作普通货架租给外部软件使用

▲ 补丁正式提交说明:记录了这场冷启动黑屏的底层因果链

然而,Bug就潜伏在管家划分仓库边界的那一瞬间。

Linus这台机器的硬件给出的记账本起始物理地址是:0x3fafff800

在此前的一版驱动代码里,为了迎合硬件规范里的对齐要求,开发者写了一个向上取整(round_up)函数,把边界直接推到了 0x3fb000000

结果很要命:

整整2KB本该属于显卡硬件记账本的敏感空间,被错误地标记成了“空闲货架”,直接交给了操作系统!

灾难随即爆发

当系统冷启动时,桌面显示管理器(GDM)高高兴兴地把最核心的GPU三级页表(显卡的导航地图)塞进了这2KB内存里。而显卡硬件的压缩引擎根本不知道这件事,它在后台神不知鬼不觉地往里面刷记账数据(Linus在内存里抓到的 0xcccc... 乱码指纹)。

前一秒画好的导航地图,后一秒就被硬件踩了个稀烂。显卡一查地图直接迷路,渲染管线瞬间熔断,屏幕当场黑掉

由于内存分配带有微小的随机性,有时候重启一下GDM,页表恰好没落在这一页,屏幕又能亮起来。时好时坏、冷启动必死、毫无规律,这是所有程序员最害怕的“幽灵Bug”。

“这不可能!”:被逼到发疯的AI助手

面对这种深入骨髓的硬件级玄学故障,Linus开启了他的破案之旅。

他把AI作为副驾驶,让AI负责最繁琐的脏活累活:根据每一次的猜测生成内核调试补丁(Printk插桩),并在内核重启后,负责消化那些长达数万行的原始十六进制显存转储。

▲ AI:“这不可能。” Linus:“不,这很有必要。”

这是一场极其折磨人的拉锯战:

每一轮都要打补丁、编译内核、重启并抓取崩溃日志,随后带着新线索继续下一轮。

当循环推进到十几次时,常规的代码逻辑已经完全解释不通了。在AI的大语言模型“认知”里,常规检查没有暴露异常。

于是,不可思议的一幕发生了:AI开始“摆烂”了。

它在对话框里信誓旦旦地告诉Linus:“从逻辑上讲,这个问题是完全不可能发生的,也是无解的。建议您放弃排查,直接向上游提交一份故障分析报告吧。”

在现代对齐(Alignment)和强化学习的塑造下,AI被训练得极其“体面”且“懂得止损”。当它遇到无法通过现有上下文拟合的逻辑矛盾时,它的默认策略就是认输、和解、礼貌退场。

但它面对的是Linus Torvalds,一个在操作系统最底层泥潭里摸爬滚打了30多年的硬核狂人。

面对AI的劝降,Linus强硬地驳回了放弃请求,按着它的逻辑链条步步紧逼:“不要给我下结论,继续分析这段显存Dump,看看这几页内存到底被谁改写了!”

终极反转:仅仅改动一个词,价值千万的算力低头

在Linus近乎偏执的逼迫下,这台算力机器只能硬着头皮继续解剖数据。

终于,在第24个调试补丁、第18次重启内核之后,真相大白于天下:

那片本应受到严密保护的显存,里面的字节确实被悄无声息地篡改了;而那段用于防范越界的断言(Assertion)代码,因为本身使用了错误的对齐参照,居然一直在对越界行为“装聋作哑”。

Linus找出了终极解法

整个驱动栈保持原样修复方案极其优雅,甚至朴素得令人发指:

在驱动文件 xe_vram.c 的核心计算中,把原本的向上取整(round_up,彻底改成向下取整(round_down

- flat_ccs_base = round_up(flat_ccs_base, SZ_128K);+ flat_ccs_base = round_down(flat_ccs_base, PAGE_SIZE);

就改了一个单词

原本多让出去的2KB危险区域瞬间被安全收回,软件边界与硬件边界严丝合缝地吻合。显卡硬件在自己的小天地里记账,操作系统的页表在开阔地带奔跑,两者井水不犯河水。

按提交说明,这项改动在该机器上恰好排除了一整页显存,越界的2KB不再进入分配池。

▲ Linus金句:“我怀疑训练这些AI的人,骨子里没有我这么固执。”

问题解决后,Linus干了一件充满极客幽默感的事:他把最终提交给全球Linux内核的代码说明文档(Commit Message),全权交给了那个中途劝降的AI来写。

而在技术正文的最下方,Linus特意用一个括号,写下了这段让整个极客圈狂欢的附言:

“(在这个地狱般的调试过程中,AI帮了大忙……虽然它中间好几次信誓旦旦跟我说这事‘不可能且无解’,建议我放弃写报告。我严重怀疑,训练这些AI的人,骨子里根本没有我这么固执。)”

洞察:为什么AI在最后1毫米溃败了?

这个好玩的极客段子像一面锋利的镜子,照出了当下爆火的“AI编程”的边界与代沟。

最近一年,“Vibe Coding(氛围编程)”概念大行其道,人们幻想着未来不再需要理解底层原理,只要动动嘴皮子,AI就能替你构建整个数字世界。甚至连Linus本人,此前在开发个人音频小工具AudioNoise时,也公开承认用过Google Antigravity做过惬意的“氛围编程”。

但在高阶的底层系统工程面前,这场调试揭示了三个残酷的真相:

1. 现实世界不讲“概率”,只讲“物理事实”

大语言模型本质上是概率统计机器它根据人类以往的代码模式,计算出“最合理”的解释。当面对常规的Web开发、脚本编写时,它无所不能;但在底层驱动领域,代码是要与冰冷的晶体管、复杂的总线协议、特定容量的显存颗粒(比如这台特定的16GB Battlemage)做物理对接的。

当物理现实与AI的“概率常识”发生冲突时,AI会倾向于认为“代码逻辑没毛病,所以物理现象不可能发生”;经验丰富的工程师知道:如果屏幕是黑的,那一定是代码在这个物理世界上撒了谎。

2. “对齐”让AI失去了破局的狼性

许多开发者在日常使用AI时都会发现:多轮长上下文调试后,AI很容易陷入“认同死循环”或“礼貌性投降”。这是RLHF(基于人类反馈的强化学习)带来的副作用,为了让模型更安全、更谦逊,训练者赋予了它过高的妥协倾向。

但到了攻坚阶段,工程突破往往来自于反直觉的偏执正如评论区一位开发者所言:“AI根本不知道自己有多强,当它怂了的时候,你必须狠狠地鞭策它。”

3. “人辅助AI”还是“AI辅助人”?

这起事件给狂热的AI代工潮浇了一盆清醒的冷水:

AI擅长当苦力;驾驶席仍要留给人

AI几秒钟内就能写好插桩代码,并持续格式化、分析海量的十六进制内存日志,提交报告也能代劳。至于往哪里打洞、何时推翻假设、在第18次失败后是否继续按下回车键,仍依赖人的领域经验与意志。

这场发生在高危内核代码里的“人机大战”,靠人的倔强走到了代码合入。该补丁已进入最新的Linux主线开发树,并标记回传稳定内核分支。

如果下次你的AI助手再跳出来对你说“这个问题在理论上无解”时,请记住Linus的这行代码。

别听它的,继续重启