TMPFS
From Wikipedia, the free encyclopedia
tmpfs is a common name for a temporary file storage facility on many Unix-like operating systems. It is intended to appear as a mounted file system, but one which uses virtual memory instead of a persistent storage device.
Contents |
[edit] Semantics
Everything stored in tmpfs is temporary in the sense that no files will be created on the hard drive; however, swap space is used as backing store in case of low memory situations. On reboot, everything in tmpfs will be lost.
The memory used by tmpfs grows and shrinks to accommodate the files it contains and can be swapped out to swap space.
Many Unix distributions enable and use tmpfs by default for the /tmp branch of the file system or for shared memory. This can be observed with df as in this example:
Filesystem Size Used Avail Use% Mounted on tmpfs 256M 688K 256M 1% /tmp
[edit] Implementations
[edit] SunOS / Solaris
SunOS, and later Solaris, include some of the earliest implementations of tmpfs;[1] it first appeared in SunOS 4.1, released in March 1990.[2] As of Solaris 2.1 (November 1994), /tmp is by default a tmpfs file system. The `df` output however, looks a bit different, in that it does not show “tmpfs”, but “swap”, even if mounted with `mount -F tmpfs tmpfs /tmp/test`:
# df -k Filesystem kbytes used avail capacity Mounted on swap 601592 0 601592 0% /tmp/test
[edit] Linux
tmpfs is supported by the Linux kernel from version 2.4 and up.[3] tmpfs (previously known as shmfs) distinguishes itself from the Linux ramdisk device by allocating memory dynamically and by allowing less-used pages to be moved onto swap space. RAMFS, in contrast, does not make use of virtual memory (which can be an advantage or disadvantage). In addition, MFS and some older versions of ramfs did not grow and shrink dynamically and instead used a fixed amount of memory at all times.
Usage of tmpfs for example is "mount -t tmpfs -o size=1G,nr_inodes=10k,mode=0700 tmpfs /space" which will allow up to 1 GiB in RAM/swap with 10240 inodes and only accessible by the owner of the directory /space. The filesystem's maximum size can also be changed on-the-fly, like "mount -o remount,size=2G /space".
In small memory systems, locking too large tmp data in memory with the sticky bit may be used to cause system instability as temporary data grows[4].
/var/run and /var/lock can be tmpfs filesystems, to alleviate having to clean them up at each reboot.
[edit] BSD
tmpfs was merged into the official NetBSD source tree on September 10, 2005[5], and is available in 4.0 and later versions. FreeBSD has ported NetBSD's implementation and is available in 7.0 and later versions[6].
[edit] Microsoft Windows
Windows systems have a rough analog to tmpfs in the form of "temporary files". Files created with both FILE_ATTRIBUTE_TEMPORARY and FILE_FLAG_DELETE_ON_CLOSE are held in memory and only written to disk if the system experiences low memory pressure. In this way they behave like tmpfs, except the files are written to the specified path during low memory situations rather than swap space. This technique is often used by servers along with TransmitFile to render content to a buffer before sending to the client.
While Microsoft does not officially offer support for a ramdisk driver, one has been developed by the company QSoft[7]. Official support for a stable driver can purchased from QSoft; otherwise a freely distributed and limited 32-bit version is also available on their website along with its source code.
[edit] References
- ^ Peter Snyder. "tmpfs: A Virtual Memory File System" (PDF). http://www.solarisinternals.com/si/reading/tmpfs.pdf. Retrieved on 2007-05-07.
- ^ Hal L. Stern. "SunOS 4.1 Performance Tuning" (GZipped PostScript). http://www.sun3arc.org/papers/Perf/SunOS_4.1_performance_tuning.ps.gz. Retrieved on 2007-05-07.
- ^ Daniel Robbins (September 1, 2001). "Advanced filesystem implementor's guide". http://www-128.ibm.com/developerworks/library/l-fs3.html. Retrieved on 2007-05-07. Article describing the Linux implementation
- ^ NetBSD team (February 13, 2008). "mount_tmpfs(8) - NetBSD Manual Pages". http://netbsd.gw.com/cgi-bin/man-cgi?mount_tmpfs+8+NetBSD-current. Retrieved on 2009-05-07. NetBSD mount_tmpfs man page
- ^ Julio M. Merino Vidal (February 24, 2006). "NetBSD-SoC: Efficient memory file-system". http://netbsd-soc.sourceforge.net/projects/tmpfs/. Retrieved on 2007-05-07.
- ^ Derek Morr (December 2, 2008). "FreeBSD tmpfs manpage". http://www.freebsd.org/cgi/man.cgi?query=tmpfs. Retrieved on 2008-12-02.
- ^ " RAMDisk " for Windows 2000 / XP / Server 2003 / Vista / Server 2008 / Windows 7
- Documentation/filesystems/tmpfs.txt documentation in Linux source tree
- tmpfs(7FS) Solaris 10 man page
- mount_tmpfs(8) NetBSD man page

