metric_events & src: add metric for VcpuShutdown.

Add a metric to report VcpuShutdowns.

BUG=b:340719884
TEST=builds

Change-Id: I70115458167fe487696fdc64657c745a93e4c36a
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5585672
Commit-Queue: Noah Gold <nkgold@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
This commit is contained in:
Noah Gold 2024-05-31 01:25:16 +00:00 committed by crosvm LUCI
parent 220731b686
commit c8194324ab
5 changed files with 20 additions and 1 deletions

1
Cargo.lock generated
View file

@ -805,6 +805,7 @@ dependencies = [
"log",
"merge",
"metrics",
"metrics_events",
"minijail",
"net_util",
"once_cell",

View file

@ -462,6 +462,7 @@ libcras = "*"
log = { version = "0", features = ["release_max_level_debug"]}
merge = "0.1.0"
metrics = { path = "metrics" }
metrics_events = { path = "metrics_events" }
net_util = { path = "net_util" }
once_cell = "1.7"
protobuf = { version = "3.2", optional = true }

View file

@ -49,6 +49,7 @@ pub enum MetricEventType {
VirtioWakeup {
virtio_id: u32,
},
VcpuShutdownError,
Other(i64),
Vendor(VendorMetricEventType),
}

View file

@ -35,6 +35,7 @@ use hypervisor::IoParams;
use hypervisor::VcpuExit;
use hypervisor::VcpuSignalHandle;
use libc::c_int;
use metrics_events::MetricEventType;
#[cfg(target_arch = "riscv64")]
use riscv64::Riscv64 as Arch;
#[cfg(target_arch = "x86_64")]
@ -389,7 +390,15 @@ where
}
Ok(VcpuExit::IrqWindowOpen) => {}
Ok(VcpuExit::Hlt) => irq_chip.halted(cpu_id),
Ok(VcpuExit::Shutdown(_)) => return ExitState::Stop,
Ok(VcpuExit::Shutdown(reason)) => {
if let Err(e) = reason {
metrics::log_descriptor(
MetricEventType::VcpuShutdownError,
e.get_raw_error_code() as i64,
);
}
return ExitState::Stop;
}
Ok(VcpuExit::FailEntry {
hardware_entry_failure_reason,
}) => {

View file

@ -66,6 +66,7 @@ use hypervisor::IoOperation;
use hypervisor::IoParams;
use hypervisor::VcpuExit;
use hypervisor::VcpuInitX86_64;
use metrics_events::MetricEventType;
use sync::Condvar;
use sync::Mutex;
use vm_control::VcpuControl;
@ -832,6 +833,12 @@ where
// with Shutdown. Normal reboots and shutdowns, like window close, use
// the vm event tube and VmRunMode::Exiting instead of VcpuExit::Shutdown.
Ok(VcpuExit::Shutdown(reason)) => {
if let Err(e) = reason {
metrics::log_descriptor(
MetricEventType::VcpuShutdownError,
e.get_raw_error_code() as i64,
);
}
bail_exit_code!(Exit::VcpuShutdown, "vcpu shutdown (reason: {:?})", reason)
}
Ok(VcpuExit::FailEntry {