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;