Skip to content

Commit a4af4ac

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 <[email protected]>
1 parent 7719656 commit a4af4ac

File tree

3 files changed

+32
-0
lines changed

3 files changed

+32
-0
lines changed

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

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

543+
METRICS.free_page_hint_count.inc();
543544
if let Err(err) = mem.discard_range(desc.addr, desc.len as usize) {
545+
METRICS.free_page_hint_fails.inc();
544546
error!("balloon hinting: failed to remove range: {err:?}");
547+
} else {
548+
METRICS.free_page_hint_freed.add(desc.len as u64);
545549
}
546550
}
547551

@@ -578,8 +582,12 @@ impl Balloon {
578582

579583
let mut last_desc = Some(head);
580584
while let Some(desc) = last_desc {
585+
METRICS.free_page_report_count.inc();
581586
if let Err(err) = mem.discard_range(desc.addr, desc.len as usize) {
587+
METRICS.free_page_report_fails.inc();
582588
error!("balloon: failed to remove range: {err:?}");
589+
} else {
590+
METRICS.free_page_report_freed.add(desc.len as u64);
583591
}
584592
last_desc = desc.next_descriptor();
585593
}

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

Lines changed: 18 additions & 0 deletions
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
}

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)