• Wanpeng Li's avatar
    sched/cputime: Resync steal time when guest & host lose sync · 03cbc732
    Wanpeng Li authored
    Commit:
    
      57430218 ("sched/cputime: Count actually elapsed irq & softirq time")
    
    ... fixed a bug but also triggered a regression:
    
    On an i5 laptop, 4 pCPUs, 4vCPUs for one full dynticks guest, there are four
    CPU hog processes(for loop) running in the guest, I hot-unplug the pCPUs
    on host one by one until there is only one left, then observe CPU utilization
    via 'top' in the guest, it shows:
    
      100% st for cpu0(housekeeping)
       75% st for other CPUs (nohz full mode)
    
    However, w/o this commit it shows the correct 75% for all four CPUs.
    
    When a guest is interrupted for a longer amount of time, missed clock ticks
    are not redelivered later. Because of that, we should not limit the amount
    of steal time accounted to the amount of time that the calling functions
    think have passed.
    
    However, the interval returned by account_other_time() is NOT rounded down
    to the nearest jiffy, while the base interval in get_vtime_delta() it is
    subtracted from is, so the max cputime limit is required to avoid underflow.
    
    This patch fixes the regression by limiting the account_other_time() from
    get_vtime_delta() to avoid underflow, and lets the other three call sites
    (in account_other_time() and steal_account_process_time()) account however
    much steal time the host told us elapsed.
    Suggested-by: default avatarRik van Riel <riel@redhat.com>
    Suggested-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: default avatarWanpeng Li <wanpeng.li@hotmail.com>
    Reviewed-by: default avatarRik van Riel <riel@redhat.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Radim Krcmar <rkrcmar@redhat.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: kvm@vger.kernel.org
    Link: http://lkml.kernel.org/r/1471399546-4069-1-git-send-email-wanpeng.li@hotmail.com
    [ Improved the changelog. ]
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    03cbc732
cputime.c 23.9 KB