Confrontare una traccia con una baseline golden
Crea una baseline golden-diff da una traccia nota come corretta, controlla le tracce successive rispetto a essa in testo o JSON e aggiorna la baseline quando una modifica è intenzionale.
Utilizza Altifigence CLI 0.1.9 su Linux per registrare una baseline da una traccia .altrace nota come corretta e per controllare le tracce successive rispetto a essa. Un controllo termina con codice di uscita 0 quando ogni passo rientra nella tolleranza e con 1 quando un passo qualsiasi si discosta.
Preparare due tracce
golden-diff legge tracce .altrace la cui intestazione dichiara "encoding":"bincode". Lo script qui sotto scrive run.altrace, una traccia nota come corretta con un core e cinque eventi, e changed.altrace, la stessa traccia con un evento MAC_COMPUTE in più. Ogni riga di evento è core start duration type [api_name].
PROJECT="$(cd "$HOME/alti-projects/demo-project" && pwd -P)"
cd "$PROJECT"
le() { local n=$1 v=$2; while [ "$n" -gt 0 ]; do printf "\\x$(printf %02x $((v & 255)))"; v=$((v >> 8)); n=$((n - 1)); done; }
str() { le 8 "${#1}"; printf '%s' "$1"; }
write_trace() {
local out="$1" payload line core start dur type api total=0 header
local -a lines
mapfile -t lines
payload="$(mktemp)"
{
for line in "${lines[@]}"; do
read -r core start dur type api <<<"$line"
(( start + dur > total )) && total=$((start + dur))
done
le 8 "$total"
le 8 "${#lines[@]}"
for line in "${lines[@]}"; do
read -r core start dur type api <<<"$line"
le 4 "$core"; le 8 "$start"; le 8 "$dur"; str "$type"
if [ -n "$api" ]; then printf '\x01'; str "$api"; else printf '\x00'; fi
done
} >"$payload"
header="{\"altifigence_trace_version\":\"1.0\",\"trace\":{\"cycles\":$total,\"cores\":1,\"clock_mhz\":1000},\"payload\":{\"encoding\":\"bincode\",\"byte_length\":$(wc -c <"$payload")}}"
{ printf 'ALTR\x01\x01\x00\x00'; le 8 "${#header}"; printf '%s' "$header"; cat "$payload"; } >"$out"
rm -f "$payload"
}
write_trace run.altrace <<'EVENTS'
0 0 100 MAC_COMPUTE
0 100 50 DMA_READ
0 150 5 API_CALL step_1
0 160 100 MAC_COMPUTE
0 260 100 MAC_COMPUTE
EVENTS
write_trace changed.altrace <<'EVENTS'
0 0 100 MAC_COMPUTE
0 100 50 DMA_READ
0 150 5 API_CALL step_1
0 160 100 MAC_COMPUTE
0 260 100 MAC_COMPUTE
0 360 100 MAC_COMPUTE
EVENTS
wc -c < run.altrace
wc -c < changed.altraceVerifica che i due comandi wc stampino le dimensioni dei file.
376
416Creare la baseline
alti verification golden-diff emit-profile legge una traccia e scrive la baseline su stdout, quindi reindirizzala in un file. Un passo inizia a ogni API_CALL e gli eventi prima del primo API_CALL appartengono al passo 0. --tolerance-pct imprime su ogni riga lo scostamento consentito in percentuale e il valore predefinito è 10.
alti verification golden-diff emit-profile --project "$PROJECT" run.altrace > "$PROJECT/reference.jsonl"
grep -v '^#' "$PROJECT/reference.jsonl"Verifica che il codice di uscita sia 0. Il file inizia con due righe di commento # e poi contiene una riga JSON per passo.
{"step":0,"api_name":null,"expect_mac":1,"expect_dma_read":1,"expect_dma_write":0,"expect_barrier":0,"cycle_budget":165,"tolerance_pct":10.0,"abs_tolerance":null}
{"step":1,"api_name":"step_1","expect_mac":2,"expect_dma_read":0,"expect_dma_write":0,"expect_barrier":0,"cycle_budget":232,"tolerance_pct":10.0,"abs_tolerance":null}Ogni riga memorizza i conteggi degli eventi osservati come expect_mac, expect_dma_read, expect_dma_write e expect_barrier. cycle_budget è il numero di cicli che il passo copre, aumentato di tolerance_pct e arrotondato per eccesso: il passo 0 copre 150 cicli e il passo 1 ne copre 210. Le righe vuote e le righe che iniziano con # vengono ignorate quando il file viene letto.
Controllare una traccia rispetto alla baseline
alti verification golden-diff check accetta prima la baseline e poi la traccia. L’output di testo ha un riepilogo golden-diff: tra due righe di banner composte da caratteri ═, poi una riga per passo. Gli estratti qui sotto omettono le righe di banner.
alti verification golden-diff check --project "$PROJECT" reference.jsonl run.altrace; echo "exit=$?" golden-diff: all 2 steps within tolerance
step 0 pass
step 1 pass
exit=0Verifica che il codice di uscita sia 0. Esegui i comandi di questa sezione senza il flag globale --json di alti, in modo che stdout contenga il report stesso. --format json stampa il report e --format json-v1 stampa il risultato versionato con la provenienza. Entrambi usano lo stesso codice di uscita del formato testo.
alti verification golden-diff check --project "$PROJECT" reference.jsonl run.altrace --format json \
| jq '{summary, step_count, pass_count, total_metrics, exact_matches, tolerance_passes, metric_mismatches, unexpected_observed_steps}'{
"summary": "golden-diff: all 2 steps within tolerance",
"step_count": 2,
"pass_count": 2,
"total_metrics": 10,
"exact_matches": 8,
"tolerance_passes": 2,
"metric_mismatches": 0,
"unexpected_observed_steps": 0
}alti verification golden-diff check --project "$PROJECT" reference.jsonl run.altrace --format json-v1 \
| jq '{schema, operation_id, artifact_schema: .artifact.artifact_schema, engine: .provenance.engine}'{
"schema": "altifigence.golden-diff.operation-result.v1",
"operation_id": "altifigence.verification.golden-diff.v1",
"artifact_schema": "altifigence.golden-diff.report.v1",
"engine": "alti-verification"
}Leggere un controllo non riuscito
Il passo 1 di changed.altrace contiene tre eventi MAC_COMPUTE e copre 310 cicli, mentre la baseline prevede due eventi e un budget di 232 cicli.
alti verification golden-diff check --project "$PROJECT" reference.jsonl changed.altrace; echo "exit=$?" golden-diff: 1 / 2 steps PASS — 1 regressed
step 0 pass
step 1 drift on [mac, cycles]
└─ mac observed=3 · expected=2 · tol ±10.0%
└─ cycles observed=310 · expected=232 · tol ±10.0%
exit=1Verifica che il codice di uscita sia 1. alti stampa anche su stderr una riga di stato che include exit=1. Sotto un passo sono elencate solo le metriche non riuscite. Per leggerle dal report JSON, seleziona le metriche il cui pass è false.
alti verification golden-diff check --project "$PROJECT" reference.jsonl changed.altrace --format json \
| jq -c '.steps[] | select(.is_pass | not) | .metrics[] | select(.pass | not) | {name, observed, expected}'{"name":"mac","observed":3,"expected":2}
{"name":"cycles","observed":310,"expected":232}Un passo che la baseline elenca ma che manca nella traccia stampa step N missing from observed trace. Un passo nella traccia che non ha una riga nella baseline viene conteggiato in unexpected_observed_steps. Entrambi fanno terminare il controllo con codice di uscita 1.
Riprendere dopo gli errori
Quando lo scostamento è il comportamento previsto, rendi la traccia modificata la nuova baseline e controlla di nuovo.
alti verification golden-diff emit-profile --project "$PROJECT" changed.altrace > "$PROJECT/reference.jsonl"
alti verification golden-diff check --project "$PROJECT" reference.jsonl changed.altrace; echo "exit=$?" golden-diff: all 2 steps within tolerance
step 0 pass
step 1 pass
exit=0Un file che non è una traccia fa terminare emit-profile e check con codice di uscita 1 e con i messaggi qui sotto. Passa un file che inizia con ALTR, ad esempio run.altrace.
printf 'this is not a trace\n' > "$PROJECT/notes.txt"
alti verification golden-diff emit-profile --project "$PROJECT" notes.txt
alti verification golden-diff check --project "$PROJECT" reference.jsonl notes.txtparse error in 'notes.txt': Invalid magic number — expected 'ALTR', got '[116, 104, 105, 115]'
trace parse error for 'notes.txt': invalid .altrace magicUna traccia la cui intestazione dichiara un’altra codifica del payload fa terminare check con codice di uscita 1 e con un messaggio di questa forma. Passa una traccia la cui intestazione dichiara "encoding":"bincode", ad esempio run.altrace.
trace parse error for 'other.altrace': unsupported .altrace payload encoding 'flatbuf'Una baseline senza righe fa terminare check con codice di uscita 1 e con il messaggio qui sotto. Esegui di nuovo emit-profile per scrivere una baseline con una riga per passo.
: > "$PROJECT/empty.jsonl"
alti verification golden-diff check --project "$PROJECT" empty.jsonl run.altraceempty reference file: empty.jsonlUn --tolerance-pct negativo o non numerico termina con 2 prima dell’avvio del motore, con questo testo nell’errore. Passa un numero pari o superiore a 0, ad esempio 5.
tolerance-pct must be a finite non-negative numberalti verification golden-diff emit-profile --project "$PROJECT" run.altrace --tolerance-pct 5 > "$PROJECT/reference.jsonl"