From 5c1ff3ed61e59a67cadf4db208e03d41a2639fc7 Mon Sep 17 00:00:00 2001 From: Bill Thiede Date: Thu, 24 Oct 2019 09:46:52 -0700 Subject: [PATCH] Test to understand how cargoflame works. --- .gitignore | 2 + Cargo.lock | 6 + Cargo.toml | 12 ++ src/flamegraph.svg | 300 +++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 33 +++++ 5 files changed, 353 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 src/flamegraph.svg create mode 100644 src/main.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..53eaa21 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target +**/*.rs.bk diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..15bcdff --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,6 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "rustperf" +version = "0.1.0" + diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..dd446df --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "rustperf" +version = "0.1.0" +authors = ["Bill Thiede "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] + +[profile.release] +debug = true diff --git a/src/flamegraph.svg b/src/flamegraph.svg new file mode 100644 index 0000000..162639d --- /dev/null +++ b/src/flamegraph.svg @@ -0,0 +1,300 @@ +Flame Graph Reset ZoomSearch perf_4.19 (4 samples, 0.70%)[unknown] (4 samples, 0.70%)entry_SYSCALL_64_after_hwframe (4 samples, 0.70%)do_syscall_64 (4 samples, 0.70%)__x64_sys_execve (4 samples, 0.70%)__do_execve_file.isra.34 (4 samples, 0.70%)search_binary_handler (4 samples, 0.70%)load_elf_binary (4 samples, 0.70%)setup_new_exec (4 samples, 0.70%)perf_event_exec (4 samples, 0.70%)__intel_pmu_enable_all.constprop.23 (4 samples, 0.70%)native_write_msr (4 samples, 0.70%)entry_SYSCALL_64_after_hwframe (1 samples, 0.18%)do_syscall_64 (1 samples, 0.18%)__x64_sys_execve (1 samples, 0.18%)__do_execve_file.isra.34 (1 samples, 0.18%)search_binary_handler (1 samples, 0.18%)load_elf_binary (1 samples, 0.18%)__clear_user (1 samples, 0.18%)page_fault (1 samples, 0.18%)__do_page_fault (1 samples, 0.18%)handle_mm_fault (1 samples, 0.18%)__handle_mm_fault (1 samples, 0.18%)finish_fault (1 samples, 0.18%)alloc_set_pte (1 samples, 0.18%)[unknown] (4 samples, 0.70%)swapgs_restore_regs_and_return_to_usermode (3 samples, 0.53%)prepare_exit_to_usermode (3 samples, 0.53%)exit_to_usermode_loop (3 samples, 0.53%)schedule (3 samples, 0.53%)__sched_text_start (3 samples, 0.53%)finish_task_switch (3 samples, 0.53%)__perf_event_task_sched_in (3 samples, 0.53%)__intel_pmu_enable_all.constprop.23 (3 samples, 0.53%)native_write_msr (3 samples, 0.53%)<std::time::Instant as core::ops::arith::Sub>::sub (21 samples, 3.69%)<std..std::sys::unix::time::Timespec::sub_timespec (17 samples, 2.99%)std..rustperf::one (164 samples, 28.82%)rustperf::onestd::time::Instant::now (137 samples, 24.08%)std::time::Instant::now__clock_gettime (127 samples, 22.32%)__clock_gettime__vdso_clock_gettime (108 samples, 18.98%)__vdso_clock_gettime[[vdso]] (73 samples, 12.83%)[[vdso]]<std::time::Instant as core::ops::arith::Sub>::sub (38 samples, 6.68%)<std::tim..std::sys::unix::time::Timespec::sub_timespec (28 samples, 4.92%)std::s..rustperf::main (371 samples, 65.20%)rustperf::mainrustperf::two (198 samples, 34.80%)rustperf::twostd::time::Instant::now (160 samples, 28.12%)std::time::Instant::now__clock_gettime (153 samples, 26.89%)__clock_gettime__vdso_clock_gettime (137 samples, 24.08%)__vdso_clock_gettime[[vdso]] (92 samples, 16.17%)[[vdso]]<std::time::Instant as core::ops::arith::Sub>::sub (45 samples, 7.91%)<std::time:..std::sys::unix::time::Timespec::sub_timespec (33 samples, 5.80%)std::sy.._start (560 samples, 98.42%)_start__libc_start_main (560 samples, 98.42%)__libc_start_mainmain (560 samples, 98.42%)mainstd::rt::lang_start_internal (560 samples, 98.42%)std::rt::lang_start_internal__rust_maybe_catch_panic (560 samples, 98.42%)__rust_maybe_catch_panicstd::panicking::try::do_call (560 samples, 98.42%)std::panicking::try::do_callstd::rt::lang_start::_$u7b$$u7b$closure$u7d$$u7d$::h80d40c3a4e341551 (560 samples, 98.42%)std::rt::lang_start::_$u7b$$u7b$closure$u7d$$u7d$::h80d40c3a4e341551rustperf::one (189 samples, 33.22%)rustperf::onestd::time::Instant::now (144 samples, 25.31%)std::time::Instant::now__clock_gettime (134 samples, 23.55%)__clock_gettime__vdso_clock_gettime (121 samples, 21.27%)__vdso_clock_gettime[[vdso]] (69 samples, 12.13%)[[vdso]]all (569 samples, 100%)rustperf (565 samples, 99.30%)rustperfstd::time::Instant::now (1 samples, 0.18%)swapgs_restore_regs_and_return_to_usermode (1 samples, 0.18%)prepare_exit_to_usermode (1 samples, 0.18%)exit_to_usermode_loop (1 samples, 0.18%)schedule (1 samples, 0.18%)__sched_text_start (1 samples, 0.18%)finish_task_switch (1 samples, 0.18%)__perf_event_task_sched_in (1 samples, 0.18%)__intel_pmu_enable_all.constprop.23 (1 samples, 0.18%)native_write_msr (1 samples, 0.18%) \ No newline at end of file diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..4054fa3 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,33 @@ +use std::time::{Duration, Instant}; + +#[inline(never)] +fn one(runtime: Duration) { + println!("Starting one"); + let start = Instant::now(); + loop { + let diff = Instant::now() - start; + if diff > runtime { + return; + } + } +} + +#[inline(never)] +fn two(runtime: Duration) { + println!("Starting two"); + let start = Instant::now(); + loop { + let diff = Instant::now() - start; + if diff > runtime { + return; + } + } +} + +fn main() { + let runtime = Duration::new(2, 0); + + one(runtime); + two(runtime); + one(runtime); +}