Usa la VRAM de tu GPU Nvidia como espacio de swap en Linux

Motivación y casos de uso

  • Pensado para máquinas con RAM limitada y no ampliable, pero con VRAM Nvidia relativamente grande y a menudo inactiva (por ejemplo, portátiles en modo de GPU híbrida, sobremesas con grandes tarjetas de gaming/IA).
  • Permite que la VRAM no usada actúe como swap en lugar de escribir en SSD, lo que potencialmente ahorra desgaste de la memoria flash y aprovecha memoria que de otro modo se desperdiciaría.
  • Se considera especialmente atractivo cuando las cargas de trabajo (juegos frente a “productividad” / uso intensivo de RAM) no son concurrentes, de modo que la VRAM puede reutilizarse cuando la GPU está inactiva.

Preocupaciones sobre rendimiento e implementación

  • El rendimiento reportado (~1,3 GB/s en una laptop RTX 3070) está muy por debajo del ancho de banda teórico de PCIe/VRAM.
  • El hilo atribuye esto a:
    • Implementación en espacio de usuario usando NBD, que se sabe que es relativamente lenta.
    • Copias extra mediante un buffer de rebote y muchos cambios de contexto kernel/usuario por cada página de 4K.
    • Profundidad de cola limitada y mala coalescencia de solicitudes con NBD.
    • Sobrecarga de compresión de ZRAM (aunque algunos creen que esto es menor).
  • El swap a NVMe se describe como una ruta altamente optimizada, sin copia y basada en DMA, que puede ser más rápida en la práctica.
  • Sugerencias: pasar a ublk o a un controlador de bloque personalizado en el kernel para reducir la sobrecarga y aumentar la concurrencia.

Límites de hardware y arquitectura

  • La VRAM no puede simplemente añadirse a la RAM del sistema porque la mayoría de las GPU de escritorio no son coherentes en caché con la CPU y deben asignarse sin caché o con write-combining, lo que las hace muy lentas como “RAM” real.
  • Las GPU de centro de datos y los futuros dispositivos estilo CXL pueden ofrecer coherencia, pero la latencia sigue siendo mucho mayor que la de la DRAM.
  • Existen enfoques históricos y alternativos (MTD/phram, vramfs, ramdisks basados en OpenCL/Vulkan, Windows GpuRamDrive).

Semántica del swap y desgaste del SSD

  • Algunos ven el swap en VRAM como una forma de evitar el desgaste del SSD; otros argumentan que el uso real de swap normalmente no acorta de forma significativa la vida útil del SSD.
  • Debate más amplio sobre el swap:
    • Algunos configuran un swap grande (a menudo para suspender a disco) y dependen de él para evitar un OOM abrupto.
    • Otros prefieren poco o ningún swap, y tratan el swapping intenso como equivalente a un sistema “muerto”.
    • Una visión: la función principal del swap es la reclamación justa entre memoria anónima y respaldada por archivos, no una RAM de emergencia.

Usabilidad, riesgos y energía

  • Existe la preocupación de que usar VRAM como swap pueda:
    • Impedir el power-gating de la GPU, perjudicando la duración de la batería en portátiles.
    • Competir con cargas gráficas o de cómputo y provocar fallos si la VRAM se agota (especialmente en compositores dinámicos de Wayland).
  • Se desea habilitar y deshabilitar dinámicamente el swap de VRAM en función de la presión sobre la GPU, pero no está resuelto del todo; se señala como un área pendiente.
  • La preocupación clásica de estilo microkernel (que el daemon de swap necesite paginarse a sí mismo) se aborda manteniendo sus páginas no intercambiables o fijadas.