diff options
author | JP Kobryn <jpkobryn@meta.com> | 2024-02-05 14:48:24 -0800 |
---|---|---|
committer | Facebook GitHub Bot <facebook-github-bot@users.noreply.github.com> | 2024-02-05 14:48:24 -0800 |
commit | 85bb8962a5943845952caf8a524092bb51bc52d6 (patch) | |
tree | 67f4ef2b7b035ee59b3cc1947bb0c7332eae82d3 | |
parent | ec61b3b443ab4defbda8dd1b8800aed919def635 (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.rs | 6 | ||||
-rw-r--r-- | below/model/src/system.rs | 36 | ||||
-rw-r--r-- | below/render/src/default_configs.rs | 14 |
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()), } } } |