697: opt-in jemalloc r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
bors[bot] 2019-01-28 12:52:45 +00:00
commit ebb19bb95c
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 all communication between the server and the client, use
`RUST_LOG=gen_lsp_server=debug` (this will print quite a bit of stuff). `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`. To run tests, just `cargo test`.

View file

@ -14,8 +14,9 @@ fst = "0.3.1"
rustc-hash = "1.0" rustc-hash = "1.0"
parking_lot = "0.7.0" parking_lot = "0.7.0"
unicase = "2.2.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_syntax = { path = "../ra_syntax" }
ra_ide_api_light = { path = "../ra_ide_api_light" } ra_ide_api_light = { path = "../ra_ide_api_light" }
@ -26,3 +27,6 @@ test_utils = { path = "../test_utils" }
[dev-dependencies] [dev-dependencies]
insta = "0.5.1" 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 // We use jemalloc mainly to get heap usage statistics, actual performance
// differnece is not measures. // differnece is not measures.
#[cfg(feature = "jemalloc")]
#[global_allocator] #[global_allocator]
static ALLOC: jemallocator::Jemalloc = jemallocator::Jemalloc; static ALLOC: jemallocator::Jemalloc = jemallocator::Jemalloc;

View file

@ -133,6 +133,7 @@ struct MemoryStats {
} }
impl MemoryStats { impl MemoryStats {
#[cfg(feature = "jemalloc")]
fn current() -> MemoryStats { fn current() -> MemoryStats {
jemalloc_ctl::epoch().unwrap(); jemalloc_ctl::epoch().unwrap();
MemoryStats { MemoryStats {
@ -140,6 +141,14 @@ impl MemoryStats {
resident: Bytes(jemalloc_ctl::stats::resident().unwrap()), 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 { impl fmt::Display for MemoryStats {

View file

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