public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@digeo.com>
To: dipankar@in.ibm.com
Cc: viro@parcelfarce.linux.theplanet.co.uk, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] reducing overheads in fget/fput
Date: Fri, 2 May 2003 13:54:04 -0700	[thread overview]
Message-ID: <20030502135404.0ba2ca66.akpm@digeo.com> (raw)
In-Reply-To: <20030502171726.GA1414@in.ibm.com>

Dipankar Sarma <dipankar@in.ibm.com> wrote:
>
> > That shouldn't be very difficult to fix. For the fget_light/fput_light
> > pair in a syscall, we make the files->count == 1 check only once at the 
> > beginning. Do you see a problem with that ?
> 
> Here is a patch that fixes that.

This patch is fairly foul.

> kernel           sys time     std-dev
> ------------     --------     -------
> UP - vanilla     2.104        0.028
> SMP - vanilla    2.976        0.023
> UP - file        1.867        0.019
> SMP - file       2.719        0.026

But it is localised, and makes a substantial difference.

I inlined fput_light:

diff -puN fs/file_table.c~fget-speedup-inline-fput_light fs/file_table.c
--- 25/fs/file_table.c~fget-speedup-inline-fput_light	Fri May  2 13:51:45 2003
+++ 25-akpm/fs/file_table.c	Fri May  2 13:52:23 2003
@@ -141,19 +141,12 @@ void close_private_file(struct file *fil
 	security_file_free(file);
 }
 
-void fput(struct file * file)
+void fput(struct file *file)
 {
 	if (atomic_dec_and_test(&file->f_count))
 		__fput(file);
 }
 
-void fput_light(struct file * file, int flag)
-{
-	if (unlikely(flag))
-		if (atomic_dec_and_test(&file->f_count))
-			__fput(file);
-}
-
 /* __fput is called from task context when aio completion releases the last
  * last use of a struct file *.  Do not use otherwise.
  */
diff -puN include/linux/file.h~fget-speedup-inline-fput_light include/linux/file.h
--- 25/include/linux/file.h~fget-speedup-inline-fput_light	Fri May  2 13:51:45 2003
+++ 25-akpm/include/linux/file.h	Fri May  2 13:52:52 2003
@@ -35,7 +35,13 @@ struct files_struct {
 
 extern void FASTCALL(__fput(struct file *));
 extern void FASTCALL(fput(struct file *));
-extern void FASTCALL(fput_light(struct file *, int));
+
+static inline void fput_light(struct file *file, int flag)
+{
+	if (unlikely(flag))
+		fput(file);
+}
+
 extern struct file * FASTCALL(fget(unsigned int fd));
 extern struct file * FASTCALL(fget_light(unsigned int fd, int *flag));
 extern void FASTCALL(set_close_on_exec(unsigned int fd, int flag));

_


  reply	other threads:[~2003-05-02 20:45 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-04-28 16:52 [PATCH] reducing overheads in fget/fput Dipankar Sarma
2003-04-28 19:32 ` viro
2003-04-28 19:58   ` Dipankar Sarma
2003-05-02 17:17     ` Dipankar Sarma
2003-05-02 20:54       ` Andrew Morton [this message]
2003-05-03  3:53         ` Dipankar Sarma
2003-05-03  4:00           ` Andrew Morton
2003-05-03  4:24             ` Dipankar Sarma

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20030502135404.0ba2ca66.akpm@digeo.com \
    --to=akpm@digeo.com \
    --cc=dipankar@in.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=viro@parcelfarce.linux.theplanet.co.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox