summaryrefslogtreecommitdiffhomepage
path: root/pkg
diff options
context:
space:
mode:
authorgVisor bot <gvisor-bot@google.com>2021-04-22 23:11:45 +0000
committergVisor bot <gvisor-bot@google.com>2021-04-22 23:11:45 +0000
commit42ab6ba3f895199ebcad7093dc2f7e98133898ae (patch)
treecd28ab29468f2f8d21108df40d88d4a4377a0c76 /pkg
parentf2f926c52614691d7116ef6863aa28c385675096 (diff)
parent0a6eaed50b83a35a687699aa5e871b80605c9f46 (diff)
Merge release-20210419.0-21-g0a6eaed50 (automated)
Diffstat (limited to 'pkg')
-rw-r--r--pkg/metric/metric.go18
-rw-r--r--pkg/sentry/kernel/task_syscall.go1
-rw-r--r--pkg/sentry/syscalls/linux/error.go1
-rw-r--r--pkg/sentry/time/calibrated_clock.go1
4 files changed, 21 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/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