• Arjan van de Ven's avatar
    [PATCH] non lazy "sleazy" fpu implementation · e07e23e1
    Arjan van de Ven authored
    Right now the kernel on x86-64 has a 100% lazy fpu behavior: after *every*
    context switch a trap is taken for the first FPU use to restore the FPU
    context lazily.  This is of course great for applications that have very
    sporadic or no FPU use (since then you avoid doing the expensive
    save/restore all the time).  However for very frequent FPU users...  you
    take an extra trap every context switch.
    
    The patch below adds a simple heuristic to this code: After 5 consecutive
    context switches of FPU use, the lazy behavior is disabled and the context
    gets restored every context switch.  If the app indeed uses the FPU, the
    trap is avoided.  (the chance of the 6th time slice using FPU after the
    previous 5 having done so are quite high obviously).
    
    After 256 switches, this is reset and lazy behavior is returned (until
    there are 5 consecutive ones again).  The reason for this is to give apps
    that do longer bursts of FPU use still the lazy behavior back after some
    time.
    
    [akpm@osdl.org: place new task_struct field next to jit_keyring to save space]
    Signed-off-by: default avatarArjan van de Ven <arjan@linux.intel.com>
    Signed-off-by: default avatarAndi Kleen <ak@suse.de>
    Cc: Andi Kleen <ak@muc.de>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    e07e23e1
traps.c 30.3 KB