tiny.profiling.experiment.model
Defined in experiment.
API (26)
Actions
Public operations.
Types and contracts
Public types and contracts.
Values and defaults
Public values and defaults.
confidencedefault_calibration_pairsdefault_maximum_evaluation_pairsdefault_minimum_evaluation_pairsmaximum_pairsmaximum_plan_bytesnormal_critical_sumpowerreceipt_schemaschema
Source
Source: src/profiling/experiment/model.zig
zig
const std = @import("std");const profiling = @import("../root.zig");const scenario = profiling.scenario;pub const schema = "tiny.profiling.experiment/v1";pub const receipt_schema = "tiny.profiling.experiment-receipt/v1";pub const maximum_plan_bytes: usize = 1024 * 1024;pub const maximum_pairs: usize = 1000;pub const default_calibration_pairs: usize = 8;pub const default_minimum_evaluation_pairs: usize = 8;pub const default_maximum_evaluation_pairs: usize = 100;pub const confidence: f64 = 0.95;pub const power: f64 = 0.80;pub const normal_critical_sum: f64 = 2.801_585_218_112_968;pub const Metric = enum { wall_ns, max_rss_kib, pub fn parse(value: []const u8) ?Metric { if (std.mem.eql(u8, value, "wall_ns")) return .wall_ns; if (std.mem.eql(u8, value, "max_rss_kib")) return .max_rss_kib; return null; } pub fn unit(self: Metric) []const u8 { return switch (self) { .wall_ns => "nanoseconds", .max_rss_kib => "kibibytes", }; }};pub const Build = struct { argv: []const []const u8, artifact: []const u8, cwd: ?[]const u8 = null,};pub const Ref = struct { name: []const u8, build: ?Build = null,};pub const Variant = union(enum) { binary: []const u8, git_ref: Ref,};pub const Design = struct { calibration_pairs: usize = default_calibration_pairs, minimum_evaluation_pairs: usize = default_minimum_evaluation_pairs, maximum_evaluation_pairs: usize = default_maximum_evaluation_pairs, pub fn validate(self: Design) !void { if (self.calibration_pairs < 2 or self.calibration_pairs > maximum_pairs) { return error.InvalidCalibrationPairs; } if (self.minimum_evaluation_pairs < 2 or self.minimum_evaluation_pairs > maximum_pairs) { return error.InvalidMinimumEvaluationPairs; } if (self.maximum_evaluation_pairs < self.minimum_evaluation_pairs or self.maximum_evaluation_pairs > maximum_pairs) { return error.InvalidMaximumEvaluationPairs; } }};pub const Plan = struct { name: []const u8, scenario: scenario.Definition, baseline: Variant, candidate: Variant, metric: Metric, practical_effect_percent: f64, seed: u64, design: Design = .{}, pub fn validate(self: Plan) !void { if (self.name.len == 0 or self.name.len > scenario.maximum_string_bytes) { return error.InvalidExperimentName; } if (!std.math.isFinite(self.practical_effect_percent) or self.practical_effect_percent <= 0 or self.practical_effect_percent > 100) { return error.InvalidPracticalEffect; } try self.design.validate(); try validateScenario(self.scenario); try validateVariant(self.baseline, self.scenario); try validateVariant(self.candidate, self.scenario); }};fn validateVariant( variant: Variant, definition: scenario.Definition,) !void { switch (variant) { .binary => |path| { if (path.len == 0 or path.len > scenario.maximum_string_bytes) { return error.InvalidVariantBinary; } }, .git_ref => |value| { if (value.name.len == 0 or value.name.len > scenario.maximum_string_bytes) { return error.InvalidVariantRef; } if (definition.input == .command and value.build == null) { return error.RefCommandRequiresBuild; } if (value.build) |build| { if (build.argv.len == 0 or build.argv.len > scenario.maximum_arguments or build.artifact.len == 0) { return error.InvalidVariantBuild; } } }, }}fn validateScenario(definition: scenario.Definition) !void { switch (definition.input) { .catalog => {}, .command => |argv| { for (argv) |argument| { if (std.mem.indexOf(u8, argument, "{binary}") != null) break; } else return error.MissingBinaryPlaceholder; }, }}pub const Phase = enum { calibration, evaluation,};pub const Side = enum { baseline, candidate,};pub const Verdict = enum { faster, slower, equivalent, inconclusive, unsupported,};pub const Support = enum { supported, budget_insufficient, setup_failed, reset_failed, execution_failed, oracle_failed, metric_unavailable, invalid_metric_value, layout_unavailable,};pub const Interval = struct { low_percent: f64, high_percent: f64,};pub const SamplePlan = struct { calibration_standard_deviation_log_ratio: f64, calculated_evaluation_pairs: usize, evaluation_pairs: usize, within_budget: bool,};test "profiling experiment model validates fixed two-stage bounds" { const definition = scenario.Definition{ .name = "startup", .input = .{ .command = &.{"{binary}"} }, }; const plan = Plan{ .name = "startup comparison", .scenario = definition, .baseline = .{ .binary = "base" }, .candidate = .{ .binary = "candidate" }, .metric = .wall_ns, .practical_effect_percent = 5, .seed = 42, }; try plan.validate(); var invalid = plan; invalid.design.maximum_evaluation_pairs = 1; try std.testing.expectError( error.InvalidMaximumEvaluationPairs, invalid.validate(), );}Source: src/profiling/experiment/root.zig:3
zig
pub const model = @import("model.zig");Audit
| Definitions | 27 |
|---|---|
| Public names | 27 |
| Members | 44 |
| Version | 26.7.0 |
| Revision | daab053ee433 |