Skip to content

Commit d03a638

Browse files
committed
Optimize: Threaded record writer configs
1 parent a22369d commit d03a638

6 files changed

Lines changed: 385 additions & 16 deletions

File tree

crates/cli-flags/src/lib.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,15 @@ wasmtime_option_group! {
508508
pub validation_metadata: Option<bool>,
509509
/// Writer buffer size (in bytes) for internal buffering during recording. Defaults to 8 KiB.
510510
pub buffer_size: Option<usize>,
511+
/// Enable threaded (async) recording writer. Decouples serialization from file I/O
512+
/// by shipping buffers to a background thread.
513+
pub threaded: Option<bool>,
514+
/// Buffer capacity (in bytes) for the threaded writer before shipping to the
515+
/// background thread. Defaults to 64 KiB. Only used when `threaded` is enabled.
516+
pub threaded_buffer_capacity: Option<usize>,
517+
/// Channel bound for the threaded writer (max number of buffers queued).
518+
/// Defaults to 8. Only used when `threaded` is enabled.
519+
pub threaded_channel_bound: Option<usize>,
511520
}
512521

513522
enum Record {

crates/wasmtime/src/runtime.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ pub use resources::*;
9595
pub use rr::{
9696
RecordSettings, RecordWriter, ReplayEnvironment, ReplayInstance, ReplayReader, ReplaySettings,
9797
};
98+
#[cfg(all(feature = "rr", feature = "std"))]
99+
pub use rr::{ThreadedWriter, ThreadedWriterConfig};
98100
#[cfg(all(feature = "async", feature = "call-hook"))]
99101
pub use store::CallHookHandler;
100102
pub use store::{

crates/wasmtime/src/runtime/rr.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,12 @@ mod backend;
6666
#[cfg(feature = "rr")]
6767
pub use backend::*;
6868

69+
/// Threaded writer for async file I/O during recording (requires `std` for threads and channels)
70+
#[cfg(all(feature = "rr", feature = "std"))]
71+
mod threaded_writer;
72+
#[cfg(all(feature = "rr", feature = "std"))]
73+
pub use threaded_writer::*;
74+
6975
/// Driver capabilities for executing replays
7076
#[cfg(feature = "rr")]
7177
mod replay_driver;

crates/wasmtime/src/runtime/rr/backend.rs

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -583,11 +583,8 @@ mod tests {
583583
#[test]
584584
fn lower_flat_events() -> Result<()> {
585585
use component_events::{LowerFlatEntryEvent, LowerFlatReturnEvent};
586-
use wasmtime_environ::component::InterfaceType;
587586

588-
let entry = LowerFlatEntryEvent {
589-
ty: InterfaceType::U32,
590-
};
587+
let entry = LowerFlatEntryEvent;
591588
let return_event = LowerFlatReturnEvent(ResultEvent::from_anyhow_result(&Ok(())));
592589

593590
rr_harness(
@@ -597,10 +594,7 @@ mod tests {
597594
Ok(())
598595
},
599596
|replayer| {
600-
replayer.next_event_and(|e: LowerFlatEntryEvent| {
601-
assert_eq!(e.ty, InterfaceType::U32);
602-
Ok(())
603-
})?;
597+
replayer.next_event_and(|e: LowerFlatEntryEvent| Ok(()))?;
604598
replayer.next_event_and(|e: LowerFlatReturnEvent| {
605599
assert!(e.0.ret().is_ok());
606600
Ok(())
@@ -613,12 +607,8 @@ mod tests {
613607
#[test]
614608
fn lower_memory_events() -> Result<()> {
615609
use component_events::{LowerMemoryEntryEvent, LowerMemoryReturnEvent};
616-
use wasmtime_environ::component::InterfaceType;
617610

618-
let entry = LowerMemoryEntryEvent {
619-
ty: InterfaceType::String,
620-
offset: 1024,
621-
};
611+
let entry = LowerMemoryEntryEvent { offset: 1024 };
622612
let return_event = LowerMemoryReturnEvent(ResultEvent::from_anyhow_result(&Ok(())));
623613

624614
rr_harness(
@@ -629,7 +619,6 @@ mod tests {
629619
},
630620
|replayer| {
631621
replayer.next_event_and(|e: LowerMemoryEntryEvent| {
632-
assert_eq!(e.ty, InterfaceType::String);
633622
assert_eq!(e.offset, 1024);
634623
Ok(())
635624
})?;

0 commit comments

Comments
 (0)