From 182c126013a28f19594ff61326f1f9a2c481f1b4 Mon Sep 17 00:00:00 2001 From: Jamie Liu Date: Fri, 13 Nov 2020 18:09:15 -0800 Subject: Log task goroutine IDs in the sentry watchdog. PiperOrigin-RevId: 342373580 --- pkg/sentry/kernel/task_run.go | 5 +++++ pkg/sentry/watchdog/watchdog.go | 4 +--- 2 files changed, 6 insertions(+), 3 deletions(-) (limited to 'pkg/sentry') diff --git a/pkg/sentry/kernel/task_run.go b/pkg/sentry/kernel/task_run.go index c5858da30..3ccecf4b6 100644 --- a/pkg/sentry/kernel/task_run.go +++ b/pkg/sentry/kernel/task_run.go @@ -390,6 +390,11 @@ func (t *Task) assertTaskGoroutine() { } } +// GoroutineID returns the ID of t's task goroutine. +func (t *Task) GoroutineID() int64 { + return atomic.LoadInt64(&t.goid) +} + // waitGoroutineStoppedOrExited blocks until t's task goroutine stops or exits. func (t *Task) waitGoroutineStoppedOrExited() { t.goroutineStopped.Wait() diff --git a/pkg/sentry/watchdog/watchdog.go b/pkg/sentry/watchdog/watchdog.go index bbafb8b7f..1d1062aeb 100644 --- a/pkg/sentry/watchdog/watchdog.go +++ b/pkg/sentry/watchdog/watchdog.go @@ -336,11 +336,9 @@ func (w *Watchdog) report(offenders map[*kernel.Task]*offender, newTaskFound boo buf.WriteString(fmt.Sprintf("Sentry detected %d stuck task(s):\n", len(offenders))) for t, o := range offenders { tid := w.k.TaskSet().Root.IDOfTask(t) - buf.WriteString(fmt.Sprintf("\tTask tid: %v (%#x), entered RunSys state %v ago.\n", tid, uint64(tid), now.Sub(o.lastUpdateTime))) + buf.WriteString(fmt.Sprintf("\tTask tid: %v (goroutine %d), entered RunSys state %v ago.\n", tid, t.GoroutineID(), now.Sub(o.lastUpdateTime))) } - buf.WriteString("Search for '(*Task).run(0x..., 0x)' in the stack dump to find the offending goroutine") - // Force stack dump only if a new task is detected. w.doAction(w.TaskTimeoutAction, newTaskFound, &buf) } -- cgit v1.2.3