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. | |
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. | |
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. |