/proc/sys/fs/relatime_interval 发生了什么?

/proc/sys/fs/relatime_interval 发生了什么?

根据一个答案相关时间间隔可以通过以下方式更改

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.txtOCFS2atime_quantum...

相关内容