tiny.profiling.analyze.model
Defined in analyze.
API (28)
Actions
Public operations.
Run.causalCountRun.failedRun.memoryMetricCountRun.metricCountRun.passedRun.ranWorkload.analysisArtifactsWorkload.structuredAnalysisStatefindWorkloadpercentChangesameOptionalStringsameStringsworkloadWallDistribution
Types and contracts
Public types and contracts.
ComparisonComparisonSupportCounterShiftEnergyShiftNamedCaptureOptionsOrderEffectRowOrderEffectStatusOrderEffectSupportOrderEffectsRunWorkloadWorkloadComparisonSkipWorkloadComparisonSupport
Values and defaults
Public values and defaults.
Source
Source: src/profiling/environment.zig:27
zig
pub const ComparisonSupport = enum { supported, missing_optimize, optimize_mismatch, missing_host, os_mismatch, arch_mismatch, cpu_count_mismatch, hostname_mismatch, kernel_mismatch, cpu_model_mismatch, cpu_frequency_policy_missing, cpu_frequency_policy_mismatch, process_cpu_affinity_missing, process_cpu_affinity_mismatch, process_memory_affinity_missing, process_memory_affinity_mismatch,};Source: src/profiling/measurement.zig:125
zig
pub const ComparisonSupport = enum { supported, scope_mismatch, measurement_order_mismatch, warmup_design_mismatch, capture_mismatch, capture_perturbation_mismatch, perf_stat_summary_missing, perf_stat_events_mismatch, perf_stat_groups_mismatch, perf_stat_design_mismatch,};Source: src/profiling/priority.zig:16
zig
pub const WorkloadComparison = struct { workload: []const u8, baseline_wall_ns: u64, candidate_wall_ns: u64, wall_percent_change: f64, baseline_wall_samples: usize = 1, candidate_wall_samples: usize = 1, baseline_wall_distribution: []const u8 = "point_estimate", candidate_wall_distribution: []const u8 = "point_estimate", wall_effect_low_percent: ?f64 = null, wall_effect_high_percent: ?f64 = null, wall_status: []const u8 = "point_regression_candidate", baseline_max_rss_kib: ?i64, candidate_max_rss_kib: ?i64, rss_percent_change: ?f64, wall_threshold_percent: f64, rss_threshold_percent: f64, kind: []const u8,};Source: src/profiling/measurement.zig:10
zig
pub const wall_statistic = "mean_per_execution";Source: src/profiling/analyze/model.zig
zig
const std = @import("std");const capture = @import("capture");const sys = @import("sys");const baseline = @import("../root.zig").baseline;const catalog = @import("../root.zig").catalog;const coz = @import("../capture/root.zig").coz;const environment = @import("../root.zig").environment;const host = @import("../root.zig").host;const json = @import("../root.zig").json;const measurement = @import("../root.zig").measurement;const memory = @import("../root.zig").memory;const metric = @import("../root.zig").metric;const order = @import("../root.zig").order;const perturbation = @import("../root.zig").perturbation;const priority = @import("../root.zig").priority;const reducer = @import("../root.zig").reduction;pub const workload_wall_statistic = measurement.wall_statistic;pub const Options = struct { input: []const u8, baseline_input: ?[]const u8 = null, json: bool = false, top: usize = 10, regression_threshold_percent: f64 = 10,};pub const Workload = struct { name: []const u8, package: []const u8, step: []const u8, surface: catalog.Surface = .profile, command_argv: []const []const u8 = &.{}, command_cwd: ?[]const u8 = null, command_identity_recorded: bool = false, acquisition: order.Context = .{ .blocked = .{} }, scope: []const u8 = host.scope, scope_recorded: bool = false, causal_enabled: bool = false, tracy_enabled: bool = false, allocations_enabled: bool = false, profiler_configuration_recorded: bool = false, status: []const u8, exit_code: i64, wall_ns: u64, total_wall_ns: u64 = 0, execution_count: usize = 1, executions: []const measurement.Execution = &.{}, measurement_recorded: bool = false, wall_distribution: ?measurement.WallDistribution = null, warmup_count: usize = 0, warmups: []const measurement.Execution = &.{}, warmup_recorded: bool = false, warmup_total_wall_ns: u64 = 0, warmup_distribution: ?measurement.WallDistribution = null, warmup_stdout_path: ?[]const u8 = null, warmup_stderr_path: ?[]const u8 = null, resource_usage_source: ?sys.process.ResourceUsageSource = null, max_rss_kib: ?i64 = null, user_s: ?f64 = null, system_s: ?f64 = null, minor_page_faults: ?f64 = null, major_page_faults: ?f64 = null, voluntary_context_switches: ?f64 = null, involuntary_context_switches: ?f64 = null, result_path: ?[]const u8, allocation_repetitions_path: ?[]const u8 = null, profiler_artifacts: ?measurement.ExecutionArtifacts = null, benchmark_process_domain: reducer.DomainDeclaration = .{ .benchmark_surface = false, .direct_execution = false, .host_profiler = false, .tracy = false, .causal = false, .allocation_trace = false, .capture_control = false, }, benchmark_process_reduction: reducer.Result = .{ .not_applicable = .{ .reason = .fewer_than_two_executions, .process_count = 0, } }, metrics: []const metric.Metric = &.{}, memory_metrics: []const memory.Metric = &.{}, causal: []const coz.Result = &.{}, captures: []const host.Capture = &.{}, perf_stat: ?capture.perfstat.Summary = null, capture_perturbation: ?perturbation.Measurement = null, capture_perturbation_summary: ?perturbation.Summary = null, pub fn analysisArtifacts(self: Workload) ?measurement.ExecutionArtifacts { if (self.executions.len == 1) { if (self.executions[0].artifacts) |artifacts| return artifacts; } return self.profiler_artifacts; } pub fn structuredAnalysisState(self: Workload) []const u8 { if (self.profiler_artifacts != null) return "profiler_capture_receipt"; if (self.executions.len > 1) { return switch (self.benchmark_process_reduction) { .complete => "multiple_execution_receipts_reduced", .not_applicable => "unavailable", }; } if (self.executions.len == 1 and self.executions[0].artifacts != null) { return "single_execution_receipt"; } return "unavailable"; }};pub const CounterShift = struct { workload: []const u8, event: []const u8, baseline_value: f64, candidate_value: f64, percent_change: f64, threshold_percent: f64, status: []const u8,};pub const EnergyShift = struct { workload: []const u8, event: []const u8, baseline_joules: f64, candidate_joules: f64, energy_percent_change: f64, baseline_watts: ?f64, candidate_watts: ?f64, power_percent_change: ?f64, baseline_energy_range_percent: ?f64, candidate_energy_range_percent: ?f64, baseline_power_range_percent: ?f64, candidate_power_range_percent: ?f64, threshold_percent: f64, status: []const u8,};pub const Run = struct { ref: baseline.RunRef, suite: catalog.Suite = .all, filters: []const []const u8 = &.{}, selection_known: bool = false, git_sha: ?[]const u8 = null, git_dirty: ?bool = null, optimize: ?[]const u8 = null, host: environment.Host = .{}, workloads: []const Workload = &.{}, pub fn ran(self: Run) usize { return self.workloads.len; } pub fn passed(self: Run) usize { var result: usize = 0; for (self.workloads) |workload| { if (workload.exit_code == 0) result += 1; } return result; } pub fn failed(self: Run) usize { return self.ran() - self.passed(); } pub fn metricCount(self: Run) usize { var result: usize = 0; for (self.workloads) |workload| result += workload.metrics.len; return result; } pub fn memoryMetricCount(self: Run) usize { var result: usize = 0; for (self.workloads) |workload| result += workload.memory_metrics.len; return result; } pub fn causalCount(self: Run) usize { var result: usize = 0; for (self.workloads) |workload| result += workload.causal.len; return result; }};pub const ComparisonSupport = environment.ComparisonSupport;pub const WorkloadComparisonSupport = measurement.ComparisonSupport;pub const WorkloadComparisonSkip = struct { workload: []const u8, support: WorkloadComparisonSupport, baseline_acquisition: order.Context, candidate_acquisition: order.Context, baseline_execution_count: usize, candidate_execution_count: usize, baseline_warmup_count: usize, candidate_warmup_count: usize,};pub const OrderEffectSupport = enum { supported, environment_mismatch, code_identity_missing, code_identity_mismatch, dirty_code_identity, cohort_mismatch, workload_failure, command_identity_missing, command_identity_mismatch, execution_scope_missing, execution_scope_mismatch, warmup_design_missing, warmup_design_mismatch, profiler_configuration_missing, profiler_capture_present, repetition_design_mismatch, raw_measurements_missing,};pub const OrderEffectRow = struct { workload: []const u8, fixed_acquisition: order.Context, random_acquisition: order.Context, fixed_count: usize, random_count: usize, fixed_mean_ns: ?f64, random_mean_ns: ?f64, mean_percent_change: ?f64, effect_low_percent: ?f64, effect_high_percent: ?f64, classification: order.contrast.Classification,};pub const OrderEffectStatus = enum { unsupported, insufficient_repetitions, no_order_effect_observed, order_sensitive_candidate,};pub const OrderEffects = struct { support: OrderEffectSupport, environment_support: ComparisonSupport, fixed_run_id: []const u8, random_run_id: []const u8, fixed_is_baseline: bool, status: OrderEffectStatus, rows: []const OrderEffectRow,};pub const Comparison = priority.WorkloadComparison;pub fn sameOptionalString(left: ?[]const u8, right: ?[]const u8) bool { const actual_left = left orelse return right == null; const actual_right = right orelse return false; return std.mem.eql(u8, actual_left, actual_right);}pub fn sameStrings(left: []const []const u8, right: []const []const u8) bool { if (left.len != right.len) return false; for (left, right) |left_value, right_value| { if (!std.mem.eql(u8, left_value, right_value)) return false; } return true;}pub fn workloadWallDistribution(workload: Workload) measurement.WallDistribution { return workload.wall_distribution orelse measurement.pointWallDistribution(workload.wall_ns);}pub const NamedCapture = struct { workload: []const u8, capture: host.Capture,};pub fn percentChange(baseline_value: u64, candidate_value: u64) ?f64 { if (baseline_value == 0) return null; const base_float: f64 = @floatFromInt(baseline_value); const candidate_float: f64 = @floatFromInt(candidate_value); return ((candidate_float - base_float) / base_float) * 100;}pub fn findWorkload(workloads: []const Workload, name: []const u8) ?Workload { for (workloads) |workload| { if (std.mem.eql(u8, workload.name, name)) return workload; } return null;}Source: src/profiling/analyze/root.zig:5
zig
pub const model = @import("model.zig");Audit
| Definitions | 29 |
|---|---|
| Public names | 54 |
| Members | 176 |
| Version | 26.7.0 |
| Revision | daab053ee433 |