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 BaldwinReceived on Mon Jul 09 2012 - 13:38:21 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:28 UTC