Skip to content

Commit 50ad94b

Browse files
committed
feat(bench): add block request benches
Add bench for `Request::parse` method. This will allow us to track performance of this method. Signed-off-by: Egor Lazarchuk <[email protected]>
1 parent f79782b commit 50ad94b

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

src/vmm/Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,5 +65,9 @@ harness = false
6565
name = "queue"
6666
harness = false
6767

68+
[[bench]]
69+
name = "block_request"
70+
harness = false
71+
6872
[lints]
6973
workspace = true

src/vmm/benches/block_request.rs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
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

Comments
 (0)