Custom Benchmark Profiles
Custom profiles are YAML recipes that describe a reproducible benchmark run. They live in `plugins/VoxelBench/custom_benchmarks/`, ship with three presets, and behave exactly like a `/bench start` from the operator's perspective.
Quick start
-
List the bundled profiles:
/bench custom list -
Inspect one:
/bench custom info standard -
Run it:
/bench custom run standard -
Clone & tweak: copy
standard.ymltomy-profile.yml, edit any parameter, then:/bench custom reload /bench custom run my-profile
No restart needed — reload re-reads the entire directory.
Bundled profiles
| File | Purpose |
|---|---|
standard.yml | Mirror of /bench start. Clone this if you want to "fork" the canonical baseline. |
showcase.yml | Longer run, more demo-friendly. |
example.yml | Heavily-annotated reference. Read this before writing your own. |
YAML schema
# Display name shown in /bench custom list and reports.
name: "My Custom Benchmark"
# One-line description (appears in /bench custom info).
description: "Specialised for redstone-heavy servers."
# Optional metadata — surfaced in shared reports.
author: "YourName"
version: 1
tags: [redstone, technical-mc]
# When true, the run's report is submitted to the backend.
# When false (default), results stay local.
submit: false
# Run-wide options.
options:
# When true (default), use a fresh disposable flat world per run.
# Set to false to use the pinned target-world (see /bench world set).
auto-temp-world: true
# Ordered list of tests. Each entry must reference a test ID that
# exists in the registry (built-in or extension). Run /bench tests list
# to see every available ID.
tests:
- id: redstone
params:
pistonCount: 3200
durationSeconds: 60
- id: chunkLoading
params:
chunksToLoad: 10000
dispersedZones: 16
- id: singleCoreBenchmark
params:
durationSeconds: 30
Parameter reference
Every test's accepted parameters are derived from its declared
ParamSpecs. To see what a test accepts:
/bench custom info <profile-name>
…or for ad-hoc inspection:
/bench test <id> <TAB>
Tab-completion shows the parameter names, types, and defaults.
Sharing profiles
A profile is just a YAML file — share it via Pastebin, gist, Discord
attachment, whatever. The backend computes a profileHash over the
canonical recipe so two operators running the same YAML get directly
comparable results in shared reports.
Built-in test IDs (subset)
| Category | IDs |
|---|---|
| Hardware | disk, network, memory, singleCoreBenchmark, multiCore |
| Chunks & terrain | chunkLoading, chunkTicking, worldSave, lightingUpdate |
| Entities | mobSpawn, mobAI, mobPathfinding, villager, combatSimulation |
| Mechanics | redstone, hopper, explosion, blockPhysics, liquidPhysics, tickingTileEntity, boneMealGrowth |
| Other | collision |
Run /bench tests list for the full live catalogue including any
extension tests registered on your server.
Common pitfalls
- Test ID typo →
/bench custom infowill mark the entry with an error. The run refuses to start until every entry is valid. - Numeric parameter out of range → clamped to the test's declared range, with a warning to the sender. The run still completes.
auto-temp-world: falsewithout a pinned world → the run refuses to start. Either set one with/bench world setor flip the option back totrue.