## How it works Linux uses **pages** and **dentries** to cache files and directories (respectively) temporarily in memory to speed things up. When the [virtual memory subsystem](http://www.redhat.com/magazine/001nov04/features/vm/) needs this memory for something else, the caches & dentries are flushed to a **backing store**. In the interest of brevity, this store is a block device, like your hard disk. When you use either `tmpfs` or `ramfs`, *there is no backing store*. Trippy. ### Differences between `tmpfs` or `ramfs` Only two major things, really. 1. **`tmpfs` can use swap** while `ramfs` cannot 2. **`tmpfs` cannot grow dynamically** while `ramfs` can ## Using `tmpfs` or `ramfs` ### `tmpfs` A simple tmpfs mount. This will default to half the size of system memory: mount -t tmpfs tmpfs /tmp Mount tmpfs, but limit it to 200MB, owned by user `joe` and group `fisherman`: mount -t tmpfs tmpfs /mnt/volatile -o size=200M,uid=12,gid=107 The `man` page also says that you can tweak with block and inode counts for your mount (`nr_blocks` and `nr_inodes`). ### `ramfs` A simpler gentleman; no mount options whatsoever: mount -t ramfs ramfs /mnt/volatile ## Can you free memory after using it? >  With ramfs, there is no backing store.  Files written into ramfs allocate >  dentries and page cache as usual, but there's nowhere to write them to. >  This means the pages are never marked clean, so they can't be freed by the >  VM when it's looking to recycle memory. I'm *guessing* that this is the case with tmpfs as well. You'll probably need to reboot the system. However, and to test this, I put two 184,320,000-byte files into `/dev/shm` and played around with them. Here are some numbers: # Before MemTotal:      1026888 kB MemFree: 376068 kB SwapTotal:     2064376 kB SwapFree:      1891908 kB # After copying 2x180MB into 502MB tmpfs mount MemTotal:      1026888 kB MemFree: 33672 kB SwapTotal:     2064376 kB SwapFree:      1891908 kB # After removing one 180MB file MemTotal:      1026888 kB MemFree: 213364 kB SwapTotal:     2064376 kB SwapFree:      1891908 kB Observe that swap hasn't changed. I also couldn't get perfect arithmetic accounting for the free memory, but it seemed close enough. Bottom-line is that I don't know what to think of this (yet). ## `/dev/shm`: A ready `tmpfs` solution Look at the output of `df -ah` on most Linux boxes. You'll see the highlighted: Filesystem            Size  Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00                        73G  2.8G   66G   5% / proc                     0     0     0   -  /proc sysfs                    0     0     0   -  /sys devpts                   0     0     0   -  /dev/pts /dev/sda1              99M   25M   70M  26% /boot tmpfs 502M 0 502M 0% /dev/shm none                     0     0     0   -  /proc/sys/fs/binfmt_misc sunrpc                   0     0     0   -  /var/lib/nfs/rpc_pipefs /root/tmpfs           191M  176M   15M  93% /root/tmpfs `/dev/shm` (shm = shared memory) is automatically mounted to occupy half your physical memory *at most* by default. If you're not happy with this, go ahead and change it: mount -o remount,size=1G /dev/shm ## Other Points * Don't ever think that merely *mounting* `tmpfs`, `ramfs`, or `/dev/shm` will actually reserve (or 'cordon off') memory. * In low-memory situations, swap is used as a backing store. This means that you're not going to see a huge performance boost with `tmpfs`. And I think you'd appreciate a live (albeit sluggish) system rather than one that's crashed due to a reckless use of `ramfs`. Swings and roundabouts.