根据一个答案相关时间间隔可以通过以下方式更改
echo 60 > /proc/sys/fs/relatime_interval
但我没有这样的文件?它去哪儿了?
$ ls /proc/sys/fs
aio-max-nr file-max leases-enable protected_hardlinks
aio-nr file-nr mqueue protected_symlinks
binfmt_misc inode-nr nr_open quota
dentry-state inode-state overflowgid suid_dumpable
dir-notify-enable inotify overflowuid xfs
epoll lease-break-time pipe-max-size
Ubuntu 14.04 LTS,内核 3.16.0-50-generic
答案1
IIRC,曾经有一个仅限 RedHat 的补丁,可以在 RedHat 内核中进行配置。
英戈·莫尔纳尔提出了类似的建议2007年,但他的补丁没有被合并。
当前的内核使用固定的一日间隔,由提交 11ff6f05f1e836a6a02369a4c4b64757e484adc12009 年 3 月。
摘自 fs/inode.c:
/* * 对于相对atime,仅当前一个atime是时才更新atime * 早于 ctime 或 mtime,或者至少一天 * 自上次 atime 更新以来已过去。 */ 静态 int relatime_need_update(struct vfsmount *mnt, struct inode *inode, 现在结构 timespec) { if (!(mnt->mnt_flags & MNT_RELATIME)) 返回1; /* * mtime比atime年轻吗?如果是,更新atime: */ if (timespec_compare(&inode->i_mtime, &inode->i_atime) >= 0) 返回1; /* * ctime 比 atime 年轻吗?如果是,更新atime: */ if (timespec_compare(&inode->i_ctime, &inode->i_atime) >= 0) 返回1; /* * 之前的 atime 值是否早于一天?如果是, * 更新时间: */ if ((long)(now.tv_sec - inode->i_atime.tv_sec) >= 24*60*60) 返回1; /* * 很好,我们可以跳过 atime 更新: */ 返回0; }
我不完全确定这是否也取决于所使用的文件系统。据介绍linux-4.2.4/Documentation/filesystems/ocfs2.txt
, OCFS2
已atime_quantum
...