diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 000000000..39d6cd46b --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,31 @@ +[target.'cfg(all(target_os="windows", target_env = "msvc", target_arch = "x86_64"))'] +rustflags = [ + "-L", "link-search=native=./cargo/msvcrt.lib", + "-C", "link-arg=/NODEFAULTLIB:libvcruntimed.lib", + "-C", "link-arg=/NODEFAULTLIB:vcruntime.lib", + "-C", "link-arg=/NODEFAULTLIB:vcruntimed.lib", + "-C", "link-arg=/NODEFAULTLIB:libcmtd.lib", + "-C", "link-arg=/NODEFAULTLIB:msvcrt.lib", + "-C", "link-arg=/NODEFAULTLIB:msvcrtd.lib", + "-C", "link-arg=/NODEFAULTLIB:libucrt.lib", + "-C", "link-arg=/NODEFAULTLIB:libucrtd.lib", + "-C", "link-arg=/DEFAULTLIB:libcmt.lib", + "-C", "link-arg=/DEFAULTLIB:libvcruntime.lib", + "-C", "link-arg=/DEFAULTLIB:ucrt.lib", +] + +[target.'cfg(all(target_os="windows", target_env = "msvc", target_arch = "x86"))'] +rustflags = [ + "-C", "target-feature=+crt-static", + "-C", "link-arg=/NODEFAULTLIB:libvcruntimed.lib", + "-C", "link-arg=/NODEFAULTLIB:vcruntime.lib", + "-C", "link-arg=/NODEFAULTLIB:vcruntimed.lib", + "-C", "link-arg=/NODEFAULTLIB:libcmtd.lib", + "-C", "link-arg=/NODEFAULTLIB:msvcrt.lib", + "-C", "link-arg=/NODEFAULTLIB:msvcrtd.lib", + "-C", "link-arg=/NODEFAULTLIB:libucrt.lib", + "-C", "link-arg=/NODEFAULTLIB:libucrtd.lib", + "-C", "link-arg=/DEFAULTLIB:libcmt.lib", + "-C", "link-arg=/DEFAULTLIB:libvcruntime.lib", + "-C", "link-arg=/DEFAULTLIB:ucrt.lib", +] \ No newline at end of file diff --git a/.cargo/msvcrt.lib b/.cargo/msvcrt.lib new file mode 100644 index 000000000..886f3aa2c Binary files /dev/null and b/.cargo/msvcrt.lib differ diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index bc95ffd3a..9b62dd54f 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -34,7 +34,7 @@ jobs: - { os: "windows-latest", target: "i686-pc-windows-msvc", - cross: false, + cross: true, } runs-on: ${{ matrix.info.os }} steps: diff --git a/CHANGELOG-Japanese.md b/CHANGELOG-Japanese.md index a42d6af74..c7d887fff 100644 --- a/CHANGELOG-Japanese.md +++ b/CHANGELOG-Japanese.md @@ -14,6 +14,7 @@ - JSONの出力の中にある各検知内容のオブジェクトを持つ不要な配列の構造を削除した。 (#766)(@hitenkoku) - プロファイルで出力できる情報にルール作成者(`%RuleAuthor%`)、 ルール作成日(`%RuleCreationDate%`)、 ルール修正日(`%RuleModifiedDate%`)、ルールステータス(`%Status%`)を追加した。 (#761) (@hitenkoku) - JSON出力のDetailsフィールドをオブジェクト形式で出力するように変更した。 (#773) (@hitenkoku) +- `build.rs`を削除し、メモリアロケータをmimallocに変更した。Intel系OSでは20-30%の速度向上が見込める。 (#657) (@fukusuket) - プロファイルの`%RecordInformation%` エイリアスを `%AllFieldInfo%` に変更した。 AllFieldInfoフィールドをJSONオブジェクト形式で出力するように変更した。 (#750) (@hitenkoku) **バグ修正:** diff --git a/CHANGELOG.md b/CHANGELOG.md index e80edeeea..a6a8c52e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ - Removed unnecessary array structure in the JSON output. (#766)(@hitenkoku) - Added rule authors (`%RuleAuthor%`), rule creation date (`%RuleCreationDate%`), rule modified date (`%RuleModifiedDate%`), and rule status (`%Status%`) fields to output profiles. (#761) (@hitenkoku) - Changed Details field in JSON output to object. (#773) (@hitenkoku) +- Removed `build.rs` and changed the memory allocator to mimalloc for a speed increase of 20-30% on Intel-based OSes. (#657) (@fukusuket) - Replaced %RecordInformation% alias in profile to %AllFieldInfo%, and changed AllFieldInfo field in JSON output to object. (#750) (@hitenkoku) **Bug Fixes:** diff --git a/Cargo.lock b/Cargo.lock index 22b00bb0a..ec44de1b5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -820,6 +820,7 @@ dependencies = [ "lazy_static", "linked-hash-map", "lock_api", + "mimalloc", "num-format", "num_cpus", "openssl", @@ -832,7 +833,6 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "static_vcruntime", "termcolor", "terminal_size 0.2.1", "tokio", @@ -1141,6 +1141,15 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "libmimalloc-sys" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc093ab289b0bfda3aa1bdfab9c9542be29c7ef385cfcbe77f8c9813588eb48" +dependencies = [ + "cc", +] + [[package]] name = "libssh2-sys" version = "0.2.23" @@ -1231,6 +1240,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "mimalloc" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ce6a4b40d3bff9eb3ce9881ca0737a85072f9f975886082640cd46a75cdb35" +dependencies = [ + "libmimalloc-sys", +] + [[package]] name = "mime" version = "0.3.16" @@ -1955,12 +1973,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "static_vcruntime" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "954e3e877803def9dc46075bf4060147c55cd70db97873077232eae0269dc89b" - [[package]] name = "stdweb" version = "0.4.20" diff --git a/Cargo.toml b/Cargo.toml index 147b8a4d2..cfee70297 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,9 +41,7 @@ comfy-table = "6.*" pulldown-cmark = { version = "0.9.*", default-features = false, features = ["simd"] } reqwest = {version = "0.11.*", features = ["blocking", "json"]} horrorshow = "0.8.*" - -[build-dependencies] -static_vcruntime = "2.*" +mimalloc = { version = "*", default-features = false } [dev-dependencies] rand = "0.8.*" diff --git a/build.rs b/build.rs deleted file mode 100644 index 7c051a1c5..000000000 --- a/build.rs +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - #[cfg(target_os = "windows")] - static_vcruntime::metabuild(); -} diff --git a/src/main.rs b/src/main.rs index f73d5b1f7..a2037e7b0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -27,6 +27,7 @@ use hayabusa::{afterfact::after_fact, detections::utils}; use hayabusa::{detections::configs, timeline::timelines::Timeline}; use hayabusa::{detections::utils::write_color_buffer, filter}; use hhmmss::Hhmmss; +use mimalloc::MiMalloc; use pbr::ProgressBar; use serde_json::Value; use std::ffi::{OsStr, OsString}; @@ -49,6 +50,9 @@ use tokio::task::JoinHandle; #[cfg(target_os = "windows")] use is_elevated::is_elevated; +#[global_allocator] +static GLOBAL: MiMalloc = MiMalloc; + // 一度にtimelineやdetectionを実行する行数 const MAX_DETECT_RECORDS: usize = 5000;