diff options
author | Ivan Kozik <[email protected]> | 2020-07-14 01:12:49 +0100 |
---|---|---|
committer | Ivan Kozik <[email protected]> | 2020-07-14 21:57:51 +0100 |
commit | 6710856c1098f71168c47451af53bac9a33b49dd (patch) | |
tree | 46a514e5fd86dd33f16f9abca6ab14f5063c9696 | |
parent | 46d4487b8900324fc6a523c8b6ebe036d28fd0fb (diff) |
Add opt-in mimalloc feature
-rw-r--r-- | Cargo.lock | 28 | ||||
-rw-r--r-- | crates/ra_prof/Cargo.toml | 2 | ||||
-rw-r--r-- | crates/ra_prof/src/lib.rs | 4 | ||||
-rw-r--r-- | crates/rust-analyzer/Cargo.toml | 1 | ||||
-rw-r--r-- | xtask/src/install.rs | 16 | ||||
-rw-r--r-- | xtask/src/main.rs | 15 |
6 files changed, 60 insertions, 6 deletions
diff --git a/Cargo.lock b/Cargo.lock index c16cf4bc8..a05c62e45 100644 --- a/Cargo.lock +++ b/Cargo.lock | |||
@@ -215,6 +215,15 @@ dependencies = [ | |||
215 | ] | 215 | ] |
216 | 216 | ||
217 | [[package]] | 217 | [[package]] |
218 | name = "cmake" | ||
219 | version = "0.1.44" | ||
220 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
221 | checksum = "0e56268c17a6248366d66d4a47a3381369d068cce8409bb1716ed77ea32163bb" | ||
222 | dependencies = [ | ||
223 | "cc", | ||
224 | ] | ||
225 | |||
226 | [[package]] | ||
218 | name = "console" | 227 | name = "console" |
219 | version = "0.11.3" | 228 | version = "0.11.3" |
220 | source = "registry+https://github.com/rust-lang/crates.io-index" | 229 | source = "registry+https://github.com/rust-lang/crates.io-index" |
@@ -675,6 +684,15 @@ dependencies = [ | |||
675 | ] | 684 | ] |
676 | 685 | ||
677 | [[package]] | 686 | [[package]] |
687 | name = "libmimalloc-sys" | ||
688 | version = "0.1.15" | ||
689 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
690 | checksum = "a27252ec1d0c4e0dd6142cbc572da50b363ab56fc334f7aa8fadf295b2e24e74" | ||
691 | dependencies = [ | ||
692 | "cmake", | ||
693 | ] | ||
694 | |||
695 | [[package]] | ||
678 | name = "linked-hash-map" | 696 | name = "linked-hash-map" |
679 | version = "0.5.3" | 697 | version = "0.5.3" |
680 | source = "registry+https://github.com/rust-lang/crates.io-index" | 698 | source = "registry+https://github.com/rust-lang/crates.io-index" |
@@ -771,6 +789,15 @@ dependencies = [ | |||
771 | ] | 789 | ] |
772 | 790 | ||
773 | [[package]] | 791 | [[package]] |
792 | name = "mimalloc" | ||
793 | version = "0.1.19" | ||
794 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
795 | checksum = "6c52de2069999f01bd26436564dbe7de3a87898feeb7a0d0ff9eb20a05bb7ca0" | ||
796 | dependencies = [ | ||
797 | "libmimalloc-sys", | ||
798 | ] | ||
799 | |||
800 | [[package]] | ||
774 | name = "miniz_oxide" | 801 | name = "miniz_oxide" |
775 | version = "0.4.0" | 802 | version = "0.4.0" |
776 | source = "registry+https://github.com/rust-lang/crates.io-index" | 803 | source = "registry+https://github.com/rust-lang/crates.io-index" |
@@ -1248,6 +1275,7 @@ dependencies = [ | |||
1248 | "backtrace", | 1275 | "backtrace", |
1249 | "jemalloc-ctl", | 1276 | "jemalloc-ctl", |
1250 | "jemallocator", | 1277 | "jemallocator", |
1278 | "mimalloc", | ||
1251 | "once_cell", | 1279 | "once_cell", |
1252 | "ra_arena", | 1280 | "ra_arena", |
1253 | ] | 1281 | ] |
diff --git a/crates/ra_prof/Cargo.toml b/crates/ra_prof/Cargo.toml index eabfcebb0..3cd8481ea 100644 --- a/crates/ra_prof/Cargo.toml +++ b/crates/ra_prof/Cargo.toml | |||
@@ -12,6 +12,7 @@ doctest = false | |||
12 | ra_arena = { path = "../ra_arena" } | 12 | ra_arena = { path = "../ra_arena" } |
13 | once_cell = "1.3.1" | 13 | once_cell = "1.3.1" |
14 | backtrace = { version = "0.3.44", optional = true } | 14 | backtrace = { version = "0.3.44", optional = true } |
15 | mimalloc = { version = "0.1.19", default-features = false, optional = true } | ||
15 | 16 | ||
16 | [target.'cfg(not(target_env = "msvc"))'.dependencies] | 17 | [target.'cfg(not(target_env = "msvc"))'.dependencies] |
17 | jemallocator = { version = "0.3.2", optional = true } | 18 | jemallocator = { version = "0.3.2", optional = true } |
@@ -24,4 +25,5 @@ cpu_profiler = [] | |||
24 | # Uncomment to enable for the whole crate graph | 25 | # Uncomment to enable for the whole crate graph |
25 | # default = [ "backtrace" ] | 26 | # default = [ "backtrace" ] |
26 | # default = [ "jemalloc" ] | 27 | # default = [ "jemalloc" ] |
28 | # default = [ "mimalloc" ] | ||
27 | # default = [ "cpu_profiler" ] | 29 | # default = [ "cpu_profiler" ] |
diff --git a/crates/ra_prof/src/lib.rs b/crates/ra_prof/src/lib.rs index 7163a8424..b54531b4e 100644 --- a/crates/ra_prof/src/lib.rs +++ b/crates/ra_prof/src/lib.rs | |||
@@ -19,6 +19,10 @@ pub use crate::{ | |||
19 | #[global_allocator] | 19 | #[global_allocator] |
20 | static ALLOC: jemallocator::Jemalloc = jemallocator::Jemalloc; | 20 | static ALLOC: jemallocator::Jemalloc = jemallocator::Jemalloc; |
21 | 21 | ||
22 | #[cfg(all(feature = "mimalloc"))] | ||
23 | #[global_allocator] | ||
24 | static ALLOC: mimalloc::MiMalloc = mimalloc::MiMalloc; | ||
25 | |||
22 | /// Prints backtrace to stderr, useful for debugging. | 26 | /// Prints backtrace to stderr, useful for debugging. |
23 | #[cfg(feature = "backtrace")] | 27 | #[cfg(feature = "backtrace")] |
24 | pub fn print_backtrace() { | 28 | pub fn print_backtrace() { |
diff --git a/crates/rust-analyzer/Cargo.toml b/crates/rust-analyzer/Cargo.toml index c02f72517..5074740cc 100644 --- a/crates/rust-analyzer/Cargo.toml +++ b/crates/rust-analyzer/Cargo.toml | |||
@@ -65,3 +65,4 @@ tt = { path = "../ra_tt", package = "ra_tt" } | |||
65 | 65 | ||
66 | [features] | 66 | [features] |
67 | jemalloc = [ "ra_prof/jemalloc" ] | 67 | jemalloc = [ "ra_prof/jemalloc" ] |
68 | mimalloc = [ "ra_prof/mimalloc" ] | ||
diff --git a/xtask/src/install.rs b/xtask/src/install.rs index 9ba77a3aa..a0dc0c9c2 100644 --- a/xtask/src/install.rs +++ b/xtask/src/install.rs | |||
@@ -19,7 +19,13 @@ pub enum ClientOpt { | |||
19 | } | 19 | } |
20 | 20 | ||
21 | pub struct ServerOpt { | 21 | pub struct ServerOpt { |
22 | pub jemalloc: bool, | 22 | pub malloc: Malloc, |
23 | } | ||
24 | |||
25 | pub enum Malloc { | ||
26 | System, | ||
27 | Jemalloc, | ||
28 | Mimalloc, | ||
23 | } | 29 | } |
24 | 30 | ||
25 | impl InstallCmd { | 31 | impl InstallCmd { |
@@ -130,8 +136,12 @@ fn install_server(opts: ServerOpt) -> Result<()> { | |||
130 | ) | 136 | ) |
131 | } | 137 | } |
132 | 138 | ||
133 | let jemalloc = if opts.jemalloc { "--features jemalloc" } else { "" }; | 139 | let malloc_feature = match opts.malloc { |
134 | let res = run!("cargo install --path crates/rust-analyzer --locked --force {}", jemalloc); | 140 | Malloc::System => "", |
141 | Malloc::Jemalloc => "--features jemalloc", | ||
142 | Malloc::Mimalloc => "--features mimalloc", | ||
143 | }; | ||
144 | let res = run!("cargo install --path crates/rust-analyzer --locked --force {}", malloc_feature); | ||
135 | 145 | ||
136 | if res.is_err() && old_rust { | 146 | if res.is_err() && old_rust { |
137 | eprintln!( | 147 | eprintln!( |
diff --git a/xtask/src/main.rs b/xtask/src/main.rs index f447613d4..399ff7204 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs | |||
@@ -14,7 +14,7 @@ use pico_args::Arguments; | |||
14 | use xtask::{ | 14 | use xtask::{ |
15 | codegen::{self, Mode}, | 15 | codegen::{self, Mode}, |
16 | dist::run_dist, | 16 | dist::run_dist, |
17 | install::{ClientOpt, InstallCmd, ServerOpt}, | 17 | install::{ClientOpt, InstallCmd, Malloc, ServerOpt}, |
18 | not_bash::pushd, | 18 | not_bash::pushd, |
19 | pre_commit, project_root, | 19 | pre_commit, project_root, |
20 | release::{PromoteCmd, ReleaseCmd}, | 20 | release::{PromoteCmd, ReleaseCmd}, |
@@ -46,6 +46,7 @@ FLAGS: | |||
46 | --client-code Install only VS Code plugin | 46 | --client-code Install only VS Code plugin |
47 | --server Install only the language server | 47 | --server Install only the language server |
48 | --jemalloc Use jemalloc for server | 48 | --jemalloc Use jemalloc for server |
49 | --mimalloc Use mimalloc for server | ||
49 | -h, --help Prints help information | 50 | -h, --help Prints help information |
50 | " | 51 | " |
51 | ); | 52 | ); |
@@ -61,13 +62,21 @@ FLAGS: | |||
61 | return Ok(()); | 62 | return Ok(()); |
62 | } | 63 | } |
63 | 64 | ||
64 | let jemalloc = args.contains("--jemalloc"); | 65 | let malloc = match (args.contains("--jemalloc"), args.contains("--mimalloc")) { |
66 | (false, false) => Malloc::System, | ||
67 | (true, false) => Malloc::Jemalloc, | ||
68 | (false, true) => Malloc::Mimalloc, | ||
69 | (true, true) => { | ||
70 | eprintln!("error: Cannot use both `--jemalloc` and `--mimalloc`"); | ||
71 | return Ok(()); | ||
72 | } | ||
73 | }; | ||
65 | 74 | ||
66 | args.finish()?; | 75 | args.finish()?; |
67 | 76 | ||
68 | InstallCmd { | 77 | InstallCmd { |
69 | client: if server { None } else { Some(ClientOpt::VsCode) }, | 78 | client: if server { None } else { Some(ClientOpt::VsCode) }, |
70 | server: if client_code { None } else { Some(ServerOpt { jemalloc }) }, | 79 | server: if client_code { None } else { Some(ServerOpt { malloc }) }, |
71 | } | 80 | } |
72 | .run() | 81 | .run() |
73 | } | 82 | } |