lib/bench/src/root.zig

daab053ee43316e1809a84551d573ddd1e5bf3d2

  1 //! A microbenchmark result moves with heap and stack layout, with the cache
  2 //! state the run starts in, and with the resolution of the clock that times it.
  3 //! Running the benchmark again as its own child process a set number of times
  4 //! tells variance coming from the environment apart from variance coming from
  5 //! the program itself. Each repetition is a *multi-process trial*. One timed
  6 //! run of the batched benchmark body, recorded as nanoseconds per evaluation,
  7 //! is a *sample*. Geometric batching bounds what timing quantization can do to
  8 //! the result by growing the evaluations inside one sample by a factor between
  9 //! two and ten, until a sample spans a thousand times the clock resolution.
 10 //!
 11 //! Resampling the collected samples gives a range for the median and for the
 12 //! other reported statistics, called a *bootstrap confidence interval*. Those
 13 //! intervals leave systematic shifts, correlation between neighboring samples,
 14 //! and coverage errors uncorrected. Every later statistics run takes its
 15 //! regions out of storage, the *analysis scratch*. The caller sizes the
 16 //! analysis scratch and hands it over once, so computing statistics takes
 17 //! nothing further from an allocator. The workload under measurement can still
 18 //! move memory of its own.
 19 
 20 pub const coz = @import("coz");
 21 pub const floor = @import("bench_floor");
 22 pub const memtrace = @import("memtrace");
 23 pub const pretty = @import("pretty");
 24 pub const stabilizer = @import("stabilizer");
 25 pub const tracy = @import("tracy");
 26 pub const recovery = @import("recovery.zig");
 27 const instrumentation = @import("instrumentation.zig");
 28 const timing = @import("timing.zig");
 29 pub const statistics = @import("stats/root.zig");
 30 const stats = statistics;
 31 const event = @import("event.zig");
 32 const evidence = @import("evidence.zig");
 33 const output = @import("output.zig");
 34 const suite = @import("suite.zig");
 35 const allocation = @import("allocation.zig");
 36 pub const parse = @import("parse.zig");
 37 const jsonl_mod = @import("jsonl.zig");
 38 const compare_mod = @import("compare/root.zig");
 39 const metadata_mod = @import("metadata.zig");
 40 const summary_mod = @import("summary.zig");
 41 
 42 pub const CozSession = instrumentation.CozSession;
 43 pub const Capability = instrumentation.Capability;
 44 pub const CapabilityName = instrumentation.CapabilityName;
 45 pub const CapabilityState = instrumentation.CapabilityState;
 46 pub const Phase = instrumentation.Phase;
 47 pub const ProfilingReport = instrumentation.ProfilingReport;
 48 pub const ProfilingSession = instrumentation.ProfilingSession;
 49 pub const ProfilingSessionOptions = instrumentation.ProfilingSessionOptions;
 50 pub const callWithStackPad = instrumentation.callWithStackPad;
 51 pub const phaseAt = instrumentation.phaseAt;
 52 pub const rerandomizeLayout = instrumentation.rerandomizeLayout;
 53 pub const touchStackPad = instrumentation.touchStackPad;
 54 pub const writePerfCounterResult = instrumentation.writePerfCounterResult;
 55 pub const writeProfilingReport = instrumentation.writeProfilingReport;
 56 
 57 pub const nowNs = timing.nowNs;
 58 pub const nowInstant = timing.nowInstant;
 59 pub const readInstant = timing.readInstant;
 60 pub const realNowNs = timing.realNowNs;
 61 pub const probeClock = timing.probeClock;
 62 pub const ClockProbe = timing.ClockProbe;
 63 pub const elapsedNs = timing.elapsedNs;
 64 pub const elapsedNsBetween = timing.elapsedNsBetween;
 65 pub const nsOrZero = timing.nsOrZero;
 66 pub const saturatingU64 = timing.saturatingU64;
 67 pub const saturatingI64 = timing.saturatingI64;
 68 
 69 pub const Config = suite.Config;
 70 pub const AllocationAttribution = suite.AllocationAttribution;
 71 pub const AutomaticEvaluation = suite.AutomaticEvaluation;
 72 pub const Evaluation = suite.Evaluation;
 73 pub const AutomaticSelection = suite.AutomaticSelection;
 74 pub const EvaluationSelection = suite.EvaluationSelection;
 75 pub const RunOptions = suite.RunOptions;
 76 pub const Result = suite.Result;
 77 pub const JsonlOptions = suite.JsonlOptions;
 78 pub const AllocationCounts = allocation.Counts;
 79 pub const CountingAllocator = allocation.CountingAllocator;
 80 pub const BootstrapConfig = stats.BootstrapConfig;
 81 pub const BootstrapConfidenceIntervals = stats.BootstrapConfidenceIntervals;
 82 pub const ConfidenceInterval = stats.ConfidenceInterval;
 83 pub const SampleStats = stats.SampleStats;
 84 pub const StatisticsLimits = stats.Limits;
 85 pub const StatisticsCapacity = stats.Capacity;
 86 pub const StatisticsCapacityError = stats.CapacityError;
 87 pub const StatisticsStorage = stats.Storage;
 88 pub const StatisticsStorageStatus = stats.StorageStatus;
 89 pub const StatisticsStorageExhaustion = stats.Exhaustion;
 90 pub const ComparisonLimits = compare_mod.Limits;
 91 pub const ComparisonCapacity = compare_mod.Capacity;
 92 pub const ComparisonCapacityError = compare_mod.CapacityError;
 93 pub const ComparisonStorage = compare_mod.Storage;
 94 pub const ComparisonStorageStatus = compare_mod.StorageStatus;
 95 pub const ComparisonStorageExhaustion = compare_mod.StorageExhaustion;
 96 pub const ComparisonError = compare_mod.StorageError;
 97 pub const IndexedDeltaTotals = stats.IndexedDeltaTotals;
 98 pub const IndexedMemoryTotals = stats.IndexedMemoryTotals;
 99 pub const SampleSetCursor = stats.SampleSetCursor;
100 pub const sampleSetValueCapacity = stats.sampleSetValueCapacity;
101 pub const sampleSets = stats.sampleSets;
102 pub const computeSampleStats = stats.computeSampleStats;
103 pub const computeSampleStatsWithBootstrap = stats.computeSampleStatsWithBootstrap;
104 pub const nsPerUnit = stats.nsPerUnit;
105 pub const valuePerUnit = stats.valuePerUnit;
106 pub const nsPerFloatUnit = stats.nsPerFloatUnit;
107 pub const valuePerFloatUnit = stats.valuePerFloatUnit;
108 
109 pub const BuildMetadata = metadata_mod.BuildMetadata;
110 pub const RunStart = event.RunStart;
111 pub const RunEnd = event.RunEnd;
112 pub const writeRunStart = event.writeRunStart;
113 pub const writeBootstrapConfidenceIntervals = event.writeBootstrapConfidenceIntervals;
114 pub const writeBuildMetadata = metadata_mod.writeBuildMetadata;
115 pub const writeSampleEvent = event.writeSampleEvent;
116 pub const writeRunEnd = event.writeRunEnd;
117 pub const writeSampledResultFields = event.writeSampledResultFields;
118 pub const writeBenchmarkEvidence = evidence.writeBenchmarkEvidence;
119 pub const jsonl = jsonl_mod;
120 pub const currentBuildMetadata = metadata_mod.currentBuildMetadata;
121 pub const compare = compare_mod;
122 pub const summary = summary_mod;
123 
124 pub const BenchFn = suite.BenchFn;
125 pub const TeardownFn = suite.TeardownFn;
126 pub const Suite = suite.Suite;
127 pub const time = suite.time;
128 
129 pub const section = output.section;
130 pub const stdout = output.stdout;
131 pub const stderr = output.stderr;
132 pub const writeStdoutFmt = output.writeStdoutFmt;
133 pub const writeStderrFmt = output.writeStderrFmt;
134 pub const writeStdoutDoc = output.writeStdoutDoc;
135 pub const writeStderrDoc = output.writeStderrDoc;