
使用 Nvidia GPU 的 VRAM 作为 Linux 上的交换空间
一句话看懂:开发者 c0dejedi 发布了一个名为 nbd-vram 的开源工具,允许 Linux 系统将 Nvidia 显卡的显存(VRAM)用作系统交换空间(swap),绕过驱动限制,在消费级 GPU 上实现高速内存扩展,对内存焊死无法升级的笔记本用户尤其有用。
事件核心:发生了什么
传统上,利用 GPU 显存作为 CPU 可访问的内存扩展需要 nvidia_p2p_get_pages_persistent 这一官方 API,但 Nvidia 在消费级 GeForce 显卡上直接返回错误(EINVAL),该功能仅对 Quadro 和数据中心 SKU 开放。nbd-vram 则另辟蹊径:它在用户态通过 CUDA 驱动 API 分配显存,然后通过 Linux 内核内建的 NBD(网络块设备)协议,经 Unix 套接字将显存暴露为 /dev/nbdX 块设备,最终作为普通 swap 设备挂载。数据路径为:内核 swap 子系统 → NBD 内核驱动 → Unix 套接字 → 守护进程 → cuMemcpyHtoD/DtoH → GPU 显存。这样无需编写或维护内核模块,不依赖 Nvidia 内核符号,驱动或内核更新后也无须重新编译。项目已在 RTX 3070 笔记本(16 GB 物理内存 + 8 GB 显存,驱动 580.159.03,内核 6.17,Pop!_OS)上测试成功,分配 7 GB VRAM 做 swap,加上 zram 和 SSD swap,总可寻址内存达到约 46 GB。溢出顺序为:RAM 先满 → VRAM 吸收溢出(PCIe 快速) → zram 压缩(CPU) → 最后才落 SSD。
为什么重要
这个项目在技术层面解决了消费级 GPU 长期以来的“显存墙”问题:Nvidia 将 P2P 显存直通能力限制在专业显卡,而 nbd-vram 用用户态 CUDA 显存拷贝加 NBD 协议绕过了这一限制,让任何支持 CUDA 的 GTX/RTX 显卡都能充当高速交换设备。对于 AI 开发和推理场景,它意味着即使物理内存不足,大模型推理或数据预处理任务也能借助显存的低延迟(比 NVMe 更低)避免大量落盘 SSD 带来的性能损耗。另一方面,该项目展示了 Linux 生态通过社区创新绕过设备厂商限制的灵活性,可能促使更多开发者关注 GPU 作为通用计算资源而非仅推理加速器的用法。不过,7 GB 显存 swap 的 1.3 GB/s 顺序吞吐虽然远高于 SSD,但与直接访问物理 DDR5 内存(30-50 GB/s)仍有数量级差距,实际性能提升取决于任务的内存访问模式。
对用户/开发者/创作者的影响
对于使用轻薄本或内存焊接笔记本的 Linux 用户,nbd-vram 提供了一种“零成本”内存升级方案,尤其适合同时运行多个开发容器、大模型推理服务或需要大量数据预处理的 AI 工作流。开发者可以将 VRAM swap 优先级设高(默认 priority=1500),系统在 RAM 耗尽后优先写 VRAM,而非立即触发 zram 压缩或 SSD 交换。项目还内置电源管理:可配置为拔掉交流电后自动停止 swap,恢复供电后重启,适合移动办公场景。安装过程简单:git clone 后运行 sudo install.sh,systemctl 启停即可,无需 CUDA 工具包,仅需 libcuda.so.1 和 nbd-client 包。测试脚本 test-nbd.sh 和 test-fill.sh 允许不安装直接执行压力测试。目前公开信息显示,该工具在 RTX 3070 笔记本上表现稳定,但在其他 GPU 型号、驱动版本和内核组合下的兼容性尚未广泛验证。
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
值得关注的后续
第一,Nvidia 是否会在未来驱动版本中进一步收紧或封锁这一用户态路径,类似其已针对 CUDA 软件兼容性所做的限制。第二,社区是否会针对 AMD GPU(通过 ROCm)或 Intel Arc 显卡开发类似方案,扩大显存作为系统交换的硬件覆盖范围。第三,该工具在高内存带宽场景(如大模型推理时的中间激活保存)下的实际延迟和稳定性表现,以及是否会催生更多将 GPU 显存用作通用内存的 Linux 项目。


