|
| 1 | +// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. |
| 2 | +// SPDX-License-Identifier: Apache-2.0 |
| 3 | +// |
| 4 | +// Benchmarking cases: |
| 5 | +// * `Queue.pop` |
| 6 | +// * `Queue.add_used` |
| 7 | +// * `DescriptorChain.next_descriptor` |
| 8 | + |
| 9 | +use criterion::{criterion_group, criterion_main, Criterion}; |
| 10 | +use vm_memory::GuestAddress; |
| 11 | +use vmm::devices::virtio::block::virtio::test_utils::RequestDescriptorChain; |
| 12 | +use vmm::devices::virtio::block::virtio::{Request, RequestHeader, VIRTIO_BLK_T_IN}; |
| 13 | +use vmm::devices::virtio::test_utils::VirtQueue; |
| 14 | +use vmm::utilities::test_utils::single_region_mem; |
| 15 | + |
| 16 | +pub fn block_request_benchmark(c: &mut Criterion) { |
| 17 | + let mem = single_region_mem(2 * 65562); |
| 18 | + let virt_queue = VirtQueue::new(GuestAddress(0), &mem, 16); |
| 19 | + |
| 20 | + // We don't really care about what request is. We just |
| 21 | + // need it to be valid. |
| 22 | + let chain = RequestDescriptorChain::new(&virt_queue); |
| 23 | + let request_header = RequestHeader::new(VIRTIO_BLK_T_IN, 99); |
| 24 | + chain.set_header(request_header); |
| 25 | + |
| 26 | + let mut queue = virt_queue.create_queue(); |
| 27 | + let desc = queue.pop(&mem).unwrap(); |
| 28 | + |
| 29 | + c.bench_function("request_parse", |b| { |
| 30 | + b.iter(|| { |
| 31 | + let desc = std::hint::black_box(&desc); |
| 32 | + _ = Request::parse(desc, &mem, 1024); |
| 33 | + }) |
| 34 | + }); |
| 35 | +} |
| 36 | + |
| 37 | +criterion_group! { |
| 38 | + name = block_request_benches; |
| 39 | + config = Criterion::default().sample_size(200).noise_threshold(0.05); |
| 40 | + targets = block_request_benchmark |
| 41 | +} |
| 42 | + |
| 43 | +criterion_main! { |
| 44 | + block_request_benches |
| 45 | +} |
0 commit comments