linux-um archives
 help / color / mirror / Atom feed
From: Laurent Vivier <LaurentVivier@wanadoo.fr>
To: roland <for_spam@gmx.de>
Cc: Jeff Dike <jdike@addtoit.com>,
	user-mode-linux-devel@lists.sourceforge.net
Subject: Re: [uml-devel] [PATCH] host context switch reduction
Date: Wed, 19 May 2004 20:17:43 +0200	[thread overview]
Message-ID: <1084990661.2255.28.camel@chartreuse> (raw)
In-Reply-To: <012201c43dcb$402ca6a0$2000000a@schlepptopp>


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

Le mer 19/05/2004 à 20:01, roland a écrit :
> Hi Laurent !
> Great!
> Thanks a lot for your work :)
> 
> but i have a question:
> 
> old mail from jeff:
> >The patches below are from Laurent Vivier who didn't make them public.  They
> >add a new feature to ptrace on the host which cuts down on the number of
> >context switches needed for a UML system call, plus makes UML use it
> 
> so - if your patch adds a new feature for ptrace on the HOST - shouldn`t we need TWO patches for 2.6 ?
> One patch for uml and one patch for the host ?
> 
> this one seems for uml only.
> some of us already run uml 2.6(.x) on a 2.6.(.x) host and put their focus on the "new kernel" (me too).

OK, as I didn't find skas patch for 2.6 I thought it didn't exist...
anyway I tried to port the 2.4 host sysemu patch to 2.6, find it
attached. I never tested it, or compiled it ! I have no system with 2.6
kernel, and the only I386 system I have is very, very, very noisy...
it's a good system only when it is switched off ;-) !

> regards
> roland
> 
> ps:
> since this would be the 2nd patch for the HOST (besides skas), would it make sense, to merge "skas" and "sysemu" into one common
> HOST-patch (if it has been tested and approved stable) ?
> 

YES, I think... but Jeff is the boss ;-)

> 
> 
> ----- Original Message ----- 
> 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>
> Sent: Wednesday, May 19, 2004 7:27 PM
> Subject: Re: [uml-devel] [PATCH] host context switch reduction
> 
> 
> 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
> 
> 
> 
> --------------------------------------------------------------------------------
> 
> 
> > 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.2: host-sysemu-2.6.6.patch --]
[-- Type: text/x-patch, Size: 4884 bytes --]

diff -rNc linux-2.6.6/arch/i386/kernel/entry.S linux-2.6.6-sysemu/arch/i386/kernel/entry.S
*** linux-2.6.6/arch/i386/kernel/entry.S	Mon May 10 04:32:26 2004
--- linux-2.6.6-sysemu/arch/i386/kernel/entry.S	Tue May 18 11:36:52 2004
***************
*** 286,291 ****
--- 286,294 ----
  	GET_THREAD_INFO(%ebp)
  	cmpl $(nr_syscalls), %eax
  	jae syscall_badsys
+ 					# system call emulation
+ 	testb $(_TIF_SYSCALL_EMU),TI_FLAGS(%ebp)
+ 	jnz syscall_emu_entry
  					# system call tracing in operation
  	testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT),TI_FLAGS(%ebp)
  	jnz syscall_trace_entry
***************
*** 339,344 ****
--- 342,351 ----
  	call do_notify_resume
  	jmp restore_all
  
+ 	# perform syscal emulation
+ syscall_emu_entry:
+ 	call do_syscall_emu
+ 	jmp syscall_exit
  	# perform syscall exit tracing
  	ALIGN
  syscall_trace_entry:
diff -rNc linux-2.6.6/arch/i386/kernel/ptrace.c linux-2.6.6-sysemu/arch/i386/kernel/ptrace.c
*** linux-2.6.6/arch/i386/kernel/ptrace.c	Mon May 10 04:32:26 2004
--- linux-2.6.6-sysemu/arch/i386/kernel/ptrace.c	Tue May 18 11:43:54 2004
***************
*** 356,361 ****
--- 356,362 ----
  		  }
  		  break;
  
+ 	case PTRACE_SCEMU: /* continue and replace next syscall */
  	case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */
  	case PTRACE_CONT: { /* restart after signal. */
  		long tmp;
***************
*** 363,368 ****
--- 364,375 ----
  		ret = -EIO;
  		if ((unsigned long) data > _NSIG)
  			break;
+ 		if (request == PTRACE_SCEMU) {
+ 			set_tsk_thread_flag(child, TIF_SYSCALL_EMU);
+ 		}
+ 		else {
+ 			clear_tsk_thread_flag(child, TIF_SYSCALL_EMU);
+ 		}
  		if (request == PTRACE_SYSCALL) {
  			set_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
  		}
***************
*** 403,409 ****
  		ret = -EIO;
  		if ((unsigned long) data > _NSIG)
  			break;
! 		clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
  		if ((child->ptrace & PT_DTRACE) == 0) {
  			/* Spurious delayed TF traps may occur */
  			child->ptrace |= PT_DTRACE;
--- 410,416 ----
  		ret = -EIO;
  		if ((unsigned long) data > _NSIG)
  			break;
! 		clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE|TIF_SYSCALL_EMU);
  		if ((child->ptrace & PT_DTRACE) == 0) {
  			/* Spurious delayed TF traps may occur */
  			child->ptrace |= PT_DTRACE;
***************
*** 538,543 ****
--- 545,572 ----
  		return;
  	if (!(current->ptrace & PT_PTRACED))
  		return;
+ 	/* the 0x80 provides a way for the tracing parent to distinguish
+ 	   between a syscall stop and SIGTRAP delivery */
+ 	ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
+ 				 ? 0x80 : 0));
+ 
+ 	/*
+ 	 * this isn't the same as continuing with a signal, but it will do
+ 	 * for normal use.  strace only continues with a signal if the
+ 	 * stopping signal is not SIGTRAP.  -brl
+ 	 */
+ 	if (current->exit_code) {
+ 		send_sig(current->exit_code, current, 1);
+ 		current->exit_code = 0;
+ 	}
+ }
+ 
+ void do_syscall_emu(void)
+ {
+ 	if (!test_thread_flag(TIF_SYSCALL_EMU))
+ 		return;
+ 	if (!(current->ptrace & PT_PTRACED))
+ 		return;
  	/* the 0x80 provides a way for the tracing parent to distinguish
  	   between a syscall stop and SIGTRAP delivery */
  	ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
diff -rNc linux-2.6.6/include/asm-i386/thread_info.h linux-2.6.6-sysemu/include/asm-i386/thread_info.h
*** linux-2.6.6/include/asm-i386/thread_info.h	Mon May 10 04:32:01 2004
--- linux-2.6.6-sysemu/include/asm-i386/thread_info.h	Tue May 18 11:33:00 2004
***************
*** 151,156 ****
--- 151,157 ----
  #define TIF_NEED_RESCHED	3	/* rescheduling necessary */
  #define TIF_SINGLESTEP		4	/* restore singlestep on return to user mode */
  #define TIF_IRET		5	/* return with iret */
+ #define TIF_SYSCALL_EMU		6	/* syscall emulation active */
  #define TIF_SYSCALL_AUDIT	7	/* syscall auditing active */
  #define TIF_POLLING_NRFLAG	16	/* true if poll_idle() is polling TIF_NEED_RESCHED */
  
***************
*** 160,165 ****
--- 161,167 ----
  #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
  #define _TIF_SINGLESTEP		(1<<TIF_SINGLESTEP)
  #define _TIF_IRET		(1<<TIF_IRET)
+ #define _TIF_SYSCALL_EMU	(1<<TIF_SYSCALL_EMU)
  #define _TIF_SYSCALL_AUDIT	(1<<TIF_SYSCALL_AUDIT)
  #define _TIF_POLLING_NRFLAG	(1<<TIF_POLLING_NRFLAG)
  
diff -rNc linux-2.6.6/include/linux/ptrace.h linux-2.6.6-sysemu/include/linux/ptrace.h
*** linux-2.6.6/include/linux/ptrace.h	Mon May 10 04:32:00 2004
--- linux-2.6.6-sysemu/include/linux/ptrace.h	Tue May 18 11:44:39 2004
***************
*** 20,25 ****
--- 20,26 ----
  #define PTRACE_DETACH		0x11
  
  #define PTRACE_SYSCALL		  24
+ #define PTRACE_SCEMU		  25
  
  /* 0x4200-0x4300 are reserved for architecture-independent additions.  */
  #define PTRACE_SETOPTIONS	0x4200

[-- 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 18:17 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
2004-05-19 18:01           ` roland
2004-05-19 18:17             ` Laurent Vivier [this message]
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=1084990661.2255.28.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox