This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
fs_mount_options [2020/06/12 16:05] Ira Weiny [Details] |
fs_mount_options [2020/08/03 03:55] Ira Weiny [xfs] |
||
---|---|---|---|
Line 14: | Line 14: | ||
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 ==== | ||
Line 49: | Line 49: | ||
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 when using the "-o dax=inode" [default] option: | + | To clarify inheritance mount the file system with the inode option. |
<code> | <code> | ||
Line 70: | Line 70: | ||
</code> | </code> | ||
- | === Example A: === | + | 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 83: | Line 87: | ||
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 96: | Line 102: | ||
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 111: | Line 118: | ||
- | 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. | ||