Skip to content

Commit 367c50f

Browse files
NickJackolsonhcahca
authored andcommitted
s390/vtime: fix average steal time calculation
Current average steal timer calculation produces volatile and inflated values. The only user of this value is KVM so far and it uses that to decide whether or not to yield the vCPU which is seeing steal time. KVM compares average steal timer to a threshold and if the threshold is past then it does not allow CPU polling and yields it to host, else it keeps the CPU by polling. Since KVM's steal time threshold is very low by default (%10) it most likely is not effected much by the bloated average steal timer values because the operating region is pretty small. However there might be new users in the future who might rely on this number. Fix average steal timer calculation by changing the formula from: avg_steal_timer = avg_steal_timer / 2 + steal_timer; to the following: avg_steal_timer = (avg_steal_timer + steal_timer) / 2; This ensures that avg_steal_timer is actually a naive average of steal timer values. It now closely follows steal timer values but of course in a smoother manner. Fixes: 152e9b8 ("s390/vtime: steal time exponential moving average") Signed-off-by: Mete Durlu <meted@linux.ibm.com> Acked-by: Heiko Carstens <hca@linux.ibm.com> Acked-by: Christian Borntraeger <borntraeger@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
1 parent 4dc890d commit 367c50f

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

arch/s390/kernel/vtime.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,13 +210,13 @@ void vtime_flush(struct task_struct *tsk)
210210
virt_timer_expire();
211211

212212
steal = S390_lowcore.steal_timer;
213-
avg_steal = S390_lowcore.avg_steal_timer / 2;
213+
avg_steal = S390_lowcore.avg_steal_timer;
214214
if ((s64) steal > 0) {
215215
S390_lowcore.steal_timer = 0;
216216
account_steal_time(cputime_to_nsecs(steal));
217217
avg_steal += steal;
218218
}
219-
S390_lowcore.avg_steal_timer = avg_steal;
219+
S390_lowcore.avg_steal_timer = avg_steal / 2;
220220
}
221221

222222
static u64 vtime_delta(void)

0 commit comments

Comments
 (0)