
RTX 5090 嘅 VRAM 拎嚟頂 RAM?WSL2 跑到,但代價唔細
Docker 同編譯可多一重緩衝,本地 LLM 用家反而未必啱
32GB GDDR7 平時淨係用得幾 GB,拎剩低嗰堆 VRAM 幫 system RAM 頂一頂,聽落相當合理。XDA 作者 Joe Rice-Jones 真係用 RTX 5090 試咗:佢喺 WSL2 撥出 7,168MB VRAM 做高優先 swap,亦成功將一個缺 RAM 嘅程序約 3.5GB 資料搬入去。方法行得通,但只係少數情況先值得用,唔代表真係可以慳返 RAM。
VRAM 冇變成真正 RAM
今次用嘅開源工具叫 nbd-vram。佢先用 CUDA driver API 霸住一截 VRAM,再經 Unix socket 將嗰截空間扮成 Network Block Device,Linux 最後見到嘅係 /dev/nbd0,可以照普通磁碟咁設成 swap。資料路徑會經 Linux swap、NBD daemon、CUDA copy 同 PCIe,CPU 唔可以直接當普通記憶體咁讀寫 VRAM,所以容量多咗,只係爆 RAM 時多一層緩衝。
呢個分別對工作負載好重要。Docker containers、平行編譯、開大量 browser tab,原本去到 OOM 就會俾系統殺程序,VRAM swap 至少可以保住工作繼續行,只係一旦頻繁換頁,速度會跌。至於本地 LLM,如果模型本身要用同一張 GPU 跑推理,預留俾 swap 嘅 VRAM 會直接食走模型容量;想塞大模型入卡嗰班人,通常唔會想咁分。

圖片:Wikimedia Commons — PantheraLeo1359531(CC BY 4.0)
WSL2 實測反而輸俾 VHDX
nbd-vram 作者用 RTX 3070 Laptop 跑原生 Linux,再同會休眠嘅 NVMe 比較;VRAM swap 平均延遲係 257 微秒,NVMe 就係 8.7 毫秒。不過 XDA 嗰部桌面機結果完全唔同:VRAM device 平均 331.5 微秒,WSL2 嘅 VHDX swap 反而係 307.7 微秒。最差一次 VHDX 去到 880 微秒,VRAM 勝在反應較穩,但唔算快。
重負載差距仲明顯。XDA 用 16 條 NBD connections、8 個 jobs 跑非同步 4K random read,VRAM 得 46,900 IOPS,VHDX 就有 425,000 IOPS;順序頻寬則量到 1.8GB/s,同項目原作者嘅 1.9GB/s 接近。瓶頸唔喺 GDDR7,而係每次細小 I/O 都要繞過 WSL2 GPU 虛擬化層,加埋 Windows host 用 RAM cache 托住 VHDX,RTX 5090 嘅規格喺呢度幫唔到幾多。
點設定,同埋邊步最危險
原生 Linux 要有支援 CUDA 嘅 NVIDIA GPU、libcuda.so.1、nbd-client、gcc、make,項目建議用 Linux kernel 5.6 或以上。下載源碼後可先跑 sudo bash test-nbd.sh,佢會配置 VRAM、寫入同讀回 1MiB 資料,再開啟 swap;確認冇問題先執行 installer。容量、priority、worker threads 同 connections 都可喺 systemd service 入面調校,改完要 reload 同 restart。
WSL2 就未去到可以照抄 README。XDA 作者用 Windows 11 Pro Insider 26H2、WSL 2.9.4 同 6.18 kernel,sudo modprobe nbd 已經載入到模組,但 daemon 會卡喺 mlockall。佢要設成 VRAM_NO_MLOCK=1、略過記憶體鎖定先至跑到,但咁做等於停用兩項防死鎖措施其中一項。呢個只適合短時間測試,唔應該放入每日開工環境或者重要 build pipeline。
另外,NVIDIA 官方文件提醒,WSL 入面只應用 Windows host 提供嘅 NVIDIA driver,唔好另裝 Linux display driver;WSL 對 CUDA Unified Memory、pinned system memory 同部分管理功能亦有限制。nbd-vram 雖然唔等同 Unified Memory,但呢啲限制反映 WSL 嘅 CUDA 環境始終同原生 Linux 有分別,所以 nbd-vram 嘅表現同保護機制未必可以照搬;今次差距嘅確實成因仍要再測試。
調 WSL 配額通常更實際
如果 Windows 本身仲有 RAM,Microsoft 嘅 WSL 設定文件提供一條直接得多嘅路:喺 WSL Settings 或 %UserProfile%\.wslconfig 調高 memory,亦可改 swap 大小同 swapFile 位置。WSL2 預設最多用 Windows 一半 RAM,磁碟 swap 預設就係 Windows RAM 嘅四分一;部機有 64GB RAM,但 WSL 成日頂住 32GB 上限,先檢查配額通常已經解決到問題。
真正適合 nbd-vram 嘅,係焊死 RAM、獨立 NVIDIA GPU 長期閒置、又跑原生 Linux 嘅雙 GPU 手提電腦。桌面 WSL2 開發者可以當佢係避 OOM 嘅實驗性保險;用同一張卡打機、render 或跑 LLM,就要預先停掉 service,等 swapped pages 搬返去 RAM 或其他 swap。休眠前亦要清得走 VRAM swap,否則 GPU 斷電毀掉 CUDA context,部機有機會卡死。
參考來源
- XDA Developers — I used my Nvidia GPU's VRAM as system swap, and it freed me from buying more memory — original report
- nbd-vram GitHub repository — 項目原始碼同 README,交代原理、安裝方法、測試數字、防死鎖設計同休眠風險。
- Microsoft Learn:Advanced settings configuration in WSL — 核對 WSL2 memory、swap、swapFile 嘅官方預設值同設定位置。
- NVIDIA:CUDA on WSL User Guide — 核對 WSL2 嘅 NVIDIA driver 安裝方法、CUDA 支援範圍同已知限制。
本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。







