Skip to content

Commit 5b67f2d

Browse files
add more benchmarks
1 parent 8a9422e commit 5b67f2d

File tree

1 file changed

+100
-6
lines changed

1 file changed

+100
-6
lines changed

benches/main.rs

Lines changed: 100 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,18 @@
22

33
extern crate test;
44

5-
use test::Bencher;
5+
use test::{black_box, Bencher};
66

77
use byte_pool::BytePool;
88

99
fn touch_obj(buf: &mut [u8], size: usize) {
1010
assert_eq!(buf.len(), size);
1111
buf[0] = 1;
12+
black_box(buf);
1213
}
1314

1415
macro_rules! benches_for_size {
15-
($size:expr, $name1:ident, $name2:ident) => {
16+
($size:expr, $name1:ident, $name2:ident, $name3:ident, $name4:ident, $name5:ident, $name6:ident) => {
1617
#[bench]
1718
fn $name1(b: &mut Bencher) {
1819
b.bytes = $size as u64;
@@ -35,13 +36,106 @@ macro_rules! benches_for_size {
3536
touch_obj(&mut buf, $size);
3637
});
3738
}
39+
40+
#[bench]
41+
fn $name3(b: &mut Bencher) {
42+
b.iter(|| run_vec(10, 1000, $size));
43+
}
44+
45+
#[bench]
46+
fn $name4(b: &mut Bencher) {
47+
b.iter(|| run_vec(1, 1000, $size));
48+
}
49+
50+
#[bench]
51+
fn $name5(b: &mut Bencher) {
52+
b.iter(|| run_pool(10, 1000, $size));
53+
}
54+
55+
#[bench]
56+
fn $name6(b: &mut Bencher) {
57+
b.iter(|| run_pool(1, 1000, $size));
58+
}
3859
};
3960
}
4061

41-
benches_for_size!(256, base_line_vec_256b, pool_256b);
42-
benches_for_size!(1 * 1024, base_line_vec_1k, pool_1k);
43-
benches_for_size!(4 * 1024, base_line_vec_4k, pool_4k);
44-
benches_for_size!(8 * 1024, base_line_vec_8k, pool_8k);
62+
fn run_pool(thread: usize, iter: usize, size: usize) {
63+
use std::sync::Arc;
64+
let p = Arc::new(BytePool::new());
65+
let mut threads = Vec::new();
66+
67+
for _ in 0..thread {
68+
let p = p.clone();
69+
threads.push(std::thread::spawn(move || {
70+
for _ in 0..iter {
71+
let mut v = p.alloc(size);
72+
v[0] = 1;
73+
v[size / 4] = 1;
74+
v[size / 2] = 1;
75+
}
76+
}));
77+
}
78+
79+
for t in threads {
80+
t.join().unwrap();
81+
}
82+
}
83+
84+
fn run_vec(thread: usize, iter: usize, size: usize) {
85+
let mut threads = Vec::new();
86+
87+
for _ in 0..thread {
88+
threads.push(std::thread::spawn(move || {
89+
for _ in 0..iter {
90+
let mut v = vec![0u8; size];
91+
v[0] = 1;
92+
v[size / 4] = 1;
93+
v[size / 2] = 1;
94+
}
95+
}));
96+
}
97+
98+
for t in threads {
99+
t.join().unwrap();
100+
}
101+
}
102+
103+
benches_for_size!(
104+
256,
105+
vec_256b,
106+
pool_256b,
107+
vec_256b_contention,
108+
vec_256b_no_contention,
109+
pool_256b_contention,
110+
pool_256b_no_contention
111+
);
112+
benches_for_size!(
113+
1 * 1024,
114+
vec_1k,
115+
pool_1k,
116+
vec_1k_contention,
117+
vec_1k_no_contention,
118+
pool_1k_contention,
119+
pool_1k_no_contention
120+
);
121+
benches_for_size!(
122+
4 * 1024,
123+
vec_4k,
124+
pool_4k,
125+
vec_4k_contention,
126+
vec_4k_no_contention,
127+
pool_4k_contention,
128+
pool_4k_no_contention
129+
);
130+
benches_for_size!(
131+
8 * 1024,
132+
vec_8k,
133+
pool_8k,
134+
vec_8k_contention,
135+
vec_8k_no_contention,
136+
pool_8k_contention,
137+
pool_8k_no_contention
138+
);
45139

46140
#[bench]
47141
fn base_line_vec_mixed(b: &mut Bencher) {

0 commit comments

Comments
 (0)