| // Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. |
| // |
| // SPDX-License-Identifier: Apache-2.0 OR BSD-3-Clause |
| |
| extern crate criterion; |
| |
| pub use criterion::{black_box, criterion_group, criterion_main, Criterion}; |
| #[cfg(feature = "backend-mmap")] |
| use vm_memory::{GuestAddress, GuestMemoryMmap}; |
| |
| mod guest_memory; |
| mod mmap; |
| mod volatile; |
| |
| use volatile::benchmark_for_volatile; |
| |
| #[cfg(feature = "backend-mmap")] |
| // Use this function with caution. It does not check against overflows |
| // and `GuestMemoryMmap::from_ranges` errors. |
| fn create_guest_memory_mmap(size: usize, count: u64) -> GuestMemoryMmap<()> { |
| let mut regions: Vec<(GuestAddress, usize)> = Vec::new(); |
| for i in 0..count { |
| regions.push((GuestAddress(i * size as u64), size)); |
| } |
| |
| GuestMemoryMmap::from_ranges(regions.as_slice()).unwrap() |
| } |
| |
| pub fn criterion_benchmark(_c: &mut Criterion) { |
| #[cfg(feature = "backend-mmap")] |
| mmap::benchmark_for_mmap(_c); |
| } |
| |
| pub fn benchmark_guest_memory(_c: &mut Criterion) { |
| #[cfg(feature = "backend-mmap")] |
| guest_memory::benchmark_for_guest_memory(_c) |
| } |
| |
| criterion_group! { |
| name = benches; |
| config = Criterion::default().sample_size(200).measurement_time(std::time::Duration::from_secs(50)); |
| targets = criterion_benchmark, benchmark_guest_memory, benchmark_for_volatile |
| } |
| |
| criterion_main! { |
| benches, |
| } |