# The dataset ladder of the benchmark: one name for the size of a pass, from a smoke test to the full run. Sourced by bench/steps/lib.sh; # `preset NAME` sets the P_* variables, `bench/bench --list` prints the table. A flag of bench/bench (--runs, --cold-runs, ...) overrides a value. # # smoke seconds of CPU per engine: is the pipeline alive (50,000 orders; 10,000 articles). Numbers are not comparable with anything. # quick the development loop (200,000 orders; 25,000 articles): the engines' order is the 1M one, ratios drift # standard the release pass (1,000,000 orders; 50,000 articles, the slim tier of the published tables): the smallest size whose ratios are the published ones # release the one authoritative run on the benchmark host after a release (`bench/bench release`): the sizes of `standard` with the fewest repeats that keep every published # number, the stages of every table the docs print (store, updates, compression, stats, gap, search, cases, duckdb, generic, scaling, analytics); a cell of an engine # that is not under test comes from the cache of cells with its date and key in the table. Its minutes are in bench/out/BENCHMARKS.md, "Time budget of the release pass". # full the opt-in full run (10,000,000 orders; 218,058 articles, cities500): ratios between engines differ from 1M (a quarter of the pairs change order) # # Store: P_ROWS orders; P_CPUS_LIST thread budgets the questions are timed at; P_RUNS timed runs after P_WARMUPS untimed ones; P_COLD runs after emptying the memory, # P_RESTARTS runs after a container restart (Elasticsearch: ~20 s each); P_CHECK questions also timed the other way (restart against emptied; off unless named); # P_LOAD_SEC seconds a query is timed under each update rate of P_RATES; P_PROBES single-row changes timed until a query sees them; P_UPDATE_ENGINES the update paths measured. # Search: P_DOCS articles; P_ROUNDS min-max rounds; P_SECS the longest a cell is measured; P_ART_CLASSES / P_PLACE_CLASSES / P_PLACE_WLS what is run (empty: all of the tier); # P_TIER the tier of steps/articles.sh and places.sh. # Section (the update, delete and VACUUM stage): P_S_REPS repetitions of the 200,000-order point and P_S_REPS_BIG of the larger ones, P_CHURN seconds of each steady-churn and inserts-only window. # P_MIN_: minutes of the stage on the reference host: SETUP, WARM, COLD, UPDATES of a store pass that measures every # server (smoke, quick and standard measured; full is the 3.0 estimate), STORE_CACHED the store pass whose competitors come from the cache of cells, COMPRESSION, STATS, GAP, SEARCH the other stages (standard # measured, except SEARCH, the 3.0 pass: 12.8 min), SETS (the set-filter benchmark, steps/sets.sh) and EXTRAS (rollups, table writes, BM25 sizes, leaf types, facets, build cost, GPU: steps/extras.sh), standard and full only. PRESETS="smoke quick standard release full" DEFAULT_PRESET=standard ALL_UPDATE_ENGINES="pg sift sift_maint sift_table sift_table_maint es ch ch_mut ch_rmt" preset() { # NAME P_NAME=$1 case $1 in smoke) P_ROWS=50000 P_CPUS_LIST=3 P_RUNS=3 P_WARMUPS=1 P_COLD=1 P_RESTARTS=1 P_CHECK='' P_LOAD_SEC=3 P_BASELINE_SEC=3 P_PROBES=5 P_RATES=0,1000 P_UPDATE_ENGINES="pg sift sift_table es ch" P_PARALLEL=1 P_DOCS=10000 P_ROUNDS=1-1 P_SECS=0.5 P_ART_CLASSES="and or phrase" P_PLACE_CLASSES="prefix-1 name-region-country" P_PLACE_WLS="top" P_TIER=slim P_ANY_PLAN=1 P_MIN_SETUP=1 P_MIN_WARM=1 P_MIN_COLD=5 P_MIN_UPDATES=2 P_MIN_STORE_CACHED=2 P_MIN_SEARCH=3 P_S_REPS=1 P_S_REPS_BIG=1 P_CHURN=2 P_SECTION_SIZES=20000,50000 P_CASES=topn_text_key,calendar_month,cube_minmax_groupby,dict_equality,partitions_scan,dirty_share_few,bulk_copy_wal,lateral_first_row P_SIZES_SMALL=5000,10000 P_SIZES_BIG=20000 P_DUCKDB_BIG=20000 P_CASE_ROUNDS=1 P_CASE_RUNS=3 P_LANE_BUDGET=2 P_GENERIC_RUNS=1 P_SCALING_REPS=1 P_SCALING_PARTS=1,4 P_SCALING_WORKERS=0,1,3 P_ANALYTICS_RUNS=1 P_ANALYTICS_ORDERS=20000 P_MIN_SCALING=2 P_MIN_SIZES=3 P_MIN_ANALYTICS=3 ;; quick) P_ROWS=200000 P_CPUS_LIST=1,3 P_RUNS=5 P_WARMUPS=2 P_COLD=2 P_RESTARTS=1 P_CHECK='' P_LOAD_SEC=5 P_BASELINE_SEC=5 P_PROBES=10 P_RATES=0,1000,10000 P_UPDATE_ENGINES="pg sift sift_table es ch" P_PARALLEL=1 P_DOCS=25000 P_ROUNDS=2-2 P_SECS=1 P_ART_CLASSES="and or phrase mixed count filter" P_PLACE_CLASSES="prefix-1 prefix-3 whole-word name-region-country" P_PLACE_WLS="top boost filter count" P_TIER=slim P_MIN_SETUP=1 P_MIN_WARM=2 P_MIN_COLD=5 P_MIN_UPDATES=4 P_MIN_STORE_CACHED=3 P_MIN_SEARCH=6 ;; standard) P_ROWS=1000000 P_CPUS_LIST=1,3 P_RUNS=5 P_WARMUPS=2 P_COLD=2 P_RESTARTS=1 P_CHECK='' P_LOAD_SEC=5 P_BASELINE_SEC=5 P_PROBES=6 P_RATES=0,1000,10000 P_UPDATE_ENGINES="$ALL_UPDATE_ENGINES" P_PARALLEL=1 P_S_REPS=3 P_S_REPS_BIG=2 P_CHURN=10 P_CASE_ROUNDS=2 P_LANE_BUDGET=10 P_GENERIC_RUNS=3 P_DOCS=50000 P_ROUNDS=2-3 P_SECS=1 P_ART_CLASSES='' P_PLACE_CLASSES='' P_PLACE_WLS='' P_TIER=slim P_MIN_SETUP=2 P_MIN_WARM=5 P_MIN_COLD=7 P_MIN_UPDATES=10 P_MIN_STORE_CACHED=5 P_MIN_COMPRESSION=3 P_MIN_SECTION=18 P_MIN_STATS=1 P_MIN_GAP=1 P_MIN_SEARCH=14 P_MIN_CASES=40 P_MIN_DUCKDB=6 P_MIN_GENERIC=14 P_MIN_SETS=25 P_MIN_EXTRAS=100 ;; release) # the keys of the cached cells are those of `standard` (runs, warm-ups, cold runs, thread budgets, rates): the cells of the engines not under test are carried, the rest is cut where no number depends on it P_ROWS=1000000 P_CPUS_LIST=1,3 P_RUNS=5 P_WARMUPS=2 P_COLD=2 P_RESTARTS=1 P_CHECK='' P_LOAD_SEC=5 P_BASELINE_SEC=5 P_PROBES=6 P_RATES=0,1000,10000 P_UPDATE_ENGINES="$ALL_UPDATE_ENGINES" P_PARALLEL=1 P_S_REPS=1 P_S_REPS_BIG=1 P_CHURN=5 P_CASE_ROUNDS=1 P_CASE_RUNS=3 P_LANE_BUDGET=4 P_GENERIC_RUNS=3 P_DOCS=50000 P_ROUNDS=2-2 P_SECS=1 P_ART_CLASSES='' P_PLACE_CLASSES='' P_PLACE_WLS='' P_TIER=slim P_SCALING_REPS=3 P_SCALING_PARTS=1,16,256,4096 P_SCALING_WORKERS=0,1,3 P_ANALYTICS_RUNS=3 P_SIZES_SMALL=25000,100000 P_SIZES_BIG=10000000 P_DUCKDB_BIG=10000000 P_MIN_SETUP=2 P_MIN_WARM=5 P_MIN_COLD=7 P_MIN_UPDATES=10 P_MIN_STORE_CACHED=5 P_MIN_COMPRESSION=3 P_MIN_SECTION=8 P_MIN_STATS=1 P_MIN_GAP=1 P_MIN_SEARCH=12 P_MIN_CASES=21 P_MIN_DUCKDB=5 P_MIN_GENERIC=14 P_MIN_SCALING=6 P_MIN_ANALYTICS=8 P_MIN_SIZES=13 ;; full) P_ROWS=10000000 P_CPUS_LIST=1,3 P_RUNS=7 P_WARMUPS=3 P_COLD=3 P_RESTARTS=3 P_CHECK=06 P_LOAD_SEC=15 P_BASELINE_SEC=10 P_PROBES=20 P_RATES=0,1000,10000 P_UPDATE_ENGINES="$ALL_UPDATE_ENGINES" P_PARALLEL=1 P_DOCS=ALL P_ROUNDS=2-3 P_SECS=2 P_ART_CLASSES='' P_PLACE_CLASSES='' P_PLACE_WLS='' P_TIER=full P_MIN_SETUP=10 P_MIN_WARM=25 P_MIN_COLD=30 P_MIN_UPDATES=60 P_MIN_STORE_CACHED=40 P_MIN_COMPRESSION=8 P_MIN_STATS=14 P_MIN_GAP=8 P_MIN_SEARCH=60 P_MIN_SETS=25 P_MIN_EXTRAS=100 ;; *) return 1 ;; esac }