All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@digeo.com>
To: William Lee Irwin III <wli@holomorphy.com>
Cc: Bill Davidsen <davidsen@tmr.com>,
	Aaron Lehmann <aaronl@vitelus.com>,
	Con Kolivas <conman@kolivas.net>,
	linux kernel mailing list <linux-kernel@vger.kernel.org>
Subject: Re: [BENCHMARK] 2.5.47{-mm1} with contest
Date: Wed, 20 Nov 2002 22:54:40 -0800	[thread overview]
Message-ID: <3DDC8330.FE066815@digeo.com> (raw)
In-Reply-To: 20021121000811.GQ23425@holomorphy.com

William Lee Irwin III wrote:
> 
> ...
> On Wed, Nov 20, 2002 at 03:02:24PM -0800, Andrew Morton wrote:
> > signal_test 30000 122 122000.00 Signal Traps/second
> > signal_test 10000 91.7 91700.00 Signal Traps/second
> >     Signal delivery is a lot slower in 2.5.  I do not know why,
> 
> Similar things have been reported with 2.4.x vs. 2.2.x and IIRC there
> was some speculation they were due to low-level arch code interactions.
> I think this merits some investigation. I, for one, am a big user of
> SIGIO in userspace C programs...
> 

OK, got it back to 119000.  Each signal was calling copy_*_user 24 times.
This gets it down to six.


--- 25/arch/i386/kernel/i387.c~signal-speedup	Wed Nov 20 20:44:56 2002
+++ 25-akpm/arch/i386/kernel/i387.c	Wed Nov 20 21:06:04 2002
@@ -232,7 +232,7 @@ void set_fpu_mxcsr( struct task_struct *
  * FXSR floating point environment conversions.
  */
 
-static inline int convert_fxsr_to_user( struct _fpstate *buf,
+static int convert_fxsr_to_user( struct _fpstate *buf,
 					struct i387_fxsave_struct *fxsave )
 {
 	unsigned long env[7];
@@ -254,13 +254,18 @@ static inline int convert_fxsr_to_user( 
 	to = &buf->_st[0];
 	from = (struct _fpxreg *) &fxsave->st_space[0];
 	for ( i = 0 ; i < 8 ; i++, to++, from++ ) {
-		if ( __copy_to_user( to, from, sizeof(*to) ) )
+		unsigned long *t = (unsigned long *)to;
+		unsigned long *f = (unsigned long *)from;
+
+		if (__put_user(*f, t) ||
+				__put_user(*(f + 1), t + 1) ||
+				__put_user(from->exponent, &to->exponent))
 			return 1;
 	}
 	return 0;
 }
 
-static inline int convert_fxsr_from_user( struct i387_fxsave_struct *fxsave,
+static int convert_fxsr_from_user( struct i387_fxsave_struct *fxsave,
 					  struct _fpstate *buf )
 {
 	unsigned long env[7];
@@ -283,7 +288,12 @@ static inline int convert_fxsr_from_user
 	to = (struct _fpxreg *) &fxsave->st_space[0];
 	from = &buf->_st[0];
 	for ( i = 0 ; i < 8 ; i++, to++, from++ ) {
-		if ( __copy_from_user( to, from, sizeof(*from) ) )
+		unsigned long *t = (unsigned long *)to;
+		unsigned long *f = (unsigned long *)from;
+
+		if (__get_user(*f, t) ||
+				__get_user(*(f + 1), t + 1) ||
+				__get_user(from->exponent, &to->exponent))
 			return 1;
 	}
 	return 0;
@@ -305,7 +315,7 @@ static inline int save_i387_fsave( struc
 	return 1;
 }
 
-static inline int save_i387_fxsave( struct _fpstate *buf )
+static int save_i387_fxsave( struct _fpstate *buf )
 {
 	struct task_struct *tsk = current;
 	int err = 0;
@@ -355,7 +365,7 @@ static inline int restore_i387_fsave( st
 				 sizeof(struct i387_fsave_struct) );
 }
 
-static inline int restore_i387_fxsave( struct _fpstate *buf )
+static int restore_i387_fxsave( struct _fpstate *buf )
 {
 	int err;
 	struct task_struct *tsk = current;
@@ -373,7 +383,7 @@ int restore_i387( struct _fpstate *buf )
 
 	if ( HAVE_HWFP ) {
 		if ( cpu_has_fxsr ) {
-			err =  restore_i387_fxsave( buf );
+			err = restore_i387_fxsave( buf );
 		} else {
 			err = restore_i387_fsave( buf );
 		}

_

  parent reply	other threads:[~2002-11-21  6:47 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-11-11 23:31 [BENCHMARK] 2.5.47{-mm1} with contest Con Kolivas
2002-11-12  0:09 ` Andrew Morton
2002-11-12  1:51   ` Con Kolivas
2002-11-12  2:07     ` mark walters
2002-11-12  2:18       ` Con Kolivas
2002-11-12  8:52   ` Giuliano Pochini
2002-11-12  9:20     ` Jens Axboe
2002-11-12  9:40       ` Con Kolivas
2002-11-12  3:04 ` Aaron Lehmann
2002-11-12 11:04   ` Andrew Morton
2002-11-12 14:20     ` Aaron Lehmann
2002-11-12 14:23       ` Jens Axboe
2002-11-12 20:37     ` Bill Davidsen
2002-11-12 20:59       ` Andrew Morton
2002-11-20 23:02       ` Andrew Morton
2002-11-21  0:08         ` William Lee Irwin III
2002-11-21  1:11           ` Alan Cox
2002-11-21  6:54           ` Andrew Morton [this message]
2002-11-21 13:20             ` Dave Jones
2002-11-21 17:21               ` Andrew Morton
2002-11-21 17:26                 ` William Lee Irwin III
2002-11-21 18:18                 ` Dave Jones
2002-11-21 18:25                 ` Bill Davidsen
2002-11-21 14:00             ` Dave Jones
2002-11-21 19:59   ` Denis Vlasenko

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=3DDC8330.FE066815@digeo.com \
    --to=akpm@digeo.com \
    --cc=aaronl@vitelus.com \
    --cc=conman@kolivas.net \
    --cc=davidsen@tmr.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=wli@holomorphy.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.