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 and 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 – mtime, ctime and atime (modified time, change time and access time). These can be displayed with the stat command.
|
1 2 3 4 5 6 7 8 |
$ 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 ofatimefor both files and directoriesnodiratime– disables updating ofatimefor directoriesrelatime– updatesatimeattribute only if the previousatimeis <=mtimeorctime, or the previousatimeis over 24 hours old or if inode is dirty.strictatime– allows fullatimeupdates
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 atime, the 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 mtime and 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 atime enabled.
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
The relatime option was introduced to mitigate the issues with the noatime option. If relatime option is used, the atime is updated when:
- old
atimeis <= thanmtime/ctime - 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 / or root partition but leave the /var/spool, /tmp and other required partitions with relatime option. Below is a sample of the fstab file with the mount point options.
|
1 2 3 4 |
/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 |
Partitions like /home could either be mounted with relatime or 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 mtime or 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.

