From 2587e82683d66722c18c237f3fcdfe33cabb9c8b Mon Sep 17 00:00:00 2001 From: rhysd Date: Sun, 31 Oct 2021 23:15:29 +0900 Subject: [PATCH] use mimalloc instead of system allocator MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Benchmarks: ``` group base jemalloc mimalloc mimalloc-insecure ----- ---- -------- -------- ----------------- ripgrep::node_modules 1.00 140.7±1.24ms ? ?/sec 1.91 267.8±6.46ms ? ?/sec 1.00 140.1±1.48ms ? ?/sec 1.00 140.5±1.73ms ? ?/sec ripgrep::package-lock.json 1.16 1690.3±43.28µs ? ?/sec 1.09 1587.6±29.90µs ? ?/sec 1.05 1526.9±23.70µs ? ?/sec 1.00 1455.6±36.80µs ? ?/sec ripgrep::testdata 1.18 1279.0±56.35µs ? ?/sec 1.37 1481.4±42.61µs ? ?/sec 1.00 1079.3±56.64µs ? ?/sec 1.09 1179.5±72.64µs ? ?/sec syntect::package-lock.json 1.27 704.2±35.54ms ? ?/sec 1.05 580.7±37.35ms ? ?/sec 1.04 579.8±31.08ms ? ?/sec 1.00 554.9±30.07ms ? ?/sec syntect::ripgrep-background 1.25 109.2±1.83ms ? ?/sec 1.04 90.9±0.93ms ? ?/sec 1.03 90.1±1.79ms ? ?/sec 1.00 87.2±1.06ms ? ?/sec syntect::ripgrep-large 1.09 422.4±3.94ms ? ?/sec 1.31 507.9±10.91ms ? ?/sec 1.01 392.8±4.37ms ? ?/sec 1.00 387.1±4.92ms ? ?/sec syntect::ripgrep-no-wrap 1.25 109.2±1.49ms ? ?/sec 1.04 90.9±1.07ms ? ?/sec 1.03 89.8±1.11ms ? ?/sec 1.00 87.3±1.26ms ? ?/sec syntect::ripgrep-small 1.25 109.1±1.59ms ? ?/sec 1.04 91.1±1.55ms ? ?/sec 1.02 89.8±1.28ms ? ?/sec 1.00 87.6±2.02ms ? ?/sec syntect::ripgrep-tiny 1.55 48.4±0.48ms ? ?/sec 1.13 35.3±1.75ms ? ?/sec 1.07 33.3±0.44ms ? ?/sec 1.00 31.2±0.53ms ? ?/sec ``` mimalloc without secure mode is fastest in most benchmarks --- Cargo.lock | 20 ++++++++++++++++++++ Cargo.toml | 1 + hgrep-bench/Cargo.toml | 1 + hgrep-bench/src/lib.rs | 3 +++ src/main.rs | 3 +++ 5 files changed, 28 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 6e838e8..4c3ea93 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -691,6 +691,7 @@ dependencies = [ "ignore", "lazy_static", "memchr", + "mimalloc", "pathdiff", "pretty_assertions", "rayon", @@ -709,6 +710,7 @@ dependencies = [ "criterion", "gag", "hgrep", + "mimalloc", "rayon", ] @@ -791,6 +793,15 @@ version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b2f96d100e1cf1929e7719b7edb3b90ab5298072638fccd77be9ce942ecdfce" +[[package]] +name = "libmimalloc-sys" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1b8479c593dba88c2741fc50b92e13dbabbbe0bd504d979f244ccc1a5b1c01" +dependencies = [ + "cc", +] + [[package]] name = "line-wrap" version = "0.1.1" @@ -839,6 +850,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "mimalloc" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb74897ce508e6c49156fd1476fc5922cbc6e75183c65e399c765a09122e5130" +dependencies = [ + "libmimalloc-sys", +] + [[package]] name = "miniz_oxide" version = "0.4.4" diff --git a/Cargo.toml b/Cargo.toml index 947c280..518c448 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -92,6 +92,7 @@ bincode = { version = "1.3", optional = true } flate2 = { version = "1", optional = true } rgb2ansi256 = { version = "0.1", optional = true } dirs-next = { version = "2.0", optional = true } +mimalloc = { version = "0.1", default-features = false } [target."cfg(windows)".dependencies] ansi_term = "0.12" diff --git a/hgrep-bench/Cargo.toml b/hgrep-bench/Cargo.toml index 9474105..05d82d8 100644 --- a/hgrep-bench/Cargo.toml +++ b/hgrep-bench/Cargo.toml @@ -10,6 +10,7 @@ bench = false [dependencies] hgrep = { path = ".." } +mimalloc = { version = "0.1", default-features = false } [dev-dependencies] criterion = "0.3" diff --git a/hgrep-bench/src/lib.rs b/hgrep-bench/src/lib.rs index 2a5ae80..0589fd3 100644 --- a/hgrep-bench/src/lib.rs +++ b/hgrep-bench/src/lib.rs @@ -1,6 +1,9 @@ use std::fs; use std::path::Path; +#[global_allocator] +static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; + pub fn package_lock_json_path() -> &'static Path { let path = Path::new("package-lock.json"); assert!( diff --git a/src/main.rs b/src/main.rs index 97f1080..e7fd4a1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,6 +7,9 @@ use std::env; use std::io; use std::process; +#[global_allocator] +static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; + #[cfg(feature = "ripgrep")] use hgrep::ripgrep;