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.
