Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Jul 2012 11:24:52 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        freebsd-current@freebsd.org
Cc:        amd64@freebsd.org
Subject:   Re: XSAVEOPT
Message-ID:  <201207091124.52044.jhb@freebsd.org>
In-Reply-To: <20120708150225.GA2338@deviant.kiev.zoral.com.ua>
References:  <20120708150225.GA2338@deviant.kiev.zoral.com.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sunday, July 08, 2012 11:02:25 am Konstantin Belousov wrote:
> Please find at
> http://people.freebsd.org/~kib/misc/xsaveopt.1.patch
> a patch to finally add suport for using XSAVEOPT for our amd64 context
> switch code. See Intel SDM for description of the XSAVEOPT instruction.
> 
> Summary is that the instruction allows to not write parts of the FPU
> state which was not touched by the thread. Context switch then would
> write less to the PCB when thread is moved out from CPU. This is mainly
> to facilitate the ever-growing size of the FPU register file, in
> particular, AVX/YMM registers. Normal applications do not touch YMM, so
> saving them on each context switch if FPU was used is waste.
> 
> Main complication is that any consumer of the ucontext_t still expect to
> see fully populated machine state, including the extended states which were
> not saved. Since CPU only avoids save when corresponding state is pristine,
> we can use the copy of initial state. CPUID provides an enumerator that
> allows OS to easily pick up neccesary area and copy over.
> 
> I tried hard, but was unable to measure any statistically significant
> difference in the context switch times between XSAVE and XSAVEOPT using
> lmbench lat_ctx, on Core i7 2600K.

Hmm, I thought one of the ideas of xsaveopt was to let you just always execute
it during a context switch and dispense with the need for using the CR0_TS 
flag at all?  Maybe that isn't true though.  It would seem rather silly to
switch out the state if you don't need to (when preempting a thread that uses 
the FPU to run a thread that doesn't and then switching back for example).

-- 
John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201207091124.52044.jhb>