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>