aboutsummaryrefslogtreecommitdiff
path: root/benches/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'benches/mod.rs')
-rw-r--r--benches/mod.rs94
1 files changed, 0 insertions, 94 deletions
diff --git a/benches/mod.rs b/benches/mod.rs
deleted file mode 100644
index 11be47e..0000000
--- a/benches/mod.rs
+++ /dev/null
@@ -1,94 +0,0 @@
-#![feature(test)]
-extern crate test;
-
-use std::{
- alloc::{alloc_zeroed, dealloc, Layout},
- ptr::NonNull,
-};
-
-// AlignedBuffer is like a Box<[u8; N]> except that it is always N-byte aligned
-struct AlignedBuffer<const N: usize>(NonNull<[u8; N]>);
-
-impl<const N: usize> AlignedBuffer<N> {
- fn layout() -> Layout {
- Layout::from_size_align(N, N).unwrap()
- }
-
- fn new() -> Self {
- let p = unsafe { alloc_zeroed(Self::layout()) } as *mut [u8; N];
- Self(NonNull::new(p).unwrap())
- }
-
- fn buf(&mut self) -> &mut [u8; N] {
- unsafe { self.0.as_mut() }
- }
-}
-
-impl<const N: usize> Drop for AlignedBuffer<N> {
- fn drop(&mut self) {
- unsafe { dealloc(self.0.as_ptr() as *mut u8, Self::layout()) }
- }
-}
-
-// Used to benchmark the throughput of getrandom in an optimal scenario.
-// The buffer is hot, and does not require initialization.
-#[inline(always)]
-fn bench<const N: usize>(b: &mut test::Bencher) {
- let mut ab = AlignedBuffer::<N>::new();
- let buf = ab.buf();
- b.iter(|| {
- getrandom::getrandom(&mut buf[..]).unwrap();
- test::black_box(&buf);
- });
- b.bytes = N as u64;
-}
-
-// Used to benchmark the throughput of getrandom is a slightly less optimal
-// scenario. The buffer is still hot, but requires initialization.
-#[inline(always)]
-fn bench_with_init<const N: usize>(b: &mut test::Bencher) {
- let mut ab = AlignedBuffer::<N>::new();
- let buf = ab.buf();
- b.iter(|| {
- for byte in buf.iter_mut() {
- *byte = 0;
- }
- getrandom::getrandom(&mut buf[..]).unwrap();
- test::black_box(&buf);
- });
- b.bytes = N as u64;
-}
-
-// 32 bytes (256-bit) is the seed sized used for rand::thread_rng
-const SEED: usize = 32;
-// Common size of a page, 4 KiB
-const PAGE: usize = 4096;
-// Large buffer to get asymptotic performance, 2 MiB
-const LARGE: usize = 1 << 21;
-
-#[bench]
-fn bench_seed(b: &mut test::Bencher) {
- bench::<SEED>(b);
-}
-#[bench]
-fn bench_seed_init(b: &mut test::Bencher) {
- bench_with_init::<SEED>(b);
-}
-
-#[bench]
-fn bench_page(b: &mut test::Bencher) {
- bench::<PAGE>(b);
-}
-#[bench]
-fn bench_page_init(b: &mut test::Bencher) {
- bench_with_init::<PAGE>(b);
-}
-
-#[bench]
-fn bench_large(b: &mut test::Bencher) {
- bench::<LARGE>(b);
-}
-#[bench]
-fn bench_large_init(b: &mut test::Bencher) {
- bench_with_init::<LARGE>(b);
-}