• Martin Schwidefsky's avatar
    s390/vtime: correct scaled cputime for SMT · 61cc3790
    Martin Schwidefsky authored
    The scaled cputime is supposed to be derived from the normal per-thread
    cputime by dividing it with the average thread density in the last interval.
    
    The calculation of the scaling values for the average thread density is
    incorrect. The current, incorrect calculation:
    
        Ci = cycle count with i active threads
        T = unscaled cputime, sT = scaled cputime
        sT = T * (C1 + C2 + ... + Cn) / (1*C1 + 2*C2 + ... + n*Cn)
    
    The calculation happens to yield the correct numbers for the simple cases
    with only one Ci value not zero. But for cases with multiple Ci values not
    zero it fails. E.g. on a SMT-2 system with one thread active half the time
    and two threads active for the other half of the time it fails, the scaling
    factor should be 3/4 but the formula gives 2/3.
    
    The correct formula is
    
        sT = T * (C1/1 + C2/2 + ... + Cn/n) / (C1 + C2 + ... + Cn)
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    61cc3790
vtime.c 10.3 KB