Suvi is a tool for crash consistency testing of PM file systems. Suvi implements a testing pipeline that traces PM and NVMe accesses of a file system, then replays the trace to simulates crashes and to create crash images. Based on the state contained in the crash images, Suvi can automatically check for crash consistency properties such as atomicity.
Suvi's build environment is managed with Nix.
Install Nix and enable flakes (experimental-features = nix-command flakes), then run:
# Build Suvi (creates a symlink `result`)
nix build .
# Build test VMs
vms=$(nix build --print-out-paths --no-link .#fs-testing.vms)
# Test a file system (creates a folder `vm_nova`)
result/bin/suvi run $vms/vm_nova.yaml fs-testing/tests/test_*.yaml
# Inspect results
result/bin/suvi analyze-bulk vm_nova/test_*
result/bin/suvi analyze-result vm_nova/test_hello-world# Enter a development environment.
nix develop
# Build Suvi
cargo build --release
cargo build
# Run Suvi
target/debug/suviNote that by default, the release builds of the tracer plugins are used.
Suvi is released under the MIT license, see LICENSE for details.