opt-in jemalloc

This commit is contained in:
Aleksey Kladov 2019-01-28 15:52:21 +03:00
parent 3432c4366f
commit 2ee08098a6
5 changed files with 23 additions and 3 deletions

View file

@ -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`.

View file

@ -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" ]

View file

@ -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;

View file

@ -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 {

View file

@ -34,3 +34,6 @@ ra_vfs = { path = "../ra_vfs" }
[dev-dependencies]
tempfile = "3"
test_utils = { path = "../test_utils" }
[features]
jemalloc = [ "ra_ide_api/jemalloc" ]