mirror of
https://github.com/ClementTsang/bottom.git
synced 2025-07-22 21:24:49 +02:00
refactor: Clean up memory collection code (#1045)
This commit is contained in:
parent
3510563638
commit
8489c4bc10
@ -52,56 +52,57 @@ pub(crate) fn get_swap_data(sys: &System) -> Option<MemHarvest> {
|
|||||||
#[cfg(feature = "zfs")]
|
#[cfg(feature = "zfs")]
|
||||||
pub(crate) fn get_arc_data() -> Option<MemHarvest> {
|
pub(crate) fn get_arc_data() -> Option<MemHarvest> {
|
||||||
let (mem_total_in_kib, mem_used_in_kib) = {
|
let (mem_total_in_kib, mem_used_in_kib) = {
|
||||||
#[cfg(target_os = "linux")]
|
cfg_if::cfg_if! {
|
||||||
{
|
if #[cfg(target_os = "linux")]
|
||||||
// TODO: [OPT] is this efficient?
|
{
|
||||||
use std::fs::read_to_string;
|
// TODO: [OPT] is this efficient?
|
||||||
if let Ok(arcinfo) = read_to_string("/proc/spl/kstat/zfs/arcstats") {
|
use std::fs::read_to_string;
|
||||||
let mut mem_arc = 0;
|
if let Ok(arc_stats) = read_to_string("/proc/spl/kstat/zfs/arcstats") {
|
||||||
let mut mem_total = 0;
|
let mut mem_arc = 0;
|
||||||
let mut zfs_keys_read: u8 = 0;
|
let mut mem_total = 0;
|
||||||
const ZFS_KEYS_NEEDED: u8 = 2;
|
let mut zfs_keys_read: u8 = 0;
|
||||||
|
const ZFS_KEYS_NEEDED: u8 = 2;
|
||||||
|
|
||||||
for line in arcinfo.lines() {
|
for line in arc_stats.lines() {
|
||||||
if let Some((label, value)) = line.split_once(' ') {
|
if let Some((label, value)) = line.split_once(' ') {
|
||||||
let to_write = match label {
|
let to_write = match label {
|
||||||
"size" => &mut mem_arc,
|
"size" => &mut mem_arc,
|
||||||
"memory_all_bytes" => &mut mem_total,
|
"memory_all_bytes" => &mut mem_total,
|
||||||
_ => {
|
_ => {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Some((_type, number)) = value.trim_start().rsplit_once(' ') {
|
if let Some((_type, number)) = value.trim_start().rsplit_once(' ') {
|
||||||
// Parse the value, remember it's in bytes!
|
// Parse the value, remember it's in bytes!
|
||||||
if let Ok(number) = number.parse::<u64>() {
|
if let Ok(number) = number.parse::<u64>() {
|
||||||
*to_write = number;
|
*to_write = number;
|
||||||
// We only need a few keys, so we can bail early.
|
// We only need a few keys, so we can bail early.
|
||||||
zfs_keys_read += 1;
|
zfs_keys_read += 1;
|
||||||
if zfs_keys_read == ZFS_KEYS_NEEDED {
|
if zfs_keys_read == ZFS_KEYS_NEEDED {
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
(mem_total / 1024, mem_arc / 1024)
|
||||||
|
} else {
|
||||||
|
(0, 0)
|
||||||
}
|
}
|
||||||
(mem_total / 1024, mem_arc / 1024)
|
} else if #[cfg(target_os = "freebsd")] {
|
||||||
} else {
|
use sysctl::Sysctl;
|
||||||
(0, 0)
|
if let (Ok(mem_arc_value), Ok(mem_sys_value)) = (
|
||||||
}
|
sysctl::Ctl::new("kstat.zfs.misc.arcstats.size"),
|
||||||
}
|
sysctl::Ctl::new("hw.physmem"),
|
||||||
|
) {
|
||||||
#[cfg(target_os = "freebsd")]
|
if let (Ok(sysctl::CtlValue::U64(arc)), Ok(sysctl::CtlValue::Ulong(mem))) =
|
||||||
{
|
(mem_arc_value.value(), mem_sys_value.value())
|
||||||
use sysctl::Sysctl;
|
{
|
||||||
if let (Ok(mem_arc_value), Ok(mem_sys_value)) = (
|
(mem / 1024, arc / 1024)
|
||||||
sysctl::Ctl::new("kstat.zfs.misc.arcstats.size"),
|
} else {
|
||||||
sysctl::Ctl::new("hw.physmem"),
|
(0, 0)
|
||||||
) {
|
}
|
||||||
if let (Ok(sysctl::CtlValue::U64(arc)), Ok(sysctl::CtlValue::Ulong(mem))) =
|
|
||||||
(mem_arc_value.value(), mem_sys_value.value())
|
|
||||||
{
|
|
||||||
(mem / 1024, arc / 1024)
|
|
||||||
} else {
|
} else {
|
||||||
(0, 0)
|
(0, 0)
|
||||||
}
|
}
|
||||||
@ -109,14 +110,6 @@ pub(crate) fn get_arc_data() -> Option<MemHarvest> {
|
|||||||
(0, 0)
|
(0, 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[cfg(target_os = "macos")]
|
|
||||||
{
|
|
||||||
(0, 0)
|
|
||||||
}
|
|
||||||
#[cfg(target_os = "windows")]
|
|
||||||
{
|
|
||||||
(0, 0)
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Some(MemHarvest {
|
Some(MemHarvest {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user