A tool to download more RAM (yes, seriously!)
ram-dl
is a tool that allows you to upload and download RAM to/from your system. Well, sort of :P
It is mostly intended as a tech demo for r3map, a library for efficient distributed mmap
with mounting and migration support, and go-nbd, a pure Go NBD server and client library. Despite this it can however also be of use for a few experimental use cases, such as:
ram-dl
and ram-ul
to expand your local system's RAM (effectively "downloading RAM") without having to use local disk space or memory.ram-ul
(effectively "uploading RAM"), it is possible to mount a remote system's RAM to your local system with minimal latency.ram-ul
, you can get insights into the contents of a remote system's memory.ram-dl
achieves this by essentially doing the following:
go-nbd
server and client locally with r3map's Direct Mount APIram-ul
mkswap
, swapon
and swapoff
, which enables paging out to the block device provided by the NBD client and thus to the connected remote fRPC backend.For most real-world use cases, using r3map's Managed Mount API or Migration API directly is the better (and much faster) option, but if you just want to see the Download More RAM meme implemented in real life, you've come to the right place!
Static binaries are available on GitHub releases.
On Linux, you can install them like so:
$ curl -L -o /tmp/ram-dl "https://github.com/pojntfx/ram-dl/releases/latest/download/ram-dl.linux-$(uname -m)" $ curl -L -o /tmp/ram-ul "https://github.com/pojntfx/ram-dl/releases/latest/download/ram-ul.linux-$(uname -m)" $ sudo install /tmp/ram-dl /usr/local/bin $ sudo install /tmp/ram-ul /usr/local/bin
You can find binaries for more architectures on GitHub releases.
TL;DR: "Upload" RAM with
ram-ul
, "download" the RAM withram-dl
, done!
On a remote (or local) system, first start ram-ul
. This component exposes a memory region, file or directory as a fRPC server:
$ ram-ul --size 4294967296 2023/06/30 14:52:12 Listening on :1337
On your local system, start ram-dl
. This will mount the remote system's exposed memory region, file or directory using fRPC and r3map as swap space, and umount it as soon as you interrupt the app:
$ sudo modprobe nbd $ sudo ram-dl --raddr localhost:1337 2023/06/30 14:54:22 Connected to localhost:1337 2023/06/30 14:54:22 Ready on /dev/nbd0
This should give you an extra 4GB of local memory/swap space, without using up significant local memory (or disk space):
# Before $ free -h total used free shared buff/cache available Mem: 30Gi 7.9Gi 6.5Gi 721Mi 16Gi 21Gi Swap: 8.0Gi 0B 8.0Gi # After $ free -h total used free shared buff/cache available Mem: 30Gi 7.9Gi 6.5Gi 717Mi 16Gi 21Gi Swap: 11Gi 0B 11Gi
🚀 That's it! We hope you have fun using ram-dl
, and if you're interested in more like this, be sure to check out r3map!
$ ram-dl --help Usage of ram-dl: -chunk-size int Chunk size to use (default 4096) -chunking Whether the backend requires to be interfaced with in fixed chunks (default true) -raddr string Remote address for the fRPC r3map backend server (default "localhost:1337") -size int Size of the memory region or file to allocate (default 4294967296) -verbose Whether to enable verbose logging
$ ram-ul --help Usage of ram-ul: -addr string Listen address (default ":1337") -backend string Backend to use (one of [file memory directory]) (default "file") -chunk-size int Chunk size to use (default 4096) -chunking Whether the backend requires to be interfaced with in fixed chunks in tests (default true) -location string Backend's directory (for directory backend) or file (for file backend) (default "/tmp/ram-ul") -size int Size of the memory region or file to allocate (default 4294967296) -verbose Whether to enable verbose logging
To contribute, please use the GitHub flow and follow our Code of Conduct.
To build and start a development version of ram-dl
locally, run the following:
$ git clone https://github.com/pojntfx/ram-dl.git $ cd ram-dl $ make depend $ make && sudo make install $ sudo modprobe nbd $ ram-ul # In another terminal $ sudo ram-dl
Have any questions or need help? Chat with us on Matrix!
ram-dl (c) 2024 Felicitas Pojtinger and contributors
SPDX-License-Identifier: AGPL-3.0
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4