logoalt Hacker News

Use your Nvidia GPU's VRAM as swap space on Linux

417 pointsby tanelpoderyesterday at 10:55 PM107 commentsview on HN

Comments

1matintoday at 5:17 PM

Nice idea, but I'm sure a ton of things can go wrong with it. It needs extensive edge case handling in order to be usable widely.

yjftsjthsd-hyesterday at 11:36 PM

> Built for laptops with soldered memory and no upgrade path. If you have an RTX card sitting there with 8GB of VRAM and you're getting swapped to SSD, this puts that VRAM to work.

Well, that does at least answer my immediate question about why I would ever swap from expensive RAM to really expensive RAM:) Feels niche, but when you want it it's a good idea.

show 3 replies
RachelFtoday at 12:31 AM

Nice idea, but something has gone very wrong here:

>Sequential throughput: ~1.3 GB/s

[on a RTX 3070 Laptop]

This RTX 3070 chip is on PCIe 4.0 x16 which should give 64GB/s. The 8GB of GDDR6 is 448GB/s.

Swapping to an NVMe drive would be twice as fast, but with higher latency.

show 2 replies
xfalcoxyesterday at 11:50 PM

Given my dev machine has 32GB of RAM and 32GB of VRAM that sits mostly idle when I'm not running AI models, this is not that bad of an idea.

show 1 reply
kimixatoday at 3:30 AM

I remember this being a thing done a while back using linux's MTD/phram drivers - https://wiki.archlinux.org/title/Swap_on_video_RAM - not sure if that's still relevant though as I don't know how it'll interact with DRM and how it handles reserving some of the vram - the suggested limit using xorg.conf is probably pretty obsolete now.

That page also has a fuse filesystem implementation on top of opencl - https://github.com/Overv/vramfs - which may be more compatible.

drdaemantoday at 1:04 AM

What about backpressure, how does it handle requirements for VRAM allocation when VRAM is used for swap space?

With X11 it's not that bad (buffers are pre-allocated), but with Wayland allocations are a lot more dynamic, so running low on VRAM can easily crash the whole desktop. I just had a few of such crashes with Hyprland+llama-server+KVM switching between computers without freeing VRAM.

tgtweaktoday at 3:27 PM

I think you can definitely improve the throughput/iops by using BAR vs treating it like a file store/mount through cuda which adds a lot of overhead.

molticrystaltoday at 4:05 AM

For windows I saw something similar to this years ago. An experimental proof of concept driver that allows the creation of a ram drive from vram for NVIDIA cards. Sequential is fast as you'd expect, random has lots of room for improvement.

>GpuRamDrive

>Create a virtual drive backed by GPU RAM.

https://github.com/prsyahmi/GpuRamDrive

Fork with AMD support:

https://github.com/brzz/GpuRamDrive/

show 1 reply
rwmjtoday at 4:20 AM

Similar but using OpenCL APIs, so it works on AMD (for some definition of "works" since their drivers are quite buggy): https://libguestfs.org/nbdkit-vram-plugin.1.html

show 1 reply
dragontamertoday at 12:10 AM

Remember how 16GBs used to be an enterprise level database mainframe?

Well, GPUs also have stupid amounts of compute on them. I have to imagine that there is some kind of database format that's useful with GPU compute attached.

Since the data is already in VRAM, the GPU can sort, join, or otherwise manipulate data as needed.

show 4 replies
ProllyInfamoustoday at 1:10 PM

Why does my Apple Sillicon Mac with 32gb of RAM use (or even create?!) a swapfile, when 20gb is still unused/"free"?

Why can I not just enter a simple command to entirely-disable swapfile, like with Linux's:

>>>>swapoff -a

Seems kind of silly, unless the point is intentionally to wear-down the SSD's lifespan.

Having a GUI swapfile-disable system preference would be awesome. It would also be awesome if Apple finally abandoned this system settings/layout "phase" – it's still word-salad (compared to decades of preference panes).

#Apple #Feedback #swapfile

show 1 reply
tlbtoday at 2:35 PM

Building a swap device at user level used to be one of those classic unsolvable problems, because what if your daemon needs to swap in a page in order to swap in a page? Or at least it was discussed at a reason why microkernels will never work. I’m not sure what the solution is here.

show 2 replies
NortySpocktoday at 1:56 PM

Nice, I might try using this as I'm currently on 16 GB of RAM / 11 GB VRAM and feel like the VRAM is usually idle except for when I game or try a local LLM.

It would be nice to have dynamic scaling or even just auto-shutoff on VRAM pressure if I forget I have this enabled and then fire up a game or LLM.

willis936today at 12:19 AM

I'm more interested in the opposite. Nvidia linux drivers crash when you try to address more VRAM than you have. It'd be nice if they didn't.

show 1 reply
dlt713705today at 12:50 AM

Does anyone these days really use swap for anything than S4 suspend ?

show 3 replies
sgjohnsontoday at 1:30 AM

>Sequential throughput: ~1.3 GB/s

sounds VERY low, also, wouldn't random read/write speed be MUCH more relevant here?

mmastractoday at 1:44 AM

I seriously looked at this as a way to improve the RAM situation in a QNAP 2U unit that I was having trouble sourcing RAM for. It's somewhat annoying that legit memory-over-PCIe is gated on PCIe5 and chipset support.

In the end I just had to bite the bullet and take a gamble on finding ECC DDR4 RAM that would work with the ancient AMD chipset...

This particular implementation seems to be running over too many layers to be particularly performant. Why not a custom block driver instead?

show 1 reply
londons_exploretoday at 8:24 AM

It seems obvious to me that this should be a built in functionality of the kernel.

The kernels job is to manage resources - and GPU ram is one such resource, and it can be used for many of the same uses as regular ram.

theblazehentoday at 7:34 AM

I've implemented the same idea with OpenCL: https://github.com/theblazehen/vramblk

There is originally https://github.com/Overv/vramfs however that has the overhead of a FUSE filesystem + loop device when using as a swap device.

The performance is rather lackluster however, it's far from a miracle "now you effectively have more ram for a 90% performance drop" - it definitely feels like traditional swapping

LouisvilleGeektoday at 12:32 AM

Finally a use for the expensive ram when it's not needed in workloads!

Now if it could be dynamically used and vacated on other GPU workloads?

steevetoday at 7:16 AM

sidenote: it is possible to use Vulkan to map GPU memory to CPU space and even map it back to CUDA: https://x.com/steeve/status/2055042304344231978?s=20

hardwaresoftontoday at 12:12 AM

You want to waste VRAM, in this economy?

show 1 reply
mrwizrdtoday at 8:08 AM

I have long wished it was possible to do this. What a great bit of code. Thanks.

UnfitFootprinttoday at 12:34 AM

No software benchmarks? BAR for RAM is cool but I want to see how much it _actually_ beats pcie nvme

jcmfernandesyesterday at 11:38 PM

Q: Why? A: Why not?

bobsmoothtoday at 12:26 AM

RAM disks have always fascinated me. In a different timeline every PC has a 100gb of RAM and 50TB HDDs are the norm.

show 1 reply
effnorwoodtoday at 12:27 AM

use your car for an anchor on a big boat!

show 2 replies
zx8080today at 5:39 AM

Nvme ssd weights much less than GPU, and it matters for a laptop.

enthus1ast_today at 8:17 AM

And now, I want HDMI as direct connection hight speed network socket.

show 1 reply
nialv7today at 2:08 AM

I mean, you prompted something useful out of an AI, good job. But then use that to ask for donation? Feels weird, man.

usxr1515today at 12:47 AM

Nice

dbdrtoday at 6:02 AM

[dead]

moviepiqtoday at 7:56 AM

[dead]

Sohcahtoa82yesterday at 11:38 PM

[dead]

vecchiotoday at 1:59 PM

[dead]

simonaskyesterday at 11:36 PM

I mean, cool, but I’d rather not?

show 4 replies
lowbloodsugartoday at 1:49 AM

This is why I read HN.