Date: Mon, 14 Jan 2002 15:31:49 +1100 From: Peter Jeremy <peter.jeremy@alcatel.com.au> To: Bruce Evans <bde@zeta.org.au> Cc: Terry Lambert <tlambert2@mindspring.com>, Peter Wemm <peter@wemm.org>, Alfred Perlstein <bright@mu.org>, Kelly Yancey <kbyanc@posi.net>, Nate Williams <nate@yogotech.com>, Daniel Eischen <eischen@pcnet1.pcnet.com>, Dan Eischen <eischen@vigrid.com>, Archie Cobbs <archie@dellroad.org>, arch@FreeBSD.ORG Subject: Re: Request for review: getcontext, setcontext, etc Message-ID: <20020114153148.W561@gsmx07.alcatel.com.au> In-Reply-To: <20020114120026.S3794-100000@gamplex.bde.org>; from bde@zeta.org.au on Mon, Jan 14, 2002 at 01:31:20PM %2B1100 References: <20020114074238.S561@gsmx07.alcatel.com.au> <20020114120026.S3794-100000@gamplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 2002-Jan-14 13:31:20 +1100, Bruce Evans <bde@zeta.org.au> wrote: >> always load FPU context on a switch - this is more expensive for >> processes that don't use FP, but saves a DNA trap per context switch >> (assuming they use FP in that slice) for those that do. > >Not overall, since most timeslices don't use the FPU (at least for >processes that I run :-). My 2 year old figures suggest that even with FP-intensive progs, the majority of timeslices don't use the FPU. >> To add some further numbers, in December 1999, I did some measurements >> on FP switching by patching npx.c. This was on a PII-266 running then >> -current. (The original e-mail was sent to -arch on Mon, 20 Dec 1999 >> 07:34:06 +1100 in a thread titled "Concrete plans for ucontext/ >> mcontext changes around 4.0" - I don't have the message-id available). >> >> ctxt DNA FP >> swtch traps swtch >> 1754982 281557 59753 build world and a few CVS operations [1] >> 79044 18811 10341 gnuplot and xv in parallel [2] >> 800 138 130 parallel FP-intensive progs [3]. >> >> In the above, `ctxt swtch' is the number of context switches counted >> via vm.stats.sys.v_swtch. `DNA traps' is the number of device not >> available traps registered and `FP swtch' is the number of DNA traps >> where the FP context loaded is different to that saved on the >> preceeding context switch. > >That's a lot more DNA traps than I would have expected for buildworld >and a bit less than I would have expected for the others. I guess many >of the ones for buildworld are for the FP in setjmp() for jumps that >are never taken. It's also possible that gcc does some FP operations even when compiling integer-only code. >220000 extra FP context switches at 264 cycles each would increase my >buildworld time by a whole 0.34 seconds or 0.025%. There may be more >important things to optimize :-). Except that removing the lazy FPU switching would translate 280,000 DNA traps into 1,755,000 f*rstor's. Though you could probably cut this number down by changing the FPU switching code to always do an f*rstor if the process ever uses FP. (As someone else suggested). If anyone is interested, my original patches are below. Based on a quick look, they seem to be still valid (though there will be some fuzz on -CURRENT due to the added cpu_critical_enter() call). Index: npx.c =================================================================== RCS file: /home/peter/cvs/src/sys/i386/isa/npx.c,v retrieving revision 1.78 diff -u -r1.78 npx.c --- npx.c 1999/09/21 10:51:47 1.78 +++ npx.c 1999/12/17 09:53:02 @@ -779,6 +779,15 @@ } } +static int fp_dna; /* number of DNA traps */ +static int fp_swtch; /* Number of real FP context switches */ +static struct proc *fpuproc; /* Last proc to use FPU */ + +SYSCTL_INT(_hw, OID_AUTO, fp_dna, CTLFLAG_RW, &fp_dna, 0, + "Number of NPX DNA traps"); +SYSCTL_INT(_hw, OID_AUTO, fp_swtch, CTLFLAG_RW, &fp_swtch, 0, + "Number of NPX context switches"); + /* * Implement device not available (DNA) exception * @@ -797,6 +806,11 @@ panic("npxdna"); } stop_emulating(); + fp_dna++; + if (curproc != fpuproc) { + fpuproc = curproc; + fp_swtch++; + } /* * Record new context early in case frstor causes an IRQ13. */ Peter To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020114153148.W561>