Skip to content

Commit 7662108

Browse files
committed
virtio-balloon: Add metrics for hinting/reporting
Add metrics to track free page hinting and reporting. For both devices track the number of ranges reported, the number of errors encountered while freeing and the total amount of memory freed. Signed-off-by: Jack Thomson <jackabt@amazon.com>
1 parent deb145b commit 7662108

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

src/vmm/src/devices/virtio/balloon/device.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,8 +541,12 @@ impl Balloon {
541541
continue;
542542
}
543543

544+
METRICS.free_page_hint_count.inc();
544545
if let Err(err) = mem.discard_range(desc.addr, desc.len as usize) {
546+
METRICS.free_page_hint_fails.inc();
545547
error!("balloon hinting: failed to remove range: {err:?}");
548+
} else {
549+
METRICS.free_page_hint_freed.add(desc.len as u64);
546550
}
547551
}
548552

@@ -575,8 +579,12 @@ impl Balloon {
575579

576580
let mut last_desc = Some(head);
577581
while let Some(desc) = last_desc {
582+
METRICS.free_page_report_count.inc();
578583
if let Err(err) = mem.discard_range(desc.addr, desc.len as usize) {
584+
METRICS.free_page_report_fails.inc();
579585
error!("balloon: failed to remove range: {err:?}");
586+
} else {
587+
METRICS.free_page_report_freed.add(desc.len as u64);
580588
}
581589
last_desc = desc.next_descriptor();
582590
}

src/vmm/src/devices/virtio/balloon/metrics.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,18 @@ pub(super) struct BalloonDeviceMetrics {
6363
pub deflate_count: SharedIncMetric,
6464
/// Number of times when handling events on a balloon device failed.
6565
pub event_fails: SharedIncMetric,
66+
/// Number of times when free page repoting was triggered
67+
pub free_page_report_count: SharedIncMetric,
68+
/// Total memory freed by the reporting driver
69+
pub free_page_report_freed: SharedIncMetric,
70+
/// Number of errors occurred while reporting
71+
pub free_page_report_fails: SharedIncMetric,
72+
/// Number of times when free page hinting was triggered
73+
pub free_page_hint_count: SharedIncMetric,
74+
/// Total memory freed by the hinting driver
75+
pub free_page_hint_freed: SharedIncMetric,
76+
/// Number of errors occurred while hinting
77+
pub free_page_hint_fails: SharedIncMetric,
6678
}
6779
impl BalloonDeviceMetrics {
6880
/// Const default construction.
@@ -74,6 +86,12 @@ impl BalloonDeviceMetrics {
7486
stats_update_fails: SharedIncMetric::new(),
7587
deflate_count: SharedIncMetric::new(),
7688
event_fails: SharedIncMetric::new(),
89+
free_page_report_count: SharedIncMetric::new(),
90+
free_page_report_freed: SharedIncMetric::new(),
91+
free_page_report_fails: SharedIncMetric::new(),
92+
free_page_hint_count: SharedIncMetric::new(),
93+
free_page_hint_freed: SharedIncMetric::new(),
94+
free_page_hint_fails: SharedIncMetric::new(),
7795
}
7896
}
7997
}
@@ -95,4 +113,4 @@ pub mod tests {
95113
balloon_metrics.inflate_count.inc();
96114
assert_eq!(balloon_metrics.inflate_count.count(), 1);
97115
}
98-
}
116+

tests/host_tools/fcmetrics.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,12 @@ def validate_fc_metrics(metrics):
140140
"stats_update_fails",
141141
"deflate_count",
142142
"event_fails",
143+
"free_page_report_count",
144+
"free_page_report_freed",
145+
"free_page_report_fails",
146+
"free_page_hint_count",
147+
"free_page_hint_freed",
148+
"free_page_hint_fails",
143149
],
144150
"block": block_metrics,
145151
"deprecated_api": [

0 commit comments

Comments
 (0)