Title: Mounting video ram on Linux
       Author: Solène
       Date: 10 February 2024
       Tags: linux
       Description: In this article, you will learn how to store data in your
       GPU memory on Linux
       
       # Introduction
       
       Hi, did you ever wonder if you could use your GPU memory as a mount
       point, like one does with tmpfs and RAM?
       
       Well, there is a project named vramfs that allows you to do exactly
       this on FUSE compatible operating system.
       
       In this test, I used an NVIDIA GTX 1060 6GB in an external GPU case
       connected with a thunderbolt cable to a Lenovo T470 laptop running
       Gentoo.
       
 (HTM) vramfs official GitHub project page
       
       # Setup
       
       Install the dependencies, you need a C++ compiler and OpenCL headers
       for C++ (the package name usually contains "clhpp").
       
       Download the sources, either with git or using an archive.
       
       Run `make` and you should obtain a binary in `bin/vramfs`.
       
       # Usage
       
       It's pretty straightforward to use, as root, run `vramfs /mountpoint
       3G` to mount a 3 GB storage on `/mountpoint`.
       
       The program will stay in foreground, use Ctrl+C to unmount and stop the
       mount point.
       
       # Speed test
       
       I've been doing a simple speed test using `dd` to measure the write
       speed compare to a tmpfs.
       
       The vramfs mount point was able to achieve 971 MB/s, it was CPU bound
       by the FUSE program because FUSE isn't very efficient compared to a
       kernel module handling a file system.
       
       ```
       t470 /mnt/vram # env LC_ALL=C dd if=/dev/zero of=here.disk bs=64k count=30000
       30000+0 records in
       30000+0 records out
       1966080000 bytes (2.0 GB, 1.8 GiB) copied, 2.02388 s, 971 MB/s
       ```
       
       Meanwhile, the good old tmpfs reached 3.2 GB/s without using much CPU,
       this is a clear winner.
       
       ```
       t470 /mnt/tmpfs # env LC_ALL=C dd if=/dev/zero of=here.disk bs=64k count=30000
       30000+0 records in
       30000+0 records out
       1966080000 bytes (2.0 GB, 1.8 GiB) copied, 0.611312 s, 3.2 GB/s
       ```
       
       # Limitations
       
       I tried to use the vram mount point as a temporary directory for
       portage (the Gentoo tool building packages), but it didn't work due to
       an error.  After this error, I had to umount and recreate the mount
       point otherwise I was left with an irremovable directory.  There are
       bugs in vramfs, no doubts here :-)
       
       Arch Linux wiki has a guide explaining how to use vramfs to store a
       swap file, but it seems to be risky for the system stability.
       
 (HTM) ArchWiki: Swap on video
       
       # Conclusion
       
       It's pretty cool to know that on Linux you can do almost what you want,
       even store data in your GPU memory.
       
       However, I'm still trying to figure a real use case for vramfs except
       that it's pretty cool and impressive.  If you figure a useful
       situation, please let me know.