diff options
Diffstat (limited to 'pkg')
-rw-r--r-- | pkg/metric/metric.go | 18 | ||||
-rw-r--r-- | pkg/sentry/fsimpl/testutil/BUILD | 1 | ||||
-rw-r--r-- | pkg/sentry/fsimpl/testutil/kernel.go | 3 | ||||
-rw-r--r-- | pkg/sentry/kernel/task_syscall.go | 1 | ||||
-rw-r--r-- | pkg/sentry/syscalls/linux/error.go | 1 | ||||
-rw-r--r-- | pkg/sentry/time/calibrated_clock.go | 1 |
6 files changed, 25 insertions, 0 deletions
diff --git a/pkg/metric/metric.go b/pkg/metric/metric.go index 2a2f0d611..c23a1b52c 100644 --- a/pkg/metric/metric.go +++ b/pkg/metric/metric.go @@ -35,6 +35,11 @@ var ( // ErrInitializationDone indicates that the caller tried to create a // new metric after initialization. ErrInitializationDone = errors.New("metric cannot be created after initialization is complete") + + // WeirdnessMetric is a metric with fields created to track the number + // of weird occurrences such as clock fallback, partial_result and + // vsyscall count. + WeirdnessMetric *Uint64Metric ) // Uint64Metric encapsulates a uint64 that represents some kind of metric to be @@ -380,3 +385,16 @@ func EmitMetricUpdate() { eventchannel.Emit(&m) } + +// CreateSentryMetrics creates the sentry metrics during kernel initialization. +func CreateSentryMetrics() { + if WeirdnessMetric != nil { + return + } + + WeirdnessMetric = MustCreateNewUint64Metric("/weirdness", true /* sync */, "Increment for weird occurrences of problems such as clock fallback, partial result and vsyscalls invoked in the sandbox", + Field{ + name: "weirdness_type", + allowedValues: []string{"fallback", "partial_result", "vsyscall_count"}, + }) +} diff --git a/pkg/sentry/fsimpl/testutil/BUILD b/pkg/sentry/fsimpl/testutil/BUILD index b3f9d1010..c766164c7 100644 --- a/pkg/sentry/fsimpl/testutil/BUILD +++ b/pkg/sentry/fsimpl/testutil/BUILD @@ -17,6 +17,7 @@ go_library( "//pkg/fspath", "//pkg/hostarch", "//pkg/memutil", + "//pkg/metric", "//pkg/sentry/fsbridge", "//pkg/sentry/fsimpl/tmpfs", "//pkg/sentry/kernel", diff --git a/pkg/sentry/fsimpl/testutil/kernel.go b/pkg/sentry/fsimpl/testutil/kernel.go index 807e4f44a..33e52ce64 100644 --- a/pkg/sentry/fsimpl/testutil/kernel.go +++ b/pkg/sentry/fsimpl/testutil/kernel.go @@ -25,6 +25,7 @@ import ( "gvisor.dev/gvisor/pkg/cpuid" "gvisor.dev/gvisor/pkg/fspath" "gvisor.dev/gvisor/pkg/memutil" + "gvisor.dev/gvisor/pkg/metric" "gvisor.dev/gvisor/pkg/sentry/fsbridge" "gvisor.dev/gvisor/pkg/sentry/fsimpl/tmpfs" "gvisor.dev/gvisor/pkg/sentry/kernel" @@ -62,6 +63,8 @@ func Boot() (*kernel.Kernel, error) { return nil, fmt.Errorf("creating platform: %v", err) } + metric.CreateSentryMetrics() + kernel.VFS2Enabled = true k := &kernel.Kernel{ Platform: plat, diff --git a/pkg/sentry/kernel/task_syscall.go b/pkg/sentry/kernel/task_syscall.go index 2c658d001..36855e3ec 100644 --- a/pkg/sentry/kernel/task_syscall.go +++ b/pkg/sentry/kernel/task_syscall.go @@ -285,6 +285,7 @@ func (*runSyscallExit) execute(t *Task) taskRunState { // task's next run state. func (t *Task) doVsyscall(addr hostarch.Addr, sysno uintptr) taskRunState { vsyscallCount.Increment() + metric.WeirdnessMetric.Increment("vsyscall_count") // Grab the caller up front, to make sure there's a sensible stack. caller := t.Arch().Native(uintptr(0)) diff --git a/pkg/sentry/syscalls/linux/error.go b/pkg/sentry/syscalls/linux/error.go index 37121186a..c668e81ac 100644 --- a/pkg/sentry/syscalls/linux/error.go +++ b/pkg/sentry/syscalls/linux/error.go @@ -39,6 +39,7 @@ var ( // takes a variadic number of arguments. func incrementPartialResultMetric() { partialResultMetric.Increment() + metric.WeirdnessMetric.Increment("partial_result") } // HandleIOErrorVFS2 handles special error cases for partial results. For some diff --git a/pkg/sentry/time/calibrated_clock.go b/pkg/sentry/time/calibrated_clock.go index f9a93115d..94f98d746 100644 --- a/pkg/sentry/time/calibrated_clock.go +++ b/pkg/sentry/time/calibrated_clock.go @@ -103,6 +103,7 @@ func (c *CalibratedClock) resetLocked(str string, v ...interface{}) { c.ready = false c.ref.Reset() fallbackMetric.Increment() + metric.WeirdnessMetric.Increment("fallback") } // updateParams updates the timekeeping parameters based on the passed |