• Giuseppe CAVALLARO's avatar
    sh: add sleazy FPU optimization · a0458b07
    Giuseppe CAVALLARO authored
    sh port of the sLeAZY-fpu feature currently implemented for some architectures
    such us i386.
    
    Right now the SH kernel has a 100% lazy fpu behaviour.
    This is of course great for applications that have very sporadic or no FPU use.
    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.
    After 256 switches, this is reset and the 100% lazy behavior is returned.
    
    Tests with LMbench showed no regression.
    I saw a little improvement due to the prefetching (~2%).
    
    The tests below also show that, with this sLeazy patch, indeed,
    the number of FPU exceptions is reduced.
    To test this. I hacked the lat_ctx LMBench to use the FPU a little more.
    
       sLeasy implementation
       ===========================================
       switch_to calls            |  79326
       sleasy   calls             |  42577
       do_fpu_state_restore  calls|  59232
       restore_fpu   calls        |  59032
    
       Exceptions:  0x800 (FPU disabled  ): 16604
    
       100% Leazy (default implementation)
       ===========================================
       switch_to  calls            |  79690
       do_fpu_state_restore calls  |  53299
       restore_fpu  calls          |   53101
    
       Exceptions: 0x800 (FPU disabled  ):  53273
    Signed-off-by: default avatarGiuseppe Cavallaro <peppe.cavallaro@st.com>
    Signed-off-by: default avatarStuart Menefy <stuart.menefy@st.com>
    Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
    a0458b07
fpu.c 13.8 KB