From 7d4fb98c6604c67e526a96f55668e7add7aaebf6 Mon Sep 17 00:00:00 2001 From: Guoteng Rao <3603304+grao1991@users.noreply.github.com> Date: Tue, 22 Aug 2023 23:49:28 -0700 Subject: [PATCH] Unify thread name, and combine all threads in the same thread pool in framegraph produced by cpu_profiler. (#9721) --- Cargo.lock | 78 +++++++++++++------ Cargo.toml | 4 +- aptos-move/aptos-vm/src/aptos_vm.rs | 2 +- crates/aptos-profiler/Cargo.toml | 1 + crates/aptos-profiler/src/cpu_profiler.rs | 17 +++- storage/aptosdb/src/lib.rs | 2 +- storage/aptosdb/src/state_merkle_db.rs | 2 +- storage/aptosdb/src/state_store/mod.rs | 2 +- .../src/async_proof_fetcher.rs | 2 +- 9 files changed, 77 insertions(+), 33 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 90095f2fed4ef..f87733055afe2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -101,6 +101,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "aho-corasick" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a" +dependencies = [ + "memchr", +] + [[package]] name = "aliasable" version = "0.1.3" @@ -2824,6 +2833,7 @@ dependencies = [ "jemalloc-sys", "jemallocator", "pprof", + "regex", ] [[package]] @@ -4775,7 +4785,7 @@ checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" dependencies = [ "lazy_static 1.4.0", "memchr", - "regex-automata", + "regex-automata 0.1.10", ] [[package]] @@ -6947,7 +6957,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" dependencies = [ - "aho-corasick", + "aho-corasick 0.7.18", "bstr", "fnv", "log", @@ -7406,14 +7416,14 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "httpmock" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c159c4fc205e6c1a9b325cb7ec135d13b5f47188ce175dabb76ec847f331d9bd" +checksum = "4b02e044d3b4c2f94936fb05f9649efa658ca788f44eb6b87554e2033fc8ce93" dependencies = [ "assert-json-diff", "async-object-pool", "async-trait", - "base64 0.13.0", + "base64 0.21.2", "basic-cookies", "crossbeam-utils", "form_urlencoded", @@ -8082,7 +8092,7 @@ dependencies = [ "petgraph 0.6.2", "pico-args", "regex", - "regex-syntax", + "regex-syntax 0.6.27", "string_cache", "term", "tiny-keccak", @@ -8216,9 +8226,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.140" +version = "0.2.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" [[package]] name = "libfuzzer-sys" @@ -8522,7 +8532,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ - "regex-automata", + "regex-automata 0.1.10", ] [[package]] @@ -8661,14 +8671,14 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.4" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.36.1", + "windows-sys 0.48.0", ] [[package]] @@ -11094,7 +11104,7 @@ dependencies = [ "rand 0.8.5", "rand_chacha 0.3.1", "rand_xorshift", - "regex-syntax", + "regex-syntax 0.6.27", "rusty-fork", "tempfile", ] @@ -11528,13 +11538,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.6.0" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" +checksum = "81bc1d4caf89fac26a70747fe603c130093b53c773888797a6329091246d651a" dependencies = [ - "aho-corasick", + "aho-corasick 1.0.4", "memchr", - "regex-syntax", + "regex-automata 0.3.6", + "regex-syntax 0.7.4", ] [[package]] @@ -11543,7 +11554,18 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "regex-syntax", + "regex-syntax 0.6.27", +] + +[[package]] +name = "regex-automata" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed1ceff11a1dddaee50c9dc8e4938bd106e9d89ae372f192311e7da498e3b69" +dependencies = [ + "aho-corasick 1.0.4", + "memchr", + "regex-syntax 0.7.4", ] [[package]] @@ -11552,6 +11574,12 @@ version = "0.6.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" +[[package]] +name = "regex-syntax" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" + [[package]] name = "remove_dir_all" version = "0.5.3" @@ -13222,14 +13250,14 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.21.2" +version = "1.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e03c497dc955702ba729190dc4aac6f2a0ce97f913e5b1b5912fc5039d9099" +checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da" dependencies = [ "autocfg", + "backtrace", "bytes", "libc", - "memchr", "mio", "num_cpus", "parking_lot 0.12.1", @@ -13238,7 +13266,7 @@ dependencies = [ "socket2", "tokio-macros", "tracing", - "winapi 0.3.9", + "windows-sys 0.48.0", ] [[package]] @@ -13253,13 +13281,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "1.8.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2 1.0.64", "quote 1.0.29", - "syn 1.0.105", + "syn 2.0.25", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index a98e249e53ad6..bbe845bfc0606 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -505,7 +505,7 @@ heck = "0.3.2" hex = "0.4.3" hkdf = "0.10.0" hostname = "0.3.1" -httpmock = "0.6" +httpmock = "0.6.8" hyper = { version = "0.14.18", features = ["full"] } hyper-tls = "0.5.0" image = "0.24.5" @@ -566,7 +566,7 @@ random_word = "0.3.0" rayon = "1.5.2" redis = { version = "0.22.3", features = ["tokio-comp", "script", "connection-manager"] } redis-test = { version = "0.1.1", features = ["aio"] } -regex = "1.5.5" +regex = "1.9.3" reqwest = { version = "0.11.11", features = [ "blocking", "cookies", diff --git a/aptos-move/aptos-vm/src/aptos_vm.rs b/aptos-move/aptos-vm/src/aptos_vm.rs index b9c181933ee57..e57087d990fef 100644 --- a/aptos-move/aptos-vm/src/aptos_vm.rs +++ b/aptos-move/aptos-vm/src/aptos_vm.rs @@ -90,7 +90,7 @@ pub static RAYON_EXEC_POOL: Lazy> = Lazy::new(|| { Arc::new( rayon::ThreadPoolBuilder::new() .num_threads(num_cpus::get()) - .thread_name(|index| format!("par_exec_{}", index)) + .thread_name(|index| format!("par_exec-{}", index)) .build() .unwrap(), ) diff --git a/crates/aptos-profiler/Cargo.toml b/crates/aptos-profiler/Cargo.toml index 0ed79a60a5acb..ea5558379ff1a 100644 --- a/crates/aptos-profiler/Cargo.toml +++ b/crates/aptos-profiler/Cargo.toml @@ -13,6 +13,7 @@ rust-version = { workspace = true } [dependencies] anyhow = { workspace = true } +regex = { workspace = true } [target.'cfg(unix)'.dependencies] pprof = { version = "0.11", features = ["flamegraph"] } diff --git a/crates/aptos-profiler/src/cpu_profiler.rs b/crates/aptos-profiler/src/cpu_profiler.rs index b8a3cb8de660e..4f3ef50aaf2e2 100644 --- a/crates/aptos-profiler/src/cpu_profiler.rs +++ b/crates/aptos-profiler/src/cpu_profiler.rs @@ -7,6 +7,7 @@ use crate::{ }; use anyhow::Result; use pprof::ProfilerGuard; +use regex::Regex; use std::{path::PathBuf, thread, time}; pub struct CpuProfiler<'a> { @@ -33,6 +34,16 @@ impl<'a> CpuProfiler<'a> { self.guard = None; Ok(()) } + + fn frames_post_processor() -> impl Fn(&mut pprof::Frames) { + let regex = Regex::new(r"^(.*)-(\d*)$").unwrap(); + + move |frames| { + if let Some((_, [name, _])) = regex.captures(&frames.thread_name).map(|c| c.extract()) { + frames.thread_name = name.to_string(); + } + } + } } impl Profiler for CpuProfiler<'_> { @@ -59,7 +70,11 @@ impl Profiler for CpuProfiler<'_> { /// End profiling fn end_profiling(&mut self, _binary_path: &str) -> Result<()> { if let Some(guard) = self.guard.take() { - if let Ok(report) = guard.report().build() { + if let Ok(report) = guard + .report() + .frames_post_processor(Self::frames_post_processor()) + .build() + { let file = create_file_with_parents(self.svg_result_path.as_path())?; let _result = report.flamegraph(file); } diff --git a/storage/aptosdb/src/lib.rs b/storage/aptosdb/src/lib.rs index 662a9ec260053..dcf80a58f4821 100644 --- a/storage/aptosdb/src/lib.rs +++ b/storage/aptosdb/src/lib.rs @@ -136,7 +136,7 @@ pub(crate) const NUM_STATE_SHARDS: usize = 16; static COMMIT_POOL: Lazy = Lazy::new(|| { rayon::ThreadPoolBuilder::new() .num_threads(32) - .thread_name(|index| format!("commit_{}", index)) + .thread_name(|index| format!("commit-{}", index)) .build() .unwrap() }); diff --git a/storage/aptosdb/src/state_merkle_db.rs b/storage/aptosdb/src/state_merkle_db.rs index 64a369902e7df..3ec3b6932c344 100644 --- a/storage/aptosdb/src/state_merkle_db.rs +++ b/storage/aptosdb/src/state_merkle_db.rs @@ -48,7 +48,7 @@ pub const STATE_MERKLE_METADATA_DB_NAME: &str = "state_merkle_metadata_db"; static TREE_COMMIT_POOL: Lazy = Lazy::new(|| { rayon::ThreadPoolBuilder::new() .num_threads(32) - .thread_name(|index| format!("tree_commit_{}", index)) + .thread_name(|index| format!("tree_commit-{}", index)) .build() .unwrap() }); diff --git a/storage/aptosdb/src/state_store/mod.rs b/storage/aptosdb/src/state_store/mod.rs index 62e2ab1077584..31a19d4825599 100644 --- a/storage/aptosdb/src/state_store/mod.rs +++ b/storage/aptosdb/src/state_store/mod.rs @@ -83,7 +83,7 @@ const MAX_COMMIT_PROGRESS_DIFFERENCE: u64 = 100000; static IO_POOL: Lazy = Lazy::new(|| { rayon::ThreadPoolBuilder::new() .num_threads(32) - .thread_name(|index| format!("kv_reader_{}", index)) + .thread_name(|index| format!("kv_reader-{}", index)) .build() .unwrap() }); diff --git a/storage/storage-interface/src/async_proof_fetcher.rs b/storage/storage-interface/src/async_proof_fetcher.rs index b20f1b53ce110..b3b8704213a50 100644 --- a/storage/storage-interface/src/async_proof_fetcher.rs +++ b/storage/storage-interface/src/async_proof_fetcher.rs @@ -25,7 +25,7 @@ use std::{ static IO_POOL: Lazy = Lazy::new(|| { rayon::ThreadPoolBuilder::new() .num_threads(AptosVM::get_num_proof_reading_threads()) - .thread_name(|index| format!("proof_reader_{}", index)) + .thread_name(|index| format!("proof_reader-{}", index)) .build() .unwrap() });