cargo xflowey

To implement various developer workflows (both locally, as well as in CI), the OpenVMM project relies on flowey: a custom, in-house Rust library/framework for writing maintainable, cross-platform automation.

cargo xflowey is a cargo alias that makes it easy for developers to run flowey-based pipelines locally.

Some particularly notable pipelines:

  • cargo xflowey build-igvm - primarily dev-tool used to build OpenHCL IGVM files locally
  • cargo xflowey restore-packages - restores external packages needed to compile and run OpenVMM / OpenHCL
  • cargo xflowey vmm-tests-run - build and run VMM tests with automatic artifact discovery. Use --filter "test(name)" to run specific tests
  • cargo xflowey vmm-perf - build and run the standalone VMM.Perf profiles
  • cargo xflowey cca-tests - build and run ARM64 CCA tests using software emulator

VMM.Perf

Run all VMM.Perf profiles on a Linux or Windows x64 host with:

cargo xflowey vmm-perf

By default, scratch files are created under target/vmm_perf/t and retained results are written to target/vmm_perf/results. Use --dir to select a different root directory with the same t and results layout. The default VM shape is 16 virtual processors and 64 GiB of memory. Hosts with fewer than 16 logical processors or 64 GiB of available memory must use --vmm-perf-vmsizes to select a smaller VM shape.

To run one profile:

cargo xflowey vmm-perf --profile fio

To run explicit VM sizes:

cargo xflowey vmm-perf \
  --profile fio \
  --vmm-perf-vmsizes 'CpuCount=2,MemoryMB=4096' \
  --vmm-perf-vmsizes 'CpuCount=8,MemoryMB=16384'

The command selects linux-x64-gnu on Linux and windows-x64 on Windows. Use --target linux-x64-musl when the Linux host requires a statically linked runner, such as the MSHV Azure Linux pool.

xflowey vs xtask

In a nutshell:

  • cargo xtask: implements novel, standalone tools/utilities
  • cargo xflowey: orchestrates invoking a sequence of tools/utilities, without doing any non-trivial data processing itself