From dabf1be2267439d61029b9b9353f4ae2008a3662 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 1 Sep 2011 14:17:11 -0700 Subject: [PATCH] Add a benchmark for cross-task kernel memory region synchronization Vectors are allocated from the kernel's memory region, which has some heinous synchronization. This is a stress test of vector allocation in many tasks. --- src/test/bench/task-perf-vector-party.rs | 28 ++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/test/bench/task-perf-vector-party.rs diff --git a/src/test/bench/task-perf-vector-party.rs b/src/test/bench/task-perf-vector-party.rs new file mode 100644 index 000000000000..8450405e01cd --- /dev/null +++ b/src/test/bench/task-perf-vector-party.rs @@ -0,0 +1,28 @@ +// Vectors are allocated in the Rust kernel's memory region, use of +// which requires some amount of synchronization. This test exercises +// that synchronization by spawning a number of tasks and then +// allocating and freeing vectors. + +use std; +import std::vec; +import std::uint; +import std::istr; +import std::task; + +fn f(n: uint) { + for each i in uint::range(0u, n) { + let v: [u8] = []; + vec::reserve(v, 1000u); + } +} + +fn main(args: [istr]) { + let n = if vec::len(args) < 2u { + 100u + } else { + uint::parse_buf(istr::bytes(args[1]), 10u) + }; + for each i in uint::range(0u, 100u) { + task::spawn(bind f(n)); + } +} \ No newline at end of file