Membandingkan trace dengan baseline golden
Buat baseline golden-diff dari trace yang diketahui baik, periksa trace berikutnya terhadapnya dalam teks atau JSON, dan perbarui baseline saat perubahan disengaja.
Gunakan Altifigence CLI 0.1.9 di Linux untuk merekam baseline dari trace .altrace yang diketahui baik dan memeriksa trace berikutnya terhadapnya. Pemeriksaan keluar dengan 0 jika setiap langkah berada dalam toleransi dan 1 jika ada langkah yang menyimpang.
Menyiapkan dua trace
golden-diff membaca trace .altrace yang headernya mendeklarasikan "encoding":"bincode". Skrip di bawah menulis run.altrace, trace yang diketahui baik dengan satu core dan lima event, serta changed.altrace, trace yang sama dengan satu event MAC_COMPUTE tambahan. Setiap baris event adalah 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.altracePastikan kedua perintah wc mencetak ukuran file.
376
416Membuat baseline
alti verification golden-diff emit-profile membaca satu trace dan menulis baseline ke stdout, jadi alihkan ke file. Sebuah langkah dimulai pada setiap API_CALL, dan event sebelum API_CALL pertama termasuk langkah 0. --tolerance-pct mencantumkan penyimpangan yang diizinkan dalam persen pada setiap baris, dan bawaannya adalah 10.
alti verification golden-diff emit-profile --project "$PROJECT" run.altrace > "$PROJECT/reference.jsonl"
grep -v '^#' "$PROJECT/reference.jsonl"Pastikan status keluar adalah 0. File diawali dua baris komentar # lalu berisi satu baris JSON per langkah.
{"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}Setiap baris menyimpan jumlah event yang diamati sebagai expect_mac, expect_dma_read, expect_dma_write, dan expect_barrier. cycle_budget adalah siklus yang dicakup langkah, dinaikkan sebesar tolerance_pct dan dibulatkan ke atas: langkah 0 mencakup 150 siklus dan langkah 1 mencakup 210. Baris kosong dan baris yang diawali # dilewati saat file dibaca.
Memeriksa trace terhadap baseline
alti verification golden-diff check menerima baseline lebih dulu dan trace kedua. Output teks memiliki ringkasan golden-diff: di antara dua baris banner yang terdiri dari karakter ═, lalu satu baris per langkah. Kutipan di bawah menghilangkan baris 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=0Pastikan status keluar adalah 0. Jalankan perintah di bagian ini tanpa flag global --json dari alti, agar stdout berisi laporan itu sendiri. --format json mencetak laporan, dan --format json-v1 mencetak hasil berversi dengan asal-usul. Keduanya menggunakan status keluar yang sama dengan format teks.
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"
}Membaca pemeriksaan yang gagal
Langkah 1 dari changed.altrace memuat tiga event MAC_COMPUTE dan mencakup 310 siklus, sedangkan baseline mengharapkan dua event dan anggaran 232 siklus.
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=1Pastikan status keluar adalah 1. alti juga mencetak baris status di stderr yang menyertakan exit=1. Hanya metrik yang gagal yang dicantumkan di bawah sebuah langkah. Untuk membacanya dari laporan JSON, pilih metrik yang pass-nya 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}Langkah yang dicantumkan baseline tetapi tidak ada di trace mencetak step N missing from observed trace. Langkah di trace yang tidak memiliki baris baseline dihitung dalam unexpected_observed_steps. Keduanya membuat pemeriksaan keluar dengan 1.
Mengatasi kegagalan
Jika penyimpangan memang perilaku yang dimaksudkan, jadikan trace yang berubah sebagai baseline baru dan periksa lagi.
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=0File yang bukan trace membuat emit-profile dan check keluar dengan 1 disertai pesan di bawah. Berikan file yang diawali ALTR, seperti 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 magicTrace yang headernya mendeklarasikan encoding payload lain membuat check keluar dengan 1 disertai pesan dalam bentuk ini. Berikan trace yang headernya mendeklarasikan "encoding":"bincode", seperti run.altrace.
trace parse error for 'other.altrace': unsupported .altrace payload encoding 'flatbuf'Baseline tanpa baris membuat check keluar dengan 1 disertai pesan di bawah. Jalankan emit-profile lagi untuk menulis baseline dengan satu baris per langkah.
: > "$PROJECT/empty.jsonl"
alti verification golden-diff check --project "$PROJECT" empty.jsonl run.altraceempty reference file: empty.jsonl--tolerance-pct yang negatif atau non-numerik keluar dengan 2 sebelum mesin dimulai, dengan teks ini dalam error. Berikan angka 0 atau lebih, seperti 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"