[ale] Performance patch for web/file servers

Omar Loggiodice ologgio at vrainn.com
Fri Dec 20 11:08:18 EST 1996


Hi,

   Maybe some of you want to try this patch, people have reported more than
30% increase in speed for news servers. Make sure you understand what the
patch does before using it. Some applications use the file access time, and
those will not work properly if you mount the file system with the no_atime
option.

   A similar patch should be part of 2.1.16
   
   Omar

:Date: Sun, 2 Jun 1996 09:00:59 -0500 (CDT)
:From: coneill at premier.net
:To: server-linux at netspace.org, linux-kernel at 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 at oneill.net                                   clayton at premier.net
:http://www.oneill.net       <--Personal            http://www.premier.net
:
:---------------end insert---------------
:


-- 
____________________________________________________________________
            /   __  __  __  - __  __ / - _  __  ologgio at vrainn.com
  Omar R.  /__ /_/ /_/ /_/ / /_/ /_/ / /_  /-_  CIS: 74040,1543
                  __/ __/                         
___C++/6_yrs____Virtual Reality/4_yrs____Vorl_____Linux(free)_______
Never forget either the "Big Picture" or the "Small Picture"...






More information about the Ale mailing list