Skip to content

Define a suite ​

A SoftwareSuite names the packages, workloads, collectors and versions to measure — a Julia configuration object, not a package to install.

Three objects ​

  • FeatureSpec — one workload file, collector and settings.

  • PackageSuite — a target package, its worker environment and its features.

  • SoftwareSuite — the participating package suites and comparisons.

Load and inspect ​

From examples/bibliography/ in a prepared checkout:

julia
using PerfChecker, BenchmarkTools, Chairmarks
suite = load_software_suite("suite.jl")
plan = plan_suite(suite; profile = :quick)
print_suite_plan(plan)

Planning lists checks. It does not measure anything.

Select and run ​

julia
selected = filter_suite_plan(plan;
    packages = "Bibliography", features = :export_bibtex, backends = [:benchmark])
print_suite_plan(selected)

report_directory = mktempdir(abspath("results"); prefix = "export-", cleanup = false)
result = run_suite_repl(selected; reports = report_directory, strict = false,
    overrides = Dict{Symbol,Any}(:threads => 1, :samples => 50, :evals => 1, :seconds => 0.5))

A new directory preserves earlier measurements. Read suite-report.md first.

Workload lifecycle ​

text
prepare input → measure operation → check result → release resources
  • perf_setup() prepares state.

  • perf_workload(state) is the measured operation.

  • perf_oracle(state, result) checks the actual result. Add it — a benchmark without an oracle is not_checked.

  • perf_synchronize(state, result) waits for async work, inside the measurement.

  • perf_cleanup(state) releases resources.

Preparation and verification are outside the timed operation. The default state_policy = :fresh gives each operation new state; fresh timing cases require evals = 1. Use :reuse only when repeated mutation on one state is the intended workload.

Why the worker has its own environment ​

The controller holds PerfChecker and the interface you use. worker_environment is a small seed project for the measurement worker — collectors and workload dependencies only.

  • This keeps Oxygen, Pluto or plotting compatibility from constraining a historical target.

  • A worker does not import PerfChecker unless PerfChecker is the target.

  • Native item execution needs a prepared test environment instead.

Do not substitute one environment for the other.

Profiles ​

  • :quick — current local sources.

  • :ci — current sources plus compatibility boundaries.

  • :historical — known releases from the package suite.

  • :release — released targets only.

Add candidates with SuiteCandidate and references with ComparisonPolicy. See Comparison options.

Recorded examples ​

Bibliography export samples grouped by nine tagged versions
The same export workload can be repeated across a version matrix. Each dot is one recorded timing. The quick selection above measures just the pinned development revision; it does not produce this nine-version history.

Next ​

Compare two versions.

Open source · Report an issue · Contributions welcome