nbd-vram: usa la VRAM de tu GPU NVIDIA como swap en Linux

Fuentes: nbd-vram: turn NVIDIA GPU VRAM into Linux swap space
Imagen generada por IA con el prompt: Stylized laptop motherboard with glowing NVIDIA GPU chip, blue data flow lines connecting RAM modules to VRAM. Dark editorial tech illustration, neon cyan accents, shallow depth of field.
Imagen generada con IA

nbd-vram es una herramienta de código abierto que convierte la VRAM de una GPU NVIDIA en espacio de swap para Linux, pensada para portátiles con memoria soldada y sin posibilidad de ampliación. El proyecto, publicado por Sean Lobjoit bajo licencia MIT, se dirige a usuarios que cuentan con una tarjeta RTX o GTX infrautilizada y sufren paginación al SSD por falta de RAM física.

Funcionamiento. Un pequeño demonio reserva memoria de vídeo mediante la API de CUDA y la expone como dispositivo de bloques usando el protocolo NBD (Network Block Device) sobre un socket Unix. El módulo nbd del kernel se conecta a él y crea /dev/nbdX, que el sistema trata como una swap convencional. La ruta de datos recorre el subsistema de swap, el driver nbd, el socket Unix, el demonio nbd-vram y las llamadas cuMemcpyHtoD/DtoH hacia la VRAM. No hace falta compilar ningún módulo de kernel ni depender de símbolos internos de NVIDIA, por lo que la solución sobrevive a actualizaciones del kernel y del controlador.

Por qué no usar nvidia_p2p. La vía «obvia» sería nvidia_p2p_get_pages_persistent, que fija páginas de VRAM en BAR1 para acceso directo de la CPU mediante ioremap_wc. Todos los proyectos que la han probado chocan con el mismo muro: el controlador NVIDIA devuelve EINVAL en GPUs GeForce de consumo, en las variantes persistente y no persistente y con cualquier combinación de flags. La restricción se aplica a nivel de RM y se limita a tarjetas Quadro y de centro de datos, con independencia de la versión del driver. Mapear BAR1 directamente sin la API P2P tampoco sirve: las tablas de páginas internas de la GPU solo exponen unos 16 MiB de BAR1 (el framebuffer de display) y el resto devuelve ceros, por lo que mkswap aparenta completarse pero swapon falla.

Requisitos y uso. Cualquier GPU NVIDIA con soporte CUDA (RTX o GTX de consumo), el driver con libcuda.so.1 y un kernel Linux 3.0 o superior con el módulo nbd, presente en la mayoría de distribuciones. La instalación se reduce a clonar el repositorio y ejecutar install.sh; un servicio de systemd llamado vram-swap-nsd queda habilitado en cada arranque, con tamaño y prioridad configurables vía variables de entorno.

Rendimiento. En pruebas con una RTX 3070 Laptop, 7 GiB de escritura secuencial en bloques de 4 MiB alcanzan unos 1,3 GB/s, con latencia inferior a una NVMe al no intervenir almacenamiento. El orden de desbordamiento queda así: primero la RAM, después la VRAM por PCIe, luego zram por compresión en CPU y, en último término, el SSD.