Add parallel scaling to the profile-store benchmark - #164
Merged
Conversation
- add per-engine workers for concurrent benchmark phases - coordinate worker starts for accurate parallel timing - preserve update ordering and cross-engine checksum validation - support multiple parallelism levels with dedicated reports and charts - enable Server GC and improve SQLite concurrent access - document workload policy, runtime configuration, and reproducible reference runs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR turns the profile-store benchmark into a concurrency-aware benchmark harness capable of measuring ZoneTree, RocksDB, SQLite, and MySQL consistently from p1 through highly parallel workloads.
Parallelism is now a first-class workload dimension rather than an external variation. A single command can run multiple profile counts and parallelism levels, produce isolated reports for each combination, and compare every engine under the same execution model.
Highlights
--parallelismwith support for comma-separated levels such as1,4,8,16.Worker Model
The engine lifecycle and operation execution are now separated:
IProfileStoreEngineowns initialization, stabilization, settlement, verification, and storage lifetime.IProfileStoreEngineWorkerowns measured read, query, insert, and update operations.ZoneTree and RocksDB workers share their engine’s opened storage handles. SQLite and MySQL workers use independent connections and prepared-command sets.
This preserves each engine’s natural concurrency model without forcing a lowest-common-denominator implementation.
Measurement Integrity
Parallel phases wait until every worker reaches a common start gate. The stopwatch starts immediately before all workers are released together.
The benchmark also:
Checksums are intentionally scoped to a specific parallelism level because worker partitioning changes their final combination.
Results and Reports
P1 retains the existing directory layout:
Higher parallelism levels receive dedicated directories:
Parallelism is included in report configuration, titles, chart descriptions, child-run paths, and curated reference paths.
Example:
Additional Changes