canwu-sim 0.13.1

Deterministic simulation runtime, scheduling, persistence, replay, and plugins for Canwu
Documentation
use canwu_sim::{
    format8_paged_checkpoint_scale_probe, format8_patricia_scale_probe,
    format8_trace_locator_scale_probe,
};
use std::time::Instant;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let keys = std::env::args()
        .nth(1)
        .map_or(Ok(1_000_000_usize), |value| value.parse())?;
    let started = Instant::now();
    let metrics = format8_patricia_scale_probe(keys)?;
    let elapsed_ms = started.elapsed().as_millis();
    let locator_started = Instant::now();
    let checkpoint_metrics = format8_paged_checkpoint_scale_probe(keys)?;
    let locator_elapsed_ms = locator_started.elapsed().as_millis();
    let locator_metrics = &checkpoint_metrics.decision_locator;
    let trace_started = Instant::now();
    let trace_metrics = format8_trace_locator_scale_probe(keys)?;
    let trace_elapsed_ms = trace_started.elapsed().as_millis();
    let structural_per_entry = metrics
        .primary
        .structural_bytes
        .checked_div(metrics.primary.entries.max(1))
        .unwrap_or(0);
    let resident_per_entry = metrics
        .primary
        .estimated_resident_bytes
        .checked_div(metrics.primary.entries.max(1))
        .unwrap_or(0);
    let total_patricia_structural_per_record = metrics
        .total_patricia_structural_bytes
        .checked_div(metrics.records.max(1))
        .unwrap_or(0);
    let total_patricia_resident_per_record = metrics
        .total_patricia_estimated_resident_bytes
        .checked_div(metrics.records.max(1))
        .unwrap_or(0);
    let gates = serde_json::json!({
        "primary_nodes_at_most_2n_minus_1": metrics.primary.logical_nodes <= metrics.primary.entries.saturating_mul(2).saturating_sub(1),
        "encoded_structural_bytes_per_entry_at_most_256": structural_per_entry <= 256,
        "resident_structural_bytes_per_entry_at_most_384": resident_per_entry <= 384,
        "all_patricia_encoded_bytes_per_record_at_most_640": total_patricia_structural_per_record <= 640,
        "all_patricia_resident_bytes_per_record_at_most_896": total_patricia_resident_per_record <= 896,
        "p99_depth_at_most_64": metrics.primary.depth_p99 <= 64,
        "max_depth_at_most_256": metrics.primary.max_depth <= 256,
        "decision_locator_pages_are_bounded": locator_metrics.max_page_entries <= 64 && locator_metrics.max_page_encoded_bytes <= 1024 * 1024,
        "decision_restart_queries_completed": locator_metrics.exact_restart_queries > 0,
        "decision_gc_reachability_is_complete": locator_metrics.reachable_blob_locators == locator_metrics.entries,
        "real_paged_checkpoint_pages_are_bounded": checkpoint_metrics.max_state_page_bytes <= 4 * 1024 * 1024,
        "real_paged_checkpoint_directory_is_paged": checkpoint_metrics.decision_directory_pages == locator_metrics.locator_pages.div_ceil(1_024),
        "real_paged_checkpoint_restore_matches": checkpoint_metrics.restored_root_matches,
        "real_paged_checkpoint_replay_matches": checkpoint_metrics.replayed_root_matches,
        "real_paged_checkpoint_repeat_delta_is_empty": checkpoint_metrics.repeat_delta_pages == 0,
        "real_paged_checkpoint_repeat_reads_only_manifest_paths": checkpoint_metrics.repeat_provider_calls
            <= checkpoint_metrics.decision_directory_pages.saturating_add(16),
        "real_paged_checkpoint_single_page_change_reads_only_touched_paths": checkpoint_metrics.single_page_change_provider_calls
            <= checkpoint_metrics.decision_directory_pages.saturating_add(20),
        "trace_heavy_locator_uses_indexed_commit_path": trace_metrics.hot_trace_entries == keys as u64
            && trace_metrics.indexed_lookup_samples > 0
            && trace_metrics.archive_commit_entries == 1
            && trace_metrics.target_archived,
    });
    let passed = gates
        .as_object()
        .is_some_and(|values| values.values().all(|value| value == true));
    println!(
        "{}",
        serde_json::to_string_pretty(&serde_json::json!({
            "format": 8,
            "keys": keys,
            "elapsed_ms": elapsed_ms,
            "metrics": metrics,
            "decision_locator": {
                "elapsed_ms": locator_elapsed_ms,
                "metrics": locator_metrics,
                "estimated_resident_structural_bytes_per_entry": locator_metrics
                    .estimated_resident_structural_bytes
                    .checked_div(locator_metrics.entries.max(1))
                    .unwrap_or(0),
                "locator_pages": locator_metrics.locator_pages,
            },
            "paged_checkpoint": checkpoint_metrics,
            "trace_heavy_locator": {
                "elapsed_ms": trace_elapsed_ms,
                "metrics": trace_metrics,
            },
            "structural_bytes_per_entry": structural_per_entry,
            "estimated_resident_bytes_per_entry": resident_per_entry,
            "all_patricia_structural_bytes_per_record": total_patricia_structural_per_record,
            "all_patricia_estimated_resident_bytes_per_record": total_patricia_resident_per_record,
            "gates": gates,
            "passed": passed,
        }))?
    );
    if !passed {
        return Err("one or more Format-8 Patricia scale gates failed".into());
    }
    Ok(())
}