Re: 2.2.18Pre Lan Performance Rocks!

Jeff V. Merkey
2000-10-31T22:50:02Z

One more optimization it has. NetWare never "calls" functions in the
kernel. There's a template of register assignments in between kernel
modules that's very strict (esi contains a WTD head, edi has the target
thread, etc.) and all function calls are jumps in a linear space.
layout of all functions are 16 bytes aligned for speed, and all
arguments in kernel are passed via registers. It's a level of
optimization no C compiler does -- all of it was done by hand, and most
function s in fast paths are layed out in 512 byte chunks to increases
speed. Stack memory activity in the NetWare kernel is almost
non-existent in almost all of the "fast paths"

Jeff

"Jeff V. Merkey" wrote:
>
> A "context" is usually assued to be a "stack". The simplest of all
> context switches
> is:
>
> mov x, esp
> mov esp, y
>
> A context switch can be as short as two instructions, or as big as a TSS
> with CR3 hardware switching,
>
> i.e.
>
> ltr ax
> jmp task_gate
>
> (500 clocks later)
>
> ts->eip gets exec'd
>
> you can also have a context switch that does an int X where X is a gate
> or TSS.
>
> you can also have a context switch (like linux) that does
>
> mov x, esp
> mov esp, y
> mov z, CR3
> mov CR3, w
>
> etc.
>
> In NetWare, a context switch is an in-line assembly language macro that
> is 2 instructions long for a stack switch and 4 instructions for a CR3
> reload -- this is a lot shorter than Linux.
> Only EBX, EBP, ESI, and EDI are saved and this is never done in the
> kernel, but is a natural
> affect of the Watcom C compiler. There's also strict rules about
> register assignments that re enforced between assembler modules in
> NetWare to reduce the overhead of a context switch. The code path is
> very complex in NetWare, and priorities and all this stuff exists, but
> these code paths are segragated so these types of checks only happen
> once in a while and check a pre-calc'd "scoreboard" that is read only
> across processors and updated and recal'd by a timer every 18 ticks.
>
> Jeff
>
>
>
> Andi Kleen wrote:
> >
> > On Tue, Oct 31, 2000 at 02:52:11PM -0700, Jeff V. Merkey wrote:
> > > The numbers don't lie. You know where the code is. You notice that
> > > there is a version of
> > > the kernel hand coded in assembly language. You'l also noticed that
> > > it's SMP and takes ZERO LOCKS during context switching, in fact, most of
> > > the design is completely lockless.
> >
> > I suspect most of the confusion in this thread comes because you seem to
> > use a different definition of context switch than Ingo and others. Could
> > you explain what you exactly mean with a context switch ?
> >
> > -Andi