summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJP Kobryn <jpkobryn@meta.com>2024-02-05 14:48:24 -0800
committerFacebook GitHub Bot <facebook-github-bot@users.noreply.github.com>2024-02-05 14:48:24 -0800
commit85bb8962a5943845952caf8a524092bb51bc52d6 (patch)
tree67f4ef2b7b035ee59b3cc1947bb0c7332eae82d3
parentec61b3b443ab4defbda8dd1b8800aed919def635 (diff)
aggregated slabinfo
Summary: store totals of caches and size in artificial TOTAL slab entry Reviewed By: lnyng Differential Revision: D53294315 fbshipit-source-id: 2c96a64930311278d5ba5e428bce8bae1d727456
-rw-r--r--below/model/src/common_field_ids.rs6
-rw-r--r--below/model/src/system.rs36
-rw-r--r--below/render/src/default_configs.rs14
3 files changed, 50 insertions, 6 deletions
diff --git a/below/model/src/common_field_ids.rs b/below/model/src/common_field_ids.rs
index c9a2b14b..28b53314 100644
--- a/below/model/src/common_field_ids.rs
+++ b/below/model/src/common_field_ids.rs
@@ -23,7 +23,7 @@
///
/// This list also servers as documentation for available field ids that could
/// be used in other below crates. A test ensures that this list is up-to-date.
-pub const COMMON_MODEL_FIELD_IDS: [&str; 416] = [
+pub const COMMON_MODEL_FIELD_IDS: [&str; 420] = [
"system.hostname",
"system.kernel_version",
"system.os_release",
@@ -109,6 +109,10 @@ pub const COMMON_MODEL_FIELD_IDS: [&str; 416] = [
"system.slab.<key>.obj_size",
"system.slab.<key>.obj_per_slab",
"system.slab.<key>.num_slabs",
+ "system.slab.<key>.active_caches",
+ "system.slab.<key>.num_caches",
+ "system.slab.<key>.active_size",
+ "system.slab.<key>.total_size",
"system.disks.<key>.name",
"system.disks.<key>.disk_usage",
"system.disks.<key>.partition_size",
diff --git a/below/model/src/system.rs b/below/model/src/system.rs
index 04b75e7d..3cd25a32 100644
--- a/below/model/src/system.rs
+++ b/below/model/src/system.rs
@@ -80,11 +80,31 @@ impl SystemModel {
let vm = last
.map(|(last, duration)| VmModel::new(&last.vmstat, &sample.vmstat, duration))
.unwrap_or_default();
- let slab = sample
+
+ let mut slab = sample
.slabinfo
.iter()
.map(|(name, slab_info)| (name.to_owned(), SingleSlabModel::new(slab_info)))
- .collect::<_>();
+ .collect::<BTreeMap<String, SingleSlabModel>>();
+
+ let slab_total = slab.iter().fold(
+ SingleSlabModel {
+ name: Some(String::from("TOTAL")),
+ ..Default::default()
+ },
+ |mut acc, (_, slabinfo)| {
+ acc.active_objs = opt_add(acc.active_objs, slabinfo.active_objs);
+ acc.num_objs = opt_add(acc.num_objs, slabinfo.num_objs);
+ acc.num_slabs = opt_add(acc.num_slabs, slabinfo.num_slabs);
+ acc.active_caches = opt_add(acc.active_caches, slabinfo.active_caches);
+ acc.num_caches = opt_add(acc.num_caches, slabinfo.num_caches);
+ acc.active_size = opt_add(acc.active_size, slabinfo.active_size);
+ acc.total_size = opt_add(acc.total_size, slabinfo.total_size);
+ acc
+ },
+ );
+ slab.insert(String::from("TOTAL"), slab_total);
+
let mut disks: BTreeMap<String, SingleDiskModel> = BTreeMap::new();
sample.disks.iter().for_each(|(disk_name, end_disk_stat)| {
disks.insert(
@@ -409,6 +429,10 @@ pub struct SingleSlabModel {
pub obj_size: Option<u64>,
pub obj_per_slab: Option<u64>,
pub num_slabs: Option<u64>,
+ pub active_caches: Option<u64>,
+ pub num_caches: Option<u64>,
+ pub active_size: Option<u64>,
+ pub total_size: Option<u64>,
}
impl SingleSlabModel {
@@ -420,6 +444,14 @@ impl SingleSlabModel {
obj_size: slabinfo.obj_size,
obj_per_slab: slabinfo.obj_per_slab,
num_slabs: slabinfo.num_slabs,
+ active_caches: slabinfo.active_objs.map(
+ |active_objs| {
+ if active_objs > 0 { 1 } else { 0 }
+ },
+ ),
+ num_caches: Some(1),
+ active_size: opt_multiply(slabinfo.obj_size, slabinfo.active_objs),
+ total_size: opt_multiply(slabinfo.obj_size, slabinfo.num_objs),
}
}
}
diff --git a/below/render/src/default_configs.rs b/below/render/src/default_configs.rs
index f825998f..1942e0d1 100644
--- a/below/render/src/default_configs.rs
+++ b/below/render/src/default_configs.rs
@@ -1324,11 +1324,15 @@ impl HasRenderConfig for model::SingleSlabModel {
let rc = RenderConfigBuilder::new();
match field_id {
Name => rc.title("Name").width(25),
- ActiveObjs => rc.title("Active"),
- NumObjs => rc.title("Objs"),
- ObjSize => rc.title("Size").format(ReadableSize),
+ ActiveObjs => rc.title("ActiveObjs"),
+ NumObjs => rc.title("TotalObjs"),
+ ObjSize => rc.title("ObjSize").format(ReadableSize),
ObjPerSlab => rc.title("Obj/Slab"),
NumSlabs => rc.title("Slabs"),
+ ActiveCaches => rc.title("ActiveCaches"),
+ NumCaches => rc.title("TotalCaches"),
+ ActiveSize => rc.title("ActiveSize").format(ReadableSize),
+ TotalSize => rc.title("TotalSize").format(ReadableSize),
}
}
}
@@ -1346,6 +1350,10 @@ impl HasRenderConfigForDump for model::SingleSlabModel {
ObjSize => Some(counter()),
ObjPerSlab => Some(counter()),
NumSlabs => Some(counter()),
+ ActiveCaches => Some(counter()),
+ NumCaches => Some(counter()),
+ ActiveSize => Some(counter()),
+ TotalSize => Some(counter()),
}
}
}