All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Vivier <LaurentVivier@wanadoo.fr>
To: Jeff Dike <jdike@addtoit.com>
Cc: roland <for_spam@gmx.de>, user-mode-linux-devel@lists.sourceforge.net
Subject: Re: [uml-devel] [PATCH] host context switch reduction
Date: Wed, 19 May 2004 19:27:36 +0200	[thread overview]
Message-ID: <1084987654.2250.4.camel@chartreuse> (raw)
In-Reply-To: <20040518175904.GB29114@ccure.user-mode-linux.org>


[-- Attachment #1.1: Type: text/plain, Size: 1188 bytes --]

Hi,

as it is a plebiscite ;-), find attached the patch for UML 2.6.6 and
measurements I made on my poor netserver.

Laurent

Le mar 18/05/2004 à 19:59, Jeff Dike a écrit :
> On Tue, May 18, 2004 at 12:22:45AM +0200, roland wrote:
> > the question is:
> > is the "real world" performance benefit, uml get`s from this patch worth taking your time and is it implemented in a way, so that
> > uml maintainers are happy with that ?
> 
> The patch seems reasonable to me.  I'd be happiest with Laurent pushing this
> into mainline himself.
> 
> > i cannot really estimate, what performance benefits your patch brings to uml in detail, but what i have seen so far, this seems
> > quite worth doing the work.  reducing context switches by 1/3 is a LOT, imho - and reducing the execution time of the getpid-loop to
> > nearly the half is quite impressive.
> 
> Yeah, but no real workloads do while(1) getpid();
> 
> The kernel build improvement is obviously smaller, but still worth having.
> 
> > are there any "con`s" that argue for that work _NOT_ being done ?
> 
> No.  But testing, and happy reports to the appropriate mailing lists would
> help.
> 
> 				Jeff

[-- Attachment #1.2: measure-getpid-2.6.6.txt --]
[-- Type: text/plain, Size: 909 bytes --]

HP Netserver LH Pro bi-pro 200 MHz / 256 MB RAM

NATIF:

netserver:/usr/src# uname -a
Linux netserver 2.4.24-sysemu #4 SMP Tue Feb 17 16:43:11 CET 2004 i686 GNU/Linux

netserver:/usr/src# time ./getpid 1000000

real    0m1.763s
user    0m0.910s
sys     0m0.860s

real    0m1.759s
user    0m0.900s
sys     0m0.870s

real    0m1.759s
user    0m0.950s
sys     0m0.800s

UML with sysemu:

(none):~# uname -a
Linux (none) 2.6.6-1um #10 Wed May 19 12:54:37 CEST 2004 i686 unknown

(none):/mnt/usr/src# time ./getpid 1000000 

real    1m1.508s
user    0m7.960s
sys     0m53.450s

real    1m1.881s
user    0m6.630s
sys     0m55.240s

real    1m1.920s
user    0m6.580s
sys     0m55.340s

UML w/o sysemu

real    1m32.833s
user    0m7.610s
sys     1m25.130s

real    1m32.921s
user    0m7.890s
sys     1m24.980s

real    1m33.493s
user    0m8.010s
sys     1m24.960s

[-- Attachment #1.3: um-sysemu-2.6.6.patch --]
[-- Type: text/x-patch, Size: 4054 bytes --]

diff -rNc linux-2.6.6/arch/um/kernel/process.c uml-linux-2.6.6/arch/um/kernel/process.c
*** linux-2.6.6/arch/um/kernel/process.c	Wed May 19 14:27:13 2004
--- uml-linux-2.6.6/arch/um/kernel/process.c	Wed May 19 14:25:40 2004
***************
*** 19,24 ****
--- 19,25 ----
  #include <asm/sigcontext.h>
  #include <asm/unistd.h>
  #include <asm/page.h>
+ #include <asm/user.h>
  #include "user_util.h"
  #include "kern_util.h"
  #include "user.h"
***************
*** 227,232 ****
--- 228,267 ----
  	}
  	stop_ptraced_child(pid, stack, 0);
  	printk("OK\n");
+ 
+ #ifdef PTRACE_SYSEMU
+ 	printk("Checking syscall emulation patch for ptrace...");
+ 	use_sysemu = 0;
+ 	pid = start_ptraced_child(&stack);
+ 	if(ptrace(PTRACE_SYSEMU, pid, 0, 0) >= 0) {
+ 		struct user_regs_struct regs;
+ 
+ 		if (waitpid(pid, &status, WUNTRACED) < 0)
+ 			panic("check_ptrace : wait failed, errno = %d", errno);
+ 		if(!WIFSTOPPED(status) || (WSTOPSIG(status) != SIGTRAP))
+ 			panic("check_ptrace : expected SIGTRAP, "
+ 			      "got status = %d", status);
+ 
+ 		if (ptrace(PTRACE_GETREGS, pid, 0, &regs) < 0)
+ 			panic("check_ptrace : failed to read child "
+ 			      "registers, errno = %d", errno);
+ 		regs.orig_eax = pid;
+ 		if (ptrace(PTRACE_SETREGS, pid, 0, &regs) < 0)
+ 			panic("check_ptrace : failed to modify child "
+ 			      "registers, errno = %d", errno);
+ 
+ 		stop_ptraced_child(pid, stack, 0);
+ 
+ 		printk("OK\n");
+ 		use_sysemu = 1;
+ 	}
+ 	else
+ 	{
+ 		printk("missing\n");
+ 		stop_ptraced_child(pid, stack, 1);
+ 	}
+ 
+ # endif /* PTRACE_SYSEMU */
  }
  
  int run_kernel_thread(int (*fn)(void *), void *arg, void **jmp_ptr)
diff -rNc linux-2.6.6/arch/um/kernel/skas/include/ptrace-skas.h uml-linux-2.6.6/arch/um/kernel/skas/include/ptrace-skas.h
*** linux-2.6.6/arch/um/kernel/skas/include/ptrace-skas.h	Wed May 19 14:27:13 2004
--- uml-linux-2.6.6/arch/um/kernel/skas/include/ptrace-skas.h	Wed May 19 11:22:04 2004
***************
*** 10,15 ****
--- 10,22 ----
  
  #ifdef UML_CONFIG_MODE_SKAS
  
+ /* syscall emulation path in ptrace */
+ 
+ #ifndef PTRACE_SYSEMU
+ #define PTRACE_SYSEMU 25
+ #endif
+ extern int use_sysemu;
+ 
  #include "skas_ptregs.h"
  
  #define HOST_FRAME_SIZE 17
diff -rNc linux-2.6.6/arch/um/kernel/skas/process.c uml-linux-2.6.6/arch/um/kernel/skas/process.c
*** linux-2.6.6/arch/um/kernel/skas/process.c	Wed May 19 14:27:13 2004
--- uml-linux-2.6.6/arch/um/kernel/skas/process.c	Wed May 19 11:22:04 2004
***************
*** 28,33 ****
--- 28,37 ----
  #include "chan_user.h"
  #include "signal_user.h"
  
+ #ifdef PTRACE_SYSEMU
+ int use_sysemu = 0;
+ #endif
+ 
  int is_skas_winch(int pid, int fd, void *data)
  {
  	if(pid != getpid())
***************
*** 68,73 ****
--- 72,81 ----
  		return;
  	}
  
+ #ifdef PTRACE_SYSEMU
+ 	if (!use_sysemu)
+ 	{
+ #endif
  	err = ptrace(PTRACE_POKEUSER, pid, PT_SYSCALL_NR_OFFSET, __NR_getpid);
  	if(err < 0)
  	        panic("handle_trap - nullifying syscall failed errno = %d\n", 
***************
*** 82,87 ****
--- 90,98 ----
  	if((err < 0) || !WIFSTOPPED(status) || (WSTOPSIG(status) != SIGTRAP))
  		panic("handle_trap - failed to wait at end of syscall, "
  		      "errno = %d, status = %d\n", errno, status);
+ #ifdef PTRACE_SYSEMU
+ 	}
+ #endif
  
  	handle_syscall(regs);
  }
***************
*** 139,144 ****
--- 150,160 ----
  
  	restore_registers(regs);
  		
+ #ifdef PTRACE_SYSEMU
+ 	if (use_sysemu)
+ 		err = ptrace(PTRACE_SYSEMU, pid, 0, 0);
+ 	else
+ #endif
  	err = ptrace(PTRACE_SYSCALL, pid, 0, 0);
  	if(err)
  		panic("userspace - PTRACE_SYSCALL failed, errno = %d\n", 
***************
*** 177,182 ****
--- 193,204 ----
  
  		restore_registers(regs);
  
+ #ifdef PTRACE_SYSEMU
+ 		if (use_sysemu)
+ 			op = singlestepping_skas() ? PTRACE_SINGLESTEP : 
+ 				PTRACE_SYSEMU;
+ 		else
+ #endif
  		op = singlestepping_skas() ? PTRACE_SINGLESTEP : 
  			PTRACE_SYSCALL;
  		err = ptrace(op, pid, 0, 0);

[-- Attachment #2: Ceci est une partie de message numériquement signée. --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

  reply	other threads:[~2004-05-19 17:27 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-02-29  4:35 [uml-devel] [PATCH] host context switch reduction Jeff Dike
2004-02-29 16:48 ` BlaisorBlade
2004-03-15 11:42 ` Sven 'Darkman' Michels
2004-03-15 19:13   ` Jeff Dike
2004-05-17 20:08 ` roland
2004-05-17 22:00   ` Laurent Vivier
2004-05-17 22:22     ` roland
2004-05-18 17:59       ` Jeff Dike
2004-05-19 17:27         ` Laurent Vivier [this message]
2004-05-19 18:01           ` roland
2004-05-19 18:17             ` Laurent Vivier
2004-05-19 19:39               ` roland
2004-05-19 19:49                 ` Laurent Vivier
2004-05-20  2:30                   ` roland
2004-05-20 12:49                     ` Laurent Vivier
2004-05-23  0:42                       ` [uml-devel] [PATCH] commandline switch for sysemu patch roland
2004-05-23 13:31                       ` [uml-devel] [PATCH] host context switch reduction roland
2004-05-19 23:54               ` Jeff Dike
2004-05-20  1:01               ` roland
2004-05-20 14:12                 ` Henrik Nordstrom
2004-05-20 15:27                   ` roland
2004-05-20 15:35                     ` Henrik Nordstrom
2004-05-19 22:40           ` Nuno Silva
2004-05-20 18:28           ` roland
2004-05-20 18:47             ` Henrik Nordstrom
2004-05-27  6:16           ` Christopher S. Aker
2004-05-27  8:22             ` Laurent Vivier
2004-05-27  9:25               ` Christopher S. Aker
2004-05-27 11:50                 ` Laurent Vivier
2004-05-28  4:53                   ` [uml-devel] [PATCH] host context switch reduction Benchmarks Christopher S. Aker
  -- strict thread matches above, loose matches on Subject: below --
2004-05-20  2:34 [uml-devel] [PATCH] host context switch reduction roland

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=1084987654.2250.4.camel@chartreuse \
    --to=laurentvivier@wanadoo.fr \
    --cc=for_spam@gmx.de \
    --cc=jdike@addtoit.com \
    --cc=user-mode-linux-devel@lists.sourceforge.net \
    /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.