From dae99b66611759ba48fd164646f077d3e8515dad Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 30 Jul 2020 09:45:20 +0200 Subject: [PATCH 1/2] Drop resident from memory usage --- crates/ra_prof/src/memory_usage.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/crates/ra_prof/src/memory_usage.rs b/crates/ra_prof/src/memory_usage.rs index 745345fac01..857b513212b 100644 --- a/crates/ra_prof/src/memory_usage.rs +++ b/crates/ra_prof/src/memory_usage.rs @@ -5,7 +5,6 @@ pub struct MemoryUsage { pub allocated: Bytes, - pub resident: Bytes, } impl MemoryUsage { @@ -14,9 +13,9 @@ pub fn current() -> MemoryUsage { if #[cfg(target_os = "linux")] { // Note: This is incredibly slow. let alloc = unsafe { libc::mallinfo() }.uordblks as u32 as usize; - MemoryUsage { allocated: Bytes(alloc), resident: Bytes(0) } + MemoryUsage { allocated: Bytes(alloc) } } else { - MemoryUsage { allocated: Bytes(0), resident: Bytes(0) } + MemoryUsage { allocated: Bytes(0) } } } } @@ -24,7 +23,7 @@ pub fn current() -> MemoryUsage { impl fmt::Display for MemoryUsage { fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { - write!(fmt, "{} allocated {} resident", self.allocated, self.resident,) + write!(fmt, "{}", self.allocated) } } From afab67e69c39027fb99878751309d4050324beef Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 30 Jul 2020 09:47:16 +0200 Subject: [PATCH 2/2] Allow negative bytes Gotta be optimistic about those memory usage optimizations --- crates/ra_prof/src/memory_usage.rs | 46 +++++++++++-------- .../rust-analyzer/src/cli/analysis_stats.rs | 14 ++---- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/crates/ra_prof/src/memory_usage.rs b/crates/ra_prof/src/memory_usage.rs index 857b513212b..22b61e4a281 100644 --- a/crates/ra_prof/src/memory_usage.rs +++ b/crates/ra_prof/src/memory_usage.rs @@ -3,35 +3,43 @@ use cfg_if::cfg_if; +#[derive(Copy, Clone)] pub struct MemoryUsage { pub allocated: Bytes, } -impl MemoryUsage { - pub fn current() -> MemoryUsage { - cfg_if! { - if #[cfg(target_os = "linux")] { - // Note: This is incredibly slow. - let alloc = unsafe { libc::mallinfo() }.uordblks as u32 as usize; - MemoryUsage { allocated: Bytes(alloc) } - } else { - MemoryUsage { allocated: Bytes(0) } - } - } - } -} - impl fmt::Display for MemoryUsage { fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { write!(fmt, "{}", self.allocated) } } +impl std::ops::Sub for MemoryUsage { + type Output = MemoryUsage; + fn sub(self, rhs: MemoryUsage) -> MemoryUsage { + MemoryUsage { allocated: self.allocated - rhs.allocated } + } +} + +impl MemoryUsage { + pub fn current() -> MemoryUsage { + cfg_if! { + if #[cfg(target_os = "linux")] { + // Note: This is incredibly slow. + let alloc = unsafe { libc::mallinfo() }.uordblks as u32 as isize; + MemoryUsage { allocated: Bytes(alloc) } + } else { + MemoryUsage { allocated: Bytes(0) } + } + } + } +} + #[derive(Default, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy)] -pub struct Bytes(usize); +pub struct Bytes(isize); impl Bytes { - pub fn megabytes(self) -> usize { + pub fn megabytes(self) -> isize { self.0 / 1024 / 1024 } } @@ -41,10 +49,10 @@ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { let bytes = self.0; let mut value = bytes; let mut suffix = "b"; - if value > 4096 { + if value.abs() > 4096 { value /= 1024; suffix = "kb"; - if value > 4096 { + if value.abs() > 4096 { value /= 1024; suffix = "mb"; } @@ -55,7 +63,7 @@ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { impl std::ops::AddAssign for Bytes { fn add_assign(&mut self, x: usize) { - self.0 += x; + self.0 += x as isize; } } diff --git a/crates/rust-analyzer/src/cli/analysis_stats.rs b/crates/rust-analyzer/src/cli/analysis_stats.rs index 66d201ba66b..cf0d82b62c1 100644 --- a/crates/rust-analyzer/src/cli/analysis_stats.rs +++ b/crates/rust-analyzer/src/cli/analysis_stats.rs @@ -111,11 +111,7 @@ pub fn analysis_stats( eprintln!("Total declarations: {}", num_decls); eprintln!("Total functions: {}", funcs.len()); let item_collection_memory = ra_prof::memory_usage(); - eprintln!( - "Item Collection: {:?}, {}", - analysis_time.elapsed(), - item_collection_memory.allocated - ); + eprintln!("Item Collection: {:?}, {}", analysis_time.elapsed(), item_collection_memory); if randomize { shuffle(&mut rng, &mut funcs); @@ -140,7 +136,7 @@ pub fn analysis_stats( eprintln!( "Parallel Inference: {:?}, {}", inference_time.elapsed(), - ra_prof::memory_usage().allocated + ra_prof::memory_usage() ); } @@ -297,11 +293,7 @@ pub fn analysis_stats( let inference_time = inference_time.elapsed(); let total_memory = ra_prof::memory_usage(); - eprintln!( - "Inference: {:?}, {}", - inference_time, - total_memory.allocated - item_collection_memory.allocated - ); + eprintln!("Inference: {:?}, {}", inference_time, total_memory - item_collection_memory); let analysis_time = analysis_time.elapsed(); eprintln!("Total: {:?}, {}", analysis_time, total_memory);