From owner-freebsd-current Tue Jul 9 16:40:15 2002 Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 4B3F337B400; Tue, 9 Jul 2002 16:40:10 -0700 (PDT) Received: from sccrmhc02.attbi.com (sccrmhc02.attbi.com [204.127.202.62]) by mx1.FreeBSD.org (Postfix) with ESMTP id A140743E09; Tue, 9 Jul 2002 16:40:09 -0700 (PDT) (envelope-from julian@elischer.org) Received: from InterJet.elischer.org ([12.232.206.8]) by sccrmhc02.attbi.com (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id <20020709234009.RXJO6023.sccrmhc02.attbi.com@InterJet.elischer.org>; Tue, 9 Jul 2002 23:40:09 +0000 Received: from localhost (localhost.elischer.org [127.0.0.1]) by InterJet.elischer.org (8.9.1a/8.9.1) with ESMTP id QAA37262; Tue, 9 Jul 2002 16:23:52 -0700 (PDT) Date: Tue, 9 Jul 2002 16:23:51 -0700 (PDT) From: Julian Elischer To: Bruce Evans Cc: John Baldwin , FreeBSD current users , FreeBSD current users Subject: RE: userret() , ast() and the end of syscalls In-Reply-To: <20020710090100.Q8947-100000@gamplex.bde.org> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG On Wed, 10 Jul 2002, Bruce Evans wrote: > On Tue, 9 Jul 2002, Julian Elischer wrote: > > > On Wed, 10 Jul 2002, Bruce Evans wrote: > > > > > Hopefully there won't be any unconditional code. Unconditional code > > > in userret() pessimizes all syscalls. Unconditional code added by KSEIII > > > pessimized basic syscall overhead by 10% according to lmbench2. > > > > Mostly it's conditional.. > > if (p->p_flag & P_KSES) > > in syscall() > > and > > if (p->p_flag & P_KSES) { > > in userret() > > The conditionals are unconditional, and together with the proc locking) > (mainly the locking) are what gives the 10% pessimization. It would be > much more than 10% to actually do something :). > > > it's probably > > PROC_LOCK(p); > > thread_suspend_check(0); /* Can suspend or kill */ > > PROC_UNLOCK(p); > > > > > > try replace it with: > > if (P_SHOULDSTOP(p) { > > PROC_LOCK(p); > > thread_suspend_check(0); /* Can suspend or kill */ > > PROC_UNLOCK(p); > > } > > Can these flags be changed asynchronously? If so, then everything needs > to be handled by ast() anyway. userret() should only check for work that > needs doing in the usual case, and hopefully there is none (except for > things like ktrace). That (use ast) is a sensible suggestion. I guess it belongs with the postsig in ast(). I can try that.. though it ;ll take a little work in the mean time try the patch above with lmbench.. > > Bruce > > To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message