Skip to content

Commit 30bd3d4

Browse files
committed
Benchmark for sharedmemory operations
Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com>
1 parent c9c4940 commit 30bd3d4

File tree

1 file changed

+57
-2
lines changed

1 file changed

+57
-2
lines changed

src/hyperlight_host/benches/benchmarks.rs

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,13 @@ use std::sync::{Arc, Barrier, Mutex};
2323
use std::thread;
2424
use std::time::{Duration, Instant};
2525

26-
use criterion::{Criterion, criterion_group, criterion_main};
26+
use criterion::{BenchmarkId, Criterion, Throughput, criterion_group, criterion_main};
2727
use flatbuffers::FlatBufferBuilder;
2828
use hyperlight_common::flatbuffer_wrappers::function_call::{FunctionCall, FunctionCallType};
2929
use hyperlight_common::flatbuffer_wrappers::function_types::{ParameterValue, ReturnType};
3030
use hyperlight_common::flatbuffer_wrappers::util::estimate_flatbuffer_capacity;
3131
use hyperlight_host::GuestBinary;
32+
use hyperlight_host::mem::shared_mem::ExclusiveSharedMemory;
3233
use hyperlight_host::sandbox::{MultiUseSandbox, SandboxConfiguration, UninitializedSandbox};
3334
use hyperlight_testing::sandbox_sizes::{LARGE_HEAP_SIZE, MEDIUM_HEAP_SIZE, SMALL_HEAP_SIZE};
3435
use hyperlight_testing::{c_simple_guest_as_string, simple_guest_as_string};
@@ -492,6 +493,59 @@ fn sample_workloads_benchmark(c: &mut Criterion) {
492493
group.finish();
493494
}
494495

496+
// ============================================================================
497+
// Benchmark Category: Shared Memory Operations
498+
// ============================================================================
499+
500+
fn shared_memory_benchmark(c: &mut Criterion) {
501+
let mut group = c.benchmark_group("shared_memory");
502+
503+
let sizes: &[(usize, &str)] = &[(1024 * 1024, "1MB"), (64 * 1024 * 1024, "64MB")];
504+
505+
for &(size, name) in sizes {
506+
group.throughput(Throughput::Bytes(size as u64));
507+
508+
// Benchmark fill
509+
group.bench_with_input(BenchmarkId::new("fill", name), &size, |b, &size| {
510+
let eshm = ExclusiveSharedMemory::new(size).unwrap();
511+
let (mut hshm, _) = eshm.build();
512+
b.iter(|| {
513+
hshm.fill(0xAB, 0, size).unwrap();
514+
});
515+
});
516+
517+
// Benchmark copy_to_slice (read from shared memory)
518+
group.bench_with_input(
519+
BenchmarkId::new("copy_to_slice", name),
520+
&size,
521+
|b, &size| {
522+
let eshm = ExclusiveSharedMemory::new(size).unwrap();
523+
let (hshm, _) = eshm.build();
524+
let mut dst = vec![0u8; size];
525+
b.iter(|| {
526+
hshm.copy_to_slice(&mut dst, 0).unwrap();
527+
});
528+
},
529+
);
530+
531+
// Benchmark copy_from_slice (write to shared memory)
532+
group.bench_with_input(
533+
BenchmarkId::new("copy_from_slice", name),
534+
&size,
535+
|b, &size| {
536+
let eshm = ExclusiveSharedMemory::new(size).unwrap();
537+
let (hshm, _) = eshm.build();
538+
let src = vec![0xCDu8; size];
539+
b.iter(|| {
540+
hshm.copy_from_slice(&src, 0).unwrap();
541+
});
542+
},
543+
);
544+
}
545+
546+
group.finish();
547+
}
548+
495549
criterion_group! {
496550
name = benches;
497551
config = Criterion::default();
@@ -501,6 +555,7 @@ criterion_group! {
501555
snapshots_benchmark,
502556
guest_call_benchmark_large_param,
503557
function_call_serialization_benchmark,
504-
sample_workloads_benchmark
558+
sample_workloads_benchmark,
559+
shared_memory_benchmark
505560
}
506561
criterion_main!(benches);

0 commit comments

Comments
 (0)