From owner-freebsd-threads@FreeBSD.ORG Thu Apr 10 23:00:38 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 E808637B401 for ; Thu, 10 Apr 2003 23:00:38 -0700 (PDT) Received: from exchhz01.viatech.com.cn (ip-167-164-97-218.anlai.com [218.97.164.167]) by mx1.FreeBSD.org (Postfix) with ESMTP id 5F45043F93 for ; Thu, 10 Apr 2003 23:00:37 -0700 (PDT) (envelope-from davidxu@freebsd.org) Received: from davidw2k (ip-240-1-168-192.rev.dyxnet.com [192.168.1.240]) by exchhz01.viatech.com.cn with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2650.21) id HLDQPZQT; Fri, 11 Apr 2003 13:47:00 +0800 Message-ID: <012401c2ffef$e50657e0$f001a8c0@davidw2k> From: "David Xu" To: "Peter Wemm" References: <20030411053722.782152A7EA@canning.wemm.org> Date: Fri, 11 Apr 2003 14:02:12 +0800 MIME-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: quoted-printable X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.50.4807.1700 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4910.0300 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 06:00:39 -0000 ----- 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. > 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