This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
fs_mount_options [2020/06/12 15:55] Ira Weiny |
fs_mount_options [2020/10/27 17:01] (current) Ira Weiny |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | **NOTE: kernel 5.8 is yet to be released. This document is therefore preliminary until it's release and subject to change.** | ||
- | |||
====== Prior to kernel 5.8 ====== | ====== Prior to kernel 5.8 ====== | ||
Line 14: | Line 12: | ||
As of kernel 5.8 additional DAX enabling options are available on some file systems, specifically: | As of kernel 5.8 additional DAX enabling options are available on some file systems, specifically: | ||
- | ====== ext4 and ext2====== | + | ===== ext2 ===== |
When mounting the filesystem, use the "-o dax" option on the command line or add 'dax' to the options in /etc/fstab. This works to enable DAX on all files within the filesystem. It is equivalent to the '-o dax=always' behavior below. | When mounting the filesystem, use the "-o dax" option on the command line or add 'dax' to the options in /etc/fstab. This works to enable DAX on all files within the filesystem. It is equivalent to the '-o dax=always' behavior below. | ||
- | ====== xfs ====== | + | ===== ext4 and xfs ===== |
- | As of kernel 5.8 xfs supports the new per-file dax configuration. | + | As of kernel 5.8 ext4 and xfs supports the new per-file dax configuration. |
- | ===== Summary ===== | + | ==== Summary ==== |
- There exists an in-kernel file access mode flag S_DAX that corresponds to the statx flag STATX_ATTR_DAX. See the manpage for statx(2) for details about this access mode. | - There exists an in-kernel file access mode flag S_DAX that corresponds to the statx flag STATX_ATTR_DAX. See the manpage for statx(2) for details about this access mode. | ||
Line 49: | Line 47: | ||
remounted with dax=inode and the inode is evicted from kernel memory. | remounted with dax=inode and the inode is evicted from kernel memory. | ||
- | ==== Details ==== | + | ==== Examples and details ==== |
There are 2 per-file dax flags. One is a persistent inode setting (FS_XFLAG_DAX) and the other is a volatile flag indicating the active state of the feature (S_DAX). | There are 2 per-file dax flags. One is a persistent inode setting (FS_XFLAG_DAX) and the other is a volatile flag indicating the active state of the feature (S_DAX). | ||
- | FS_XFLAG_DAX is preserved within the filesystem. This persistent config setting can be set, cleared and/or queried using the FS_IOC_FS[GS]ETXATTR ioctl (see ioctl_xfs_fsgetxattr(2)) or an utility such as 'xfs_io'. | + | FS_XFLAG_DAX is preserved within the file system. This persistent config setting can be set, cleared and/or queried using the FS_IOC_FS[GS]ETXATTR ioctl (see ioctl_xfs_fsgetxattr(2)) or an utility such as 'xfs_io'. |
New files and directories automatically inherit FS_XFLAG_DAX from their parent directory _when_ _created_. Therefore, setting FS_XFLAG_DAX at directory creation time can be used to set a default behavior for an entire | New files and directories automatically inherit FS_XFLAG_DAX from their parent directory _when_ _created_. Therefore, setting FS_XFLAG_DAX at directory creation time can be used to set a default behavior for an entire | ||
sub-tree. | sub-tree. | ||
- | To clarify inheritance, here are 3 examples: | + | To clarify inheritance mount the file system with the inode option. |
- | === Example A: === | + | <code> |
+ | $ mount /dev/pmem0p2 /mnt/xfs-pmem0 | ||
+ | </code> | ||
+ | |||
+ | Is equivalent to: | ||
+ | |||
+ | <code> | ||
+ | $ mount -o dax=inode /dev/pmem0p2 /mnt/xfs-pmem0 | ||
+ | </code> | ||
+ | |||
+ | And here are 3 examples showing how to enable dax on individual files and/or directories. | ||
+ | |||
+ | === Inheritance Example A: === | ||
<code> | <code> | ||
$ mkdir -p a/b/c | $ mkdir -p a/b/c | ||
$ xfs_io -c 'chattr +x' a | $ xfs_io -c 'chattr +x' a | ||
- | $ mkdir a/b/c/d | + | $ xfs_io -c 'lsattr' a |
- | $ mkdir a/e | + | --------------x- a |
+ | $ mkdir -p a/b/c/d | ||
+ | $ mkdir -p a/e | ||
</code> | </code> | ||
Results in: | Results in: | ||
Line 73: | Line 85: | ||
no dax: b,c,d | no dax: b,c,d | ||
- | === Example B: === | + | === Inheritance Example B: === |
<code> | <code> | ||
$ mkdir a | $ mkdir a | ||
$ xfs_io -c 'chattr +x' a | $ xfs_io -c 'chattr +x' a | ||
+ | $ xfs_io -c 'lsattr' a | ||
+ | --------------x- a | ||
$ mkdir -p a/b/c/d | $ mkdir -p a/b/c/d | ||
</code> | </code> | ||
Line 86: | Line 100: | ||
no dax: | no dax: | ||
- | === Example C: === | + | === Inheritance Example C: === |
<code> | <code> | ||
$ mkdir -p a/b/c | $ mkdir -p a/b/c | ||
$ xfs_io -c 'chattr +x' c | $ xfs_io -c 'chattr +x' c | ||
- | $ mkdir a/b/c/d | + | $ xfs_io -c 'lsattr' c |
+ | --------------x- c | ||
+ | $ mkdir -p a/b/c/d | ||
</code> | </code> | ||
Line 101: | Line 116: | ||
- | The current enabled state (S_DAX) is set when a file inode is instantiated in memory by the kernel. It is set based on the underlying media support, the value of FS_XFLAG_DAX and the filesystem's dax mount option. | + | === Detecting if a file is using dax === |
+ | |||
+ | The current enabled state (S_DAX) is set when a file inode is instantiated in memory by the kernel. It is set based on the underlying media support, the value of FS_XFLAG_DAX and the file system's dax mount option. | ||
statx can be used to query S_DAX. NOTE that only regular files will ever have S_DAX set and therefore statx will never indicate that S_DAX is set on directories. | statx can be used to query S_DAX. NOTE that only regular files will ever have S_DAX set and therefore statx will never indicate that S_DAX is set on directories. | ||
+ | |||
+ | Continuing with Example C above we create a file foo in a dax enabled directory and it is enabled for dax with the FS_XFLAG_DAX set as well as S_DAX being set. | ||
+ | |||
+ | <code> | ||
+ | $ touch a/b/c/foo | ||
+ | $ xfs_io -c 'lsattr' a/b/c/foo # FS_XFLAG_DAX == true | ||
+ | --------------x- a/b/c/foo | ||
+ | $ xfs_io -c 'statx -r' a/b/c/foo | grep attributes # S_DAX == true | ||
+ | stat.attributes = 0x2000 | ||
+ | </code> | ||
Setting the FS_XFLAG_DAX flag (specifically or through inheritance) occurs even if the underlying media does not support dax and/or the filesystem is overridden with a mount option. | Setting the FS_XFLAG_DAX flag (specifically or through inheritance) occurs even if the underlying media does not support dax and/or the filesystem is overridden with a mount option. | ||