利用冷启动时注入自定义固件解锁N卡潜力,3080TI算力提升80%
本帖最后由 kcthomlau 于 2026-10-23 10:41 编辑
https://github.com/Zagitta/gpu-unlock
Zagitta/gpu-unlock 项目技术解析
项目概述
这是一个 Linux 内核模块(纯 C 语言编写,84.6% 代码为 C),它通过在内核驱动绑定显卡之前运行一段解锁代码,来解锁 NVIDIA GA102/GA104 核心显卡(如 RTX 3090)的隐藏计算能力。它既不是 UEFI 应用,也不是修改版 NVIDIA 驱动,而是一个独立运行的内核模块。
目前 263 Star,2026 年 9 月底刚公开,非常新的项目。
核心原理:两大技术融合
项目 README 原文说得很清楚:
This Linux kernel module combines the CMP unlocker's V67/PLM technique with the pre-driver timing of the UEFI approach.
1. V67/PLM 技术(来自 CMP Unlocker)
- V67 是 NVIDIA GA102 芯片内部安全协处理器(Secure Coprocessor)上运行的一段固件。GA102 内部有多个 Falcon 核心(轻量处理器),其中一个专门负责安全启动和固件验证。
- PLM(Primary Loader Module)是进入 GPU 内部处理器的入口点。
- 通过向 GPU 的固件安全接口(FWSEC-FRTS)发送特定指令,可以在板载 ROM 验证通过后,将自定义固件加载到 GPU 的内部处理器上执行。
- 拿到 GPU 内部处理器的执行权后,就可以直接读写 GPU 的 MMIO 寄存器、配置 DMA、修改速度选择器(Speed Selectors)等底层硬件参数。
2. Pre-driver Timing(UEFI 方式的思路迁移)
- 之前的方案需要在 UEFI 阶段(操作系统启动前)运行程序来解锁,这要求用户修改启动流程,兼容性差。
- 本项目将同样的"抢先执行"思路迁移到了 Linux initramfs 阶段:将 gpu_unlock 模块打包进 initramfs,让它比 nvidia 驱动更早加载,从而在 NVIDIA 驱动绑定显卡之前完成解锁。
解锁流程详解(从源码角度)
从 unlock_610.c(50.5KB,约 1356 行核心代码)可以梳理出完整的执行链路:
Step 1:加载固件资源
模块从 initramfs 中加载多个固件二进制文件:
- booter_load_ga102.bin — 引导加载器,用于初始化和控制 GPU 内部处理器
- v67-ga102-610.43.03.bin — V67 固件镜像(从官方驱动中抽取)
- gsp_ga10x.bin — GSP(GPU System Processor)固件
- gsp_boot_ga102.bin + 描述文件 — 启动描述符
Step 2:Falcon 处理器控制
通过 MMIO 读写操作:
- 执行 falcon_reset() — 重置 GPU 内部处理器
- 执行 falcon_dma() — 通过 DMA 将代码/数据写入 GPU 内部内存
- 执行 falcon_hs() — 启动固件在 Falcon 核心上运行(Host-Start)
Step 3:写入速度选择器(Speed Selectors)
这是"解锁 GPU 潜力"的关键操作:
- SS0 = 0x88888888:选择完整的 BF16(Brain Floating Point 16-bit)计算速率。RTX 3090 正常情况下 BF16 速率被限制,写入此值后解锁到与 FP32 相同的速率
- SS1 = 0x8:4 位寄存器,具体效果在代码中标注为"未测试"(untested),可能涉及其他计算单元的速率解锁
Step 4:FLR(Function Level Reset)
执行 PCIe 功能级重置,让 GPU 回到干净的初始化状态。然后未修改的官方 NVIDIA 驱动加载并绑定显卡——驱动看到的是一张已经被解锁过的显卡,但驱动本身无需任何修改。
启动流程
开机 → initramfs 加载 → gpu_unlock 模块运行(解锁GPU)→ nvidia 驱动加载(绑定已解锁的GPU)→ 系统启动完成
用户通过内核命令行参数选择要解锁的显卡:
gpu_unlock.targets=all # 解锁所有 GA102/GA104 显卡
gpu_unlock.targets=0000:21:00.0 # 只解锁指定 PCI 地址的显卡
gpu_unlock.targets=0000:21:00.0,0000:22:00.0 # 多张卡
安全与限制
- 仅支持冷启动:要求完全断电重启,不支持热重启(warm reboot)。因为 GPU 必须处于"冷"状态(从未被驱动初始化过)
- 仅支持 GA102/GA104:目前只测试了 RTX 3090(GA102),GA104 和其他 GA102 变体(如 RTX A-series、数据中心卡)未被支持
- 需要 Secure Boot 关闭:加载内核模块需要禁用 Secure Boot
- 固件来源:固件文件从官方 NVIDIA 驱动包中提取,模块本身 GPL-2.0 开源,但生成的 payload 派生自 NVIDIA 固件
与 CMP Unlocker 的关系
这个项目实际上是将之前针对 NVIDIA CMP 170HX 矿卡的解锁技术(该卡本质上是阉割版 A100,GA100 核心被固件锁死了算力和显存)迁移到了消费级的 RTX 3090(GA102 核心)上。两者利用的是同一类技术路径:通过 GPU 安全协处理器的固件接口,在驱动层之前获取 GPU 内部处理器的执行权,从而修改硬件配置寄存器。
总结
维度 说明
本质 Linux 内核模块,在 initramfs 阶段抢先运行
核心技术 V67 固件注入 + Falcon 处理器控制 + 速度选择器改写
解锁内容 BF16 全速率等被 NVIDIA 限制的 GPU 计算能力
优势 无需修改 NVIDIA 驱动,无需 UEFI 修改,兼容标准驱动
风险 需要关闭 Secure Boot,仅支持特定芯片,冷启动要求
这个项目本质上是利用 NVIDIA GPU 固件层面的设计特性(允许在安全启动流程中注入自定义固件),在操作系统驱动层之前"劫持"GPU 初始化流程,从而实现硬件潜力的解锁。属于硬件安全研究领域的有趣实践。
有用家表示解锁3080ti有有巨量性能提升
3080ti (set to 315W limited) mine went from:
BF16 71.59 TFLOP/s to 113.98
TF32 35.65 TFLOP/s to 65.28 (~80%)
Kernel 7.2.11-1-cachyos-server
Nvidia driver ver 615.78.08 |
|
|