The POSIX standard mandates that operating systems maintain file system metadata that records when each file was last accessed. This timestamp is known as
atime comes with a performance penalty – every read operation on a filesystem generates a write operation.
Linux keeps three timestamps for each file on the filesystem –
atime (modified time, change time and access time). These can be displayed with the
$ stat /bin/ls File: `/bin/ls' Size: 105840 Blocks: 208 IO Block: 4096 regular file Device: fc02h/64514d Inode: 1701255 Links: 1 Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2014-10-25 16:07:49.360248485 +0800 Modify: 2012-11-20 06:25:16.000000000 +0800 Change: 2014-05-11 13:31:24.443355991 +0800
Linux have the following time related mount options available.
noatime– disables updating of
atimefor both files and directories
nodiratime– disables updating of
atimeattribute only if the previous
ctime, or the previous
atimeis over 24 hours old or if inode is dirty.
strictatime– allows full
Let’s look at the mount point options in more detail.
Linux Mount Option – noatime
Linux kernel developer Ingo Molnár claimed that it (
atime) was “perhaps the most stupid Unix design idea of all times.” To disable the tracking of
noatime option can be used to mount filesystems. For IO intensive tasks, the performance reward for turning off
atime can be immediately apparent. But, turning off
atime unconditionally will occasionally break certain software like mail tools that compare
atime to determine whether there is unread mail or not. The
tmpwatch utility and some backup tools also use
atime and can misbehave if
atime is incorrect. Audit requirements are another reason for keeping
Linux Mount Option – nodiratime
This is the same as the
noatime option but this only applies to directories. Note that turning on
noatime implicitly means that
nodiratime is enabled as well.
Linux Mount Option – relatime
relatime option was introduced to mitigate the issues with the
noatime option. If
relatime option is used, the
atime is updated when:
atimeis <= than
- at least 24 hours (hardcoded in fs/inode.c) have passed since the last atime update
- inode is dirty (or the file contents have been changed but it’s in the buffer and have not been written to the physical disk yet)
Improve Linux IO Performance
Since Linux 2.6.30, the kernel defaults to the behavior provided by the
relatime option. So IO performance has been sort of optimised, but further improvements can be done.
To further improve the IO performance, you can choose to use the
noatime mount option for selected partitions like
root partition but leave the
/tmp and other required partitions with
relatime option. Below is a sample of the fstab file with the mount point options.
/dev/mapper/vg00-root / ext4 defaults,noatime 1 1
/dev/mapper/vg01-home / ext4 defaults,relatime 1 1
/dev/mapper/vg02-tmp /tmp ext4 defaults,relatime 1 1
/dev/mapper/vg03-var /var ext4 defaults,relatime 1 1
/home could either be mounted with
noatime. It depends on the needs of the users and the applications or services being run on the system.
If you have an application that uses
atime, study the possibility of using
ctime instead. If the application works well without the
atime option, edit the mount point options accordingly.
There are no rules to dictate which partitions will be mapped with which mount option. It depends on the applications and services being run on the system in question.
Finally, I would suggest that no matter which Linux distribution you use, explicitly define the mount point options for the behavior you need. This will prevent any unwanted issues from happening should the Linux kernel defaults are changed.