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 _______________________________________________ freebsd-current@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"