• F
    cputime: Fix jiffies based cputime assumption on steal accounting · dee08a72
    Frederic Weisbecker 提交于
    The steal guest time accounting code assumes that cputime_t is based on
    jiffies. So when CONFIG_NO_HZ_FULL=y, which implies that cputime_t
    is based on nsecs, steal_account_process_tick() passes the delta in
    jiffies to account_steal_time() which then accounts it as if it's a
    value in nsecs.
    
    As a result, accounting 1 second of steal time (with HZ=100 that would
    be 100 jiffies) is spuriously accounted as 100 nsecs.
    
    As such /proc/stat may report 0 values of steal time even when two
    guests have run concurrently for a few seconds on the same host and
    same CPU.
    
    In order to fix this, lets convert the nsecs based steal delta to
    cputime instead of jiffies by using the right conversion API.
    
    Given that the steal time is stored in cputime_t and this type can have
    a smaller granularity than nsecs, we only account the rounded converted
    value and leave the remaining nsecs for the next deltas.
    Reported-by: NHuiqingding <huding@redhat.com>
    Reported-by: NMarcelo Tosatti <mtosatti@redhat.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Marcelo Tosatti <mtosatti@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Acked-by: NRik van Riel <riel@redhat.com>
    Signed-off-by: NFrederic Weisbecker <fweisbec@gmail.com>
    dee08a72
cputime.c 21.4 KB