• Lan Tianyu's avatar
    x86/smpboot: Speed up suspend/resume by avoiding 100ms sleep for CPU offline during S3 · 2ed53c0d
    Lan Tianyu authored
    With certain kernel configurations, CPU offline consumes more than
    100ms during S3.
    
    It's a timing related issue: native_cpu_die() would occasionally fall
    into a 100ms sleep when the CPU idle loop thread marked the CPU state
    to DEAD too slowly.
    
    What native_cpu_die() does is that it polls the CPU state and waits
    for 100ms if CPU state hasn't been marked to DEAD. The 100ms sleep
    doesn't make sense and is purely historic.
    
    To avoid such long sleeping, this patch adds a 'struct completion'
    to each CPU, waits for the completion in native_cpu_die() and wakes
    up the completion when the CPU state is marked to DEAD.
    
    Tested on an Intel Xeon server with 48 cores, Ivybridge and on
    Haswell laptops. The CPU offlining cost on these machines is
    reduced from more than 100ms to less than 5ms. The system
    suspend time is reduced by 2.3s on the servers.
    
    Borislav and Prarit also helped to test the patch on an AMD
    machine and a few systems of various sizes and configurations
    (multi-socket, single-socket, no hyper threading, etc.). No
    issues were seen.
    Tested-by: default avatarPrarit Bhargava <prarit@redhat.com>
    Signed-off-by: default avatarLan Tianyu <tianyu.lan@intel.com>
    Acked-by: default avatarBorislav Petkov <bp@suse.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: srostedt@redhat.com
    Cc: toshi.kani@hp.com
    Cc: imammedo@redhat.com
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: http://lkml.kernel.org/r/1409039025-32310-1-git-send-email-tianyu.lan@intel.com
    [ Improved a few minor details in the code, cleaned up the changelog. ]
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    2ed53c0d
smpboot.c 35.4 KB