From 2ee08098a6315aaab07f14c67db024ee0e95af3e Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Mon, 28 Jan 2019 15:52:21 +0300 Subject: [PATCH] opt-in jemalloc --- ARCHITECTURE.md | 5 ++++- crates/ra_ide_api/Cargo.toml | 8 ++++++-- crates/ra_ide_api/src/lib.rs | 1 + crates/ra_ide_api/src/status.rs | 9 +++++++++ crates/ra_lsp_server/Cargo.toml | 3 +++ 5 files changed, 23 insertions(+), 3 deletions(-) diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 2c0da06651..cb8f01f788 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -184,7 +184,10 @@ To see logs from the language server, set `RUST_LOG=info` env variable. To see all communication between the server and the client, use `RUST_LOG=gen_lsp_server=debug` (this will print quite a bit of stuff). -There's `Status of rust-analyzer` command which prints common high-level debug info. +There's `rust-analyzer: status` command which prints common high-level debug +info. In particular, it prints info about memory usage of various data +structures, and, if compiled with jemalloc support (`cargo install --features +jemalloc`), the summary statistic about the heap. To run tests, just `cargo test`. diff --git a/crates/ra_ide_api/Cargo.toml b/crates/ra_ide_api/Cargo.toml index ad9dd20882..908899129f 100644 --- a/crates/ra_ide_api/Cargo.toml +++ b/crates/ra_ide_api/Cargo.toml @@ -14,8 +14,9 @@ fst = "0.3.1" rustc-hash = "1.0" parking_lot = "0.7.0" unicase = "2.2.0" -jemallocator = "0.1.9" -jemalloc-ctl = "0.2.0" + +jemallocator = { version = "0.1.9", optional = true } +jemalloc-ctl = { version = "0.2.0", optional = true } ra_syntax = { path = "../ra_syntax" } ra_ide_api_light = { path = "../ra_ide_api_light" } @@ -26,3 +27,6 @@ test_utils = { path = "../test_utils" } [dev-dependencies] insta = "0.5.1" + +[features] +jemalloc = [ "jemallocator", "jemalloc-ctl" ] diff --git a/crates/ra_ide_api/src/lib.rs b/crates/ra_ide_api/src/lib.rs index dc531e068d..51947e4ccd 100644 --- a/crates/ra_ide_api/src/lib.rs +++ b/crates/ra_ide_api/src/lib.rs @@ -61,6 +61,7 @@ pub use ra_db::{ // We use jemalloc mainly to get heap usage statistics, actual performance // differnece is not measures. +#[cfg(feature = "jemalloc")] #[global_allocator] static ALLOC: jemallocator::Jemalloc = jemallocator::Jemalloc; diff --git a/crates/ra_ide_api/src/status.rs b/crates/ra_ide_api/src/status.rs index c3e5745d5e..bd355dd781 100644 --- a/crates/ra_ide_api/src/status.rs +++ b/crates/ra_ide_api/src/status.rs @@ -133,6 +133,7 @@ struct MemoryStats { } impl MemoryStats { + #[cfg(feature = "jemalloc")] fn current() -> MemoryStats { jemalloc_ctl::epoch().unwrap(); MemoryStats { @@ -140,6 +141,14 @@ impl MemoryStats { resident: Bytes(jemalloc_ctl::stats::resident().unwrap()), } } + + #[cfg(not(feature = "jemalloc"))] + fn current() -> MemoryStats { + MemoryStats { + allocated: Bytes(0), + resident: Bytes(0), + } + } } impl fmt::Display for MemoryStats { diff --git a/crates/ra_lsp_server/Cargo.toml b/crates/ra_lsp_server/Cargo.toml index 160d2f672a..bb92747f2f 100644 --- a/crates/ra_lsp_server/Cargo.toml +++ b/crates/ra_lsp_server/Cargo.toml @@ -34,3 +34,6 @@ ra_vfs = { path = "../ra_vfs" } [dev-dependencies] tempfile = "3" test_utils = { path = "../test_utils" } + +[features] +jemalloc = [ "ra_ide_api/jemalloc" ]