From owner-freebsd-threads@FreeBSD.ORG Fri Apr 11 12:10:06 2003 Return-Path: Delivered-To: freebsd-threads@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 04C4737B401; Fri, 11 Apr 2003 12:10:06 -0700 (PDT) Received: from canning.wemm.org (canning.wemm.org [192.203.228.65]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7CE0B43F93; Fri, 11 Apr 2003 12:10:05 -0700 (PDT) (envelope-from peter@wemm.org) Received: from wemm.org (localhost [127.0.0.1]) by canning.wemm.org (Postfix) with ESMTP id 68C322A7EA; Fri, 11 Apr 2003 12:10:05 -0700 (PDT) (envelope-from peter@wemm.org) X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 To: "David Xu" In-Reply-To: <012401c2ffef$e50657e0$f001a8c0@davidw2k> Date: Fri, 11 Apr 2003 12:10:05 -0700 From: Peter Wemm Message-Id: <20030411191005.68C322A7EA@canning.wemm.org> cc: freebsd-threads@freebsd.org Subject: Re: patch for %gs saving X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Apr 2003 19:10:06 -0000 "David Xu" wrote: > > ----- Original Message -----=20 > From: "Peter Wemm" > To: "David Xu" > Cc: > Sent: Friday, April 11, 2003 1:37 PM > Subject: Re: patch for %gs saving=20 > > > > "David Xu" wrote: > > > Here is the patch for kernel to save %gs, > > > it works well on my machine. > > > http://people.freebsd.org/~davidxu/i386_gs.diff > > > Daniel, is this the reason in your libpthread > > > patch that doesn't use getcontext syscall ? > >=20 > > To put some background on the issue, there is a reason why we did not > > do this. %gs is not used by the kernel, so it does not normally need = > to > > be saved and restored on every trap into the kernel. Setting a = > segment > > register is Really Slow - measured in hundreds of clock cycles. > >=20 > > So, we normally only touch %gs when we context switch to a different = > process > > that may have a different %gs. Or when one of the context syscalls = > wants > > it changed. We cannot avoid touching %fs because we use it for kernel > > private data. But if it wasn't for that, we wouldn't be touching > > %fs for regular traps/syscalls/etc either. > >=20 > > Bruce Evans understands this better than I do, I would suggest not = > making > > this change without talking about it with him first. > >=20 > > Yes, I know loading a descriptor is slow, but in real world, such = > optimization > will be lost in real work noise. And setcontext syscall is broken by = > this > optimization, userland will fail to set his context in atomic operation, > set pcb->gs =3D userland_gs does not work, so the cost is obviously, I = > can optimize > my patch to only save and restore %gs at trap and interrupt time, when = > entering > kernel, I can always zero %gs because kernel does not use it, I think = > this can > reduce clock cycles at context switch, this might be better than current = > code which > loading %gs at every context switch. Currently we only change %gs when switching one entire process to another seperate process. Your patch changes it so that it changes %gs on every single fault/trap/syscall/etc. I regularly see process traces where the ratio of syscalls to context switches is over 1000 to 1. ie: your patch would increase the cost of the %gs activity over a thousand times. Cheers, -Peter -- Peter Wemm - peter@wemm.org; peter@FreeBSD.org; peter@yahoo-inc.com "All of this is for nothing if we don't go to the stars" - JMS/B5