diff options
author | Jamie Liu <jamieliu@google.com> | 2018-06-14 11:34:15 -0700 |
---|---|---|
committer | Shentubot <shentubot@google.com> | 2018-06-14 11:35:11 -0700 |
commit | 657db692b2241d89a324acc246b3c5230d8bd6ac (patch) | |
tree | fe4ab2219dfe26081f97d35920b6db7eacd9a216 | |
parent | d71f5ef6885b9c241018308944e4b2e4b4857029 (diff) |
Ignore expiration count in kernelCPUClockListener.Notify.
PiperOrigin-RevId: 200590832
Change-Id: I35b817ecccc9414a742dee4815dfc67d0c7d0496
-rw-r--r-- | pkg/sentry/kernel/kernel.go | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/pkg/sentry/kernel/kernel.go b/pkg/sentry/kernel/kernel.go index 536461bbd..a17148af1 100644 --- a/pkg/sentry/kernel/kernel.go +++ b/pkg/sentry/kernel/kernel.go @@ -960,7 +960,13 @@ type kernelCPUClockListener struct { // Notify implements ktime.TimerListener.Notify. func (l kernelCPUClockListener) Notify(exp uint64) { - atomic.AddUint64(&l.k.cpuClock, exp) + // Only increment cpuClock by 1 regardless of the number of expirations. + // This approximately compensates for cases where thread throttling or bad + // Go runtime scheduling prevents the cpuClockTicker goroutine, and + // presumably task goroutines as well, from executing for a long period of + // time. It's also necessary to prevent CPU clocks from seeing large + // discontinuous jumps. + atomic.AddUint64(&l.k.cpuClock, 1) } // Destroy implements ktime.TimerListener.Destroy. |