#![feature(test)] use consistent_hash_ring::*; extern crate test; use test::Bencher; fn bench_replicas32(b: &mut Bencher, replicas: usize) { let mut ring = RingBuilder::default().vnodes(50).build(); let buckets: Vec = (0..32) .map(|s| format!("shard-{}", s)) .inspect(|b| { ring.insert(b.clone()); }) .collect(); let mut i = 0; b.iter(|| { i += 1; ring.replicas(&buckets[i & 31]) .take(replicas) .for_each(|_| ()); }); } #[bench] fn bench_replicas32_1(b: &mut Bencher) { bench_replicas32(b, 1); } #[bench] fn bench_replicas32_2(b: &mut Bencher) { bench_replicas32(b, 2); } #[bench] fn bench_replicas32_3(b: &mut Bencher) { bench_replicas32(b, 3); } #[bench] fn bench_replicas32_4(b: &mut Bencher) { bench_replicas32(b, 4); } fn bench_get(b: &mut Bencher, shards: usize) { let mut ring = RingBuilder::default().vnodes(50).build(); let buckets: Vec = (0..shards) .map(|s| format!("shard-{}", s)) .inspect(|b| { ring.insert(b.clone()); }) .collect(); let mut i = 0; b.iter(|| { i += 1; ring.get(&buckets[i & (shards - 1)]); }); } #[bench] fn bench_get_a_8(b: &mut Bencher) { bench_get(b, 8); } #[bench] fn bench_get_b_32(b: &mut Bencher) { bench_get(b, 32); } #[bench] fn bench_get_c_128(b: &mut Bencher) { bench_get(b, 128); } #[bench] fn bench_get_d_512(b: &mut Bencher) { bench_get(b, 512); }