| .\" Copyright (c) 2016 by Michael Kerrisk <mtk.manpages@gmail.com> |
| .\" |
| .\" %%%LICENSE_START(VERBATIM) |
| .\" Permission is granted to make and distribute verbatim copies of this |
| .\" manual provided the copyright notice and this permission notice are |
| .\" preserved on all copies. |
| .\" |
| .\" Permission is granted to copy and distribute modified versions of this |
| .\" manual under the conditions for verbatim copying, provided that the |
| .\" entire resulting derived work is distributed under the terms of a |
| .\" permission notice identical to this one. |
| .\" |
| .\" Since the Linux kernel and libraries are constantly changing, this |
| .\" manual page may be incorrect or out-of-date. The author(s) assume no |
| .\" responsibility for errors or omissions, or for damages resulting from |
| .\" the use of the information contained herein. The author(s) may not |
| .\" have taken the same level of care in the production of this manual, |
| .\" which is licensed free of charge, as they might when working |
| .\" professionally. |
| .\" |
| .\" Formatted or processed versions of this manual, if unaccompanied by |
| .\" the source, must acknowledge the copyright and authors of this work. |
| .\" %%%LICENSE_END |
| .\" |
| .TH TMPFS 5 2021-03-22 "Linux" "Linux Programmer's Manual" |
| .SH NAME |
| tmpfs \- a virtual memory filesystem |
| .SH DESCRIPTION |
| The |
| .B tmpfs |
| facility allows the creation of filesystems whose contents reside |
| in virtual memory. |
| Since the files on such filesystems typically reside in RAM, |
| file access is extremely fast. |
| .PP |
| The filesystem is automatically created when mounting |
| a filesystem with the type |
| .BR tmpfs |
| via a command such as the following: |
| .PP |
| .in +4n |
| .EX |
| $ sudo mount \-t tmpfs \-o size=10M tmpfs /mnt/mytmpfs |
| .EE |
| .in |
| .PP |
| A |
| .B tmpfs |
| filesystem has the following properties: |
| .IP * 3 |
| The filesystem can employ swap space when physical memory pressure |
| demands it. |
| .IP * |
| The filesystem consumes only as much physical memory and swap space |
| as is required to store the current contents of the filesystem. |
| .IP * |
| During a remount operation |
| .RI ( "mount\ \-o\ remount" ), |
| the filesystem size can be changed |
| (without losing the existing contents of the filesystem). |
| .PP |
| If a |
| .B tmpfs |
| filesystem is unmounted, its contents are discarded (lost). |
| .\" See mm/shmem.c:shmem_parse_options for options it supports. |
| .SS Mount options |
| The |
| .B tmpfs |
| filesystem supports the following mount options: |
| .TP |
| .BR size "=\fIbytes\fP" |
| Specify an upper limit on the size of the filesystem. |
| The size is given in bytes, and rounded up to entire pages. |
| .IP |
| The size may have a |
| .BR k , |
| .BR m , |
| or |
| .B g |
| suffix for Ki, Mi, Gi (binary kilo (kibi), binary mega (mebi), and binary giga |
| (gibi)). |
| .IP |
| The size may also have a % suffix to limit this instance to a percentage of |
| physical RAM. |
| .IP |
| The default, when neither |
| .B size |
| nor |
| .B nr_blocks |
| is specified, is |
| .IR size=50% . |
| .TP |
| .BR nr_blocks "=\fIblocks\fP" |
| The same as |
| .BR size , |
| but in blocks of |
| .BR PAGE_CACHE_SIZE . |
| .IP |
| Blocks may be specified with |
| .BR k , |
| .BR m , |
| or |
| .B g |
| suffixes like |
| .BR size , |
| but not a % suffix. |
| .TP |
| .BR nr_inodes "=\fIinodes\fP" |
| The maximum number of inodes for this instance. |
| The default is half of the number of your physical RAM pages, or (on a |
| machine with highmem) the number of lowmem RAM pages, whichever is smaller. |
| .IP |
| Inodes may be specified with |
| .BR k , |
| .BR m , |
| or |
| .B g |
| suffixes like |
| .BR size , |
| but not a % suffix. |
| .TP |
| .BR mode "=\fImode\fP" |
| Set initial permissions of the root directory. |
| .TP |
| .BR gid "=\fIgid\fP (since Linux 2.5.7)" |
| .\" Technically this is also in some version of Linux 2.4. |
| .\" commit 099445b489625b80b1d6687c9b6072dbeaca4096 |
| Set the initial group ID of the root directory. |
| .TP |
| .BR uid "=\fIuid\fP (since Linux 2.5.7)" |
| .\" Technically this is also in some version of Linux 2.4. |
| .\" commit 099445b489625b80b1d6687c9b6072dbeaca4096 |
| Set the initial user ID of the root directory. |
| .TP |
| .BR huge "=\fIhuge_option\fR (since Linux 4.7.0)" |
| .\" commit 5a6e75f8110c97e2a5488894d4e922187e6cb343 |
| Set the huge table memory allocation policy for all files in this instance (if |
| .B CONFIG_TRANSPARENT_HUGE_PAGECACHE |
| is enabled). |
| .IP |
| The |
| .I huge_option |
| value is one of the following: |
| .RS |
| .TP |
| .B never |
| Do not allocate huge pages. |
| This is the default. |
| .TP |
| .B always |
| Attempt to allocate huge pages every time a new page is needed. |
| .TP |
| .B within_size |
| Only allocate huge page if it will be fully within |
| .IR i_size . |
| Also respect |
| .BR fadvise (2)/ madvise (2) |
| hints |
| .TP |
| .B advise |
| Only allocate huge pages if requested with |
| .BR fadvise (2)/ madvise (2). |
| .TP |
| .B deny |
| For use in emergencies, to force the huge option off from all mounts. |
| .TP |
| .B force |
| Force the huge option on for all mounts; useful for testing. |
| .RE |
| .TP |
| .BR mpol "=\fImpol_option\fR (since Linux 2.6.15)" |
| .\" commit 7339ff8302fd70aabf5f1ae26e0c4905fa74a495 |
| Set the NUMA memory allocation policy for all files in this instance (if |
| .B CONFIG_NUMA |
| is enabled). |
| .IP |
| The |
| .I mpol_option |
| value is one of the following: |
| .RS |
| .TP |
| .B default |
| Use the process allocation policy (see |
| .BR set_mempolicy (2)). |
| .TP |
| .BR prefer ":\fInode\fP" |
| Preferably allocate memory from the given |
| .IR node . |
| .TP |
| .BR bind ":\fInodelist\fP" |
| Allocate memory only from nodes in |
| .IR nodelist . |
| .TP |
| .B interleave |
| Allocate from each node in turn. |
| .TP |
| .BR interleave ":\fInodelist\fP" |
| Allocate from each node of |
| .I in |
| turn. |
| .TP |
| .B local |
| Preferably allocate memory from the local node. |
| .RE |
| .IP |
| In the above, |
| .I nodelist |
| is a comma-separated list of decimal numbers and ranges |
| that specify NUMA nodes. |
| A range is a pair of hyphen-separated decimal numbers, |
| the smallest and largest node numbers in the range. |
| For example, |
| .IR mpol=bind:0\-3,5,7,9\-15 . |
| .SH VERSIONS |
| The |
| .B tmpfs |
| facility was added in Linux 2.4, as a successor to the older |
| .B ramfs |
| facility, which did not provide limit checking or |
| allow for the use of swap space. |
| .SH NOTES |
| In order for user-space tools and applications to create |
| .B tmpfs |
| filesystems, the kernel must be configured with the |
| .B CONFIG_TMPFS |
| option. |
| .PP |
| The |
| .BR tmpfs |
| filesystem supports extended attributes (see |
| .BR xattr (7)), |
| but |
| .I user |
| extended attributes are not permitted. |
| .PP |
| An internal shared memory filesystem is used for |
| System V shared memory |
| .RB ( shmget (2)) |
| and shared anonymous mappings |
| .RB ( mmap (2) |
| with the |
| .B MAP_SHARED |
| and |
| .BR MAP_ANONYMOUS |
| flags). |
| This filesystem is available regardless of whether |
| the kernel was configured with the |
| .B CONFIG_TMPFS |
| option. |
| .PP |
| A |
| .B tmpfs |
| filesystem mounted at |
| .IR /dev/shm |
| is used for the implementation of POSIX shared memory |
| .RB ( shm_overview (7)) |
| and POSIX semaphores |
| .RB ( sem_overview (7)). |
| .PP |
| The amount of memory consumed by all |
| .B tmpfs |
| filesystems is shown in the |
| .I Shmem |
| field of |
| .IR /proc/meminfo |
| and in the |
| .I shared |
| field displayed by |
| .BR free (1). |
| .PP |
| The |
| .B tmpfs |
| facility was formerly called |
| .BR shmfs . |
| .SH SEE ALSO |
| .BR df (1), |
| .BR du (1), |
| .BR memfd_create (2), |
| .BR mmap (2), |
| .BR set_mempolicy (2), |
| .BR shm_open (3), |
| .BR mount (8) |
| .PP |
| The kernel source files |
| .IR Documentation/filesystems/tmpfs.txt |
| and |
| .IR Documentation/admin\-guide/mm/transhuge.rst . |