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.