Messages in this thread Patch in this message | | | Date | Fri, 13 Dec 1996 23:41:36 -0600 (CST) | From | "Jonathan A. Davis" <> | Subject | Re: performance tweak for web/file servers |
| |
On Sat, 14 Dec 1996, Alan Cox wrote:
> > > In case someone else has the time to do it... a feature that would be a > > performance win for web and (mostly static) file servers is the ability > > to turn off access time updates on inodes (via mount options for example). > > I've found this takes a significant amount of disk/cache bandwidth on > > busy webservers (running IRIX...). > > One for Linux exists, and its a superb win on a newsserver >
Believe it or not Alan, I actually SAVED that patch, squirreled it away and NEVER looked at it again.
Below is the original(?) message. (for those who were wondering how to get it). It patched, compiled and booted cleanly for me (patched against 2.0.27 and some simple mods), but your mileage may vary. BTW, if there is an updated/newer patch out there, please let me know. You can also get this patch via ftp to:
ftp://evergreen.cc.usm.edu/pub/davis/no_atime.diff.gz
<DISCLAIMER> I didn't write it. I haven't even tested it. If it screws up on you, it's not my fault. BUT I'll give you lots of sympathy as I'll probably be in the same condition. </DISCLAIMER>
I'm testing this using INN 1.5. Since we receive around 2.1 GB/day, I'll probably find out quickly if there is a problem.
May the luck that seems to favor the foolish smile kindly on me. :-)
--------------begin insert--------------
Date: Sun, 2 Jun 1996 09:00:59 -0500 (CDT) From: coneill@premier.net To: server-linux@netspace.org, linux-kernel@vger.rutgers.edu Subject: Ext2 speedup (No atime update)
This is an implementation of an idea that I believe was originally mentioned on the FreeBSD hackers mailing list.
The basic idea behind this is that for some applications, there is litle or no point in updating the access time on the file. My primary use for this is on our news server's spool and history disks. These drives are primarily read-intensive, with most of the files being 2-3k. As you can understand, updating a 1k inode every time you read a 2k file isn't really very nice if you don't have to. My tests and examination of the news programs I'm using indicate that it isn't used for anything.
This patch adds two mount-time options, "no_atime" and "update_atime". update_atime is the default and will update atime's normally. no_atime will never update atime's on files, directories, and symlinks. update_atime primarily exists for remounting the filesystem.
This patch has been in production here for almost a week now with no problems. It's very straightforward, and should have little or no side-effects. However, I am wondering, would this be more useful/appropriate as an inheritable ext2 attribute?
Anyway, please send any feedback you have to me, I'd like to hear from anyone that tries it, whether or works or doesn't :)
diff -u -r linux.orig/fs/ext2/dir.c linux/fs/ext2/dir.c --- linux.orig/fs/ext2/dir.c Fri Dec 22 05:00:19 1995 +++ linux/fs/ext2/dir.c Thu May 30 03:04:18 1996 @@ -206,7 +206,7 @@ offset = 0; brelse (bh); } - if (!IS_RDONLY(inode)) { + if (!IS_RDONLY(inode) && !test_opt(sb,NO_ATIME)) { inode->i_atime = CURRENT_TIME; inode->i_dirt = 1; } diff -u -r linux.orig/fs/ext2/file.c linux/fs/ext2/file.c diff -u -r linux.orig/fs/ext2/super.c linux/fs/ext2/super.c --- linux.orig/fs/ext2/super.c Sat May 4 02:07:07 1996 +++ linux/fs/ext2/super.c Thu May 30 15:39:58 1996 @@ -252,6 +252,11 @@ value); return 0; } + } else if (!strcmp (this_char, "no_atime")) { + set_opt (*mount_options, NO_ATIME); + } + else if (!strcmp (this_char, "update_atime")) { + clear_opt (*mount_options, NO_ATIME); } /* Silently ignore the quota options */ else if (!strcmp (this_char, "grpquota") diff -u -r linux.orig/fs/ext2/symlink.c linux/fs/ext2/symlink.c --- linux.orig/fs/ext2/symlink.c Fri Apr 12 02:33:26 1996 +++ linux/fs/ext2/symlink.c Thu May 30 15:42:14 1996 @@ -86,7 +86,7 @@ link = bh->b_data; } else link = (char *) inode->u.ext2_i.i_data; - if (!IS_RDONLY(inode)) { + if (!IS_RDONLY(inode) && !test_opt(inode->i_sb,NO_ATIME)) { inode->i_atime = CURRENT_TIME; inode->i_dirt = 1; } @@ -127,7 +127,7 @@ i++; put_user (c, buffer++); } - if (!IS_RDONLY(inode)) { + if (!IS_RDONLY(inode) && !test_opt(inode->i_sb,NO_ATIME)) { inode->i_atime = CURRENT_TIME; inode->i_dirt = 1; } diff -u -r linux.orig/include/linux/ext2_fs.h linux/include/linux/ext2_fs.h --- linux.orig/include/linux/ext2_fs.h Mon May 20 12:33:56 1996 +++ linux/include/linux/ext2_fs.h Thu May 30 03:01:55 1996 @@ -296,6 +296,7 @@ #define EXT2_MOUNT_ERRORS_RO 0x0020 /* Remount fs ro on errors */ #define EXT2_MOUNT_ERRORS_PANIC 0x0040 /* Panic on errors */ #define EXT2_MOUNT_MINIX_DF 0x0080 /* Mimics the Minix statfs */ +#define EXT2_MOUNT_NO_ATIME 0x0100 /* Don't update the atime */ #define clear_opt(o, opt) o &= ~EXT2_MOUNT_##opt #define set_opt(o, opt) o |= EXT2_MOUNT_##opt diff -u -r linux.orig/mm/filemap.c linux/mm/filemap.c --- linux.orig/mm/filemap.c Sun May 19 15:37:07 1996 +++ linux/mm/filemap.c Thu May 30 21:35:58 1996 @@ -719,7 +719,12 @@ filp->f_reada = 1; if (page_cache) free_page(page_cache); - if (!IS_RDONLY(inode)) { + if (inode->i_sb->s_magic==EXT2_SUPER_MAGIC) { + if (!IS_RDONLY(inode) && !test_opt(inode->i_sb, NO_ATIME)) { + inode->i_atime = CURRENT_TIME; + inode->i_dirt = 1; + } + } else if (!IS_RDONLY(inode)) { inode->i_atime = CURRENT_TIME; inode->i_dirt = 1; } @@ -1097,7 +1102,12 @@ return -EACCES; if (!inode->i_op || !inode->i_op->readpage) return -ENOEXEC; - if (!IS_RDONLY(inode)) { + if (inode->i_sb->s_magic==EXT2_SUPER_MAGIC) { + if (!IS_RDONLY(inode) && !test_opt(inode->i_sb, NO_ATIME)) { + inode->i_atime = CURRENT_TIME; + inode->i_dirt = 1; + } + } else if (!IS_RDONLY(inode)) { inode->i_atime = CURRENT_TIME; inode->i_dirt = 1; }
------------------------------------------------------------------------- Clayton O'Neill Business--> Premier One Inc whatever@oneill.net clayton@premier.net http://www.oneill.net <--Personal http://www.premier.net ---------------end insert---------------
-Jonathan _ _ ------------------------------------------------------------->>>>>>>>-(o)(o)--- Jonathan A. Davis | Academic Systems Analyst | Hattiesburg/Gulf Park/Stennis Computing Center | Box 5171 | 39406 | (601) 266-4103 | jonathan.davis@usm.edu http://evergreen.cc.usm.edu/~davis | Linux: The choice of a GNU generation
| |