ट्रेस का निरीक्षण, एक्सपोर्ट और समीक्षा करें

.altrace ट्रेस का निरीक्षण करें, उसकी टाइमलाइन और VCD या Chrome एक्सपोर्ट सहेजें, और परिणामों को ऐसे समीक्षा पैकेज के रूप में रखें जिसे आप फिर खोल सकें।

Linux पर Altifigence CLI 0.1.9 से एक .altrace ट्रेस का निरीक्षण करें, उसकी टाइमलाइन सहेजें, उसे VCD या Chrome ट्रेस इवेंट के रूप में एक्सपोर्ट करें, और परिणामों को ऐसे समीक्षा पैकेज में रखें जिसकी आप सूची देख सकें, जिसे दिखा सकें और वापस पढ़ सकें। हर कमांड वह alti-trace इंजन चलाता है जो alti के साथ आता है।

ट्रेस फ़ाइल तैयार करें

alti trace कमांड .altrace फ़ाइलें पढ़ते हैं। फ़ाइल में चार बाइट ALTR, दो वर्शन बाइट, दो शून्य बाइट, हेडर की लंबाई 8 लिटिल-एंडियन बाइट के रूप में, JSON हेडर और वह पेलोड होता है जिसका हेडर वर्णन करता है। नीचे की स्क्रिप्ट एक कोर और पाँच इवेंट वाला छोटा ट्रेस लिखती है: तीन MAC_COMPUTE, एक DMA_READ और step_1 नाम का एक API_CALL। हर इवेंट पंक्ति 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

wc -c < run.altrace

सुनिश्चित करें कि अंतिम कमांड 376 प्रिंट करे: 16 प्रीफ़िक्स बाइट, 136 बाइट का हेडर जो "encoding":"bincode" और "byte_length":224 घोषित करता है, और 224 बाइट का पेलोड।

376

ट्रेस का निरीक्षण करें

ट्रेस के पाथ के साथ alti trace inspect चलाएँ। सापेक्ष पाथ --project के सापेक्ष हल किया जाता है। डिफ़ॉल्ट आउटपुट JSON है और .artifact.inspect में ट्रेस का सारांश होता है।

alti trace inspect --project "$PROJECT" run.altrace \
  | jq '.artifact.inspect | {payload_encoding, payload_bytes, total_cycles, cores, clock_mhz, event_count, event_types}'
{
  "payload_encoding": "bincode",
  "payload_bytes": 224,
  "total_cycles": 360,
  "cores": 1,
  "clock_mhz": 1000,
  "event_count": 5,
  "event_types": {
    "API_CALL": 1,
    "DMA_READ": 1,
    "MAC_COMPUTE": 3
  }
}

सुनिश्चित करें कि एग्ज़िट स्टेटस 0 हो। संक्षिप्त रिपोर्ट के लिए --format text जोड़ें।

alti trace inspect --project "$PROJECT" run.altrace --format text
alti-trace: run.altrace
  cycles: 360
  cores: 1
  clock: 1000 MHz
  payload: 224 bytes (bincode)
  events: 5
  - API_CALL: 1
  - DMA_READ: 1
  - MAC_COMPUTE: 3

पूरे JSON का स्कीमा altifigence.trace.operation.result.v1 है। उसका .artifact.artifact_id सहेजे गए परिणाम का पहचानकर्ता है, जिसका रूप trace:altifigence.trace.inspect.v1: के बाद सारांश का content_sha256 होता है। inspect उन ट्रेस को पढ़ता है जिनका पेलोड एन्कोडिंग bincode, flatbuf, flatbuf_v2 या flat है।

टाइमलाइन और एक्सपोर्ट सहेजें

alti trace timeline ट्रेस का टाइमलाइन डेटा <OUTPUT> में लिखता है। alti trace export पहले फ़ॉर्मैट लेता है, vcd या chrome, फिर ट्रेस और आउटपुट पाथ। हर कमांड आउटपुट फ़ाइल लिखता है और उसका वर्णन करने वाला परिणाम JSON प्रिंट करता है।

alti trace timeline --project "$PROJECT" run.altrace run.timeline \
  | jq '{operation_id, artifact: (.artifact | {artifact_schema, media_type, byte_length, records_written, output_label})}'
{
  "operation_id": "altifigence.trace.timeline.v1",
  "artifact": {
    "artifact_schema": "altifigence.trace.timeline.flatbuffer.v1",
    "media_type": "application/vnd.altifigence.trace-flatbuffer",
    "byte_length": 140,
    "records_written": 5,
    "output_label": "run.timeline"
  }
}

टाइमलाइन हर इवेंट के लिए 24 बाइट और उसके बाद API_CALL के नाम सहेजती है, इसलिए इस ट्रेस में byte_length 140 और records_written 5 मिलता है। उसी ट्रेस को दोनों फ़ॉर्मैट में एक्सपोर्ट करें।

alti trace export vcd --project "$PROJECT" run.altrace run.vcd \
  | jq -c '.artifact | {artifact_schema, media_type, records_written, output_label}'
alti trace export chrome --project "$PROJECT" run.altrace run.json \
  | jq -c '.artifact | {artifact_schema, media_type, records_written, output_label}'
{"artifact_schema":"altifigence.trace.export.vcd.v1","media_type":"text/x-vcd","records_written":374,"output_label":"run.vcd"}
{"artifact_schema":"altifigence.trace.export.chrome.v1","media_type":"application/json","records_written":5,"output_label":"run.json"}

सुनिश्चित करें कि हर कमांड का एग्ज़िट स्टेटस 0 हो। run.vcd $version पंक्ति से शुरू होती है और run.json हर इवेंट के लिए एक ऑब्जेक्ट वाला JSON ऐरे है।

head -n 1 "$PROJECT/run.vcd"
jq length "$PROJECT/run.json"
$version alti_core vcd_writer 0.1 $end
5

परिणामों को समीक्षा पैकेज में रखें

हर सफल inspect, timeline और export रन अपना परिणाम $PROJECT/.altifigence/artifacts/trace-review के नीचे भी सहेजता है। वे कमांड जो artifact_id प्रिंट करते हैं, वही पहचानकर्ता alti trace review materialize लेता है: पहले ट्रेस आर्टिफ़ैक्ट, फिर हर --reference आर्टिफ़ैक्ट। एक पैकेज में अधिकतम 16 रेफ़रेंस नाम दिए जा सकते हैं।

INSPECT_ID="$(alti trace inspect --project "$PROJECT" run.altrace | jq -r '.artifact.artifact_id')"
TIMELINE_ID="$(alti trace timeline --project "$PROJECT" run.altrace run.timeline | jq -r '.artifact.artifact_id')"
alti trace review materialize --project "$PROJECT" "$TIMELINE_ID" --reference "$INSPECT_ID" > "$PROJECT/package.json"
jq -r '.schema' "$PROJECT/package.json"
PACKAGE_ID="$(jq -r '.package_id' "$PROJECT/package.json")"
altifigence.trace.review-package-summary.v1

सुनिश्चित करें कि एग्ज़िट स्टेटस 0 हो। package_id का रूप trace-review: के बाद 64 लोअरकेस हेक्साडेसिमल अक्षर है। list अधिकतम 5 पैकेज सारांश प्रिंट करता है, सबसे नया पहले। show package_sha256 और byte_length के साथ एक सारांश प्रिंट करता है। readback सहेजे गए पैकेज को सहेजे गए आर्टिफ़ैक्ट से मिलाकर जाँचता है और पूरा पैकेज प्रिंट करता है।

alti trace review list --project "$PROJECT" | jq 'length'
alti trace review show --project "$PROJECT" "$PACKAGE_ID" | jq -r '.schema'
alti trace review readback --project "$PROJECT" "$PACKAGE_ID" \
  | jq -c '{schema, references: (.reference_artifacts | length), operation: .trace_artifact.operation_id}'
1
altifigence.trace.review-package-summary.v1
{"schema":"altifigence.trace.review-package.v1","references":1,"operation":"altifigence.trace.timeline.v1"}

जब प्रोजेक्ट में कोई और समीक्षा पैकेज न हो, तब पहली पंक्ति 1 होती है।

सामान्य विफलताओं के बाद सुधार करें

alti-trace error: <message> प्रिंट करता है और 2 के साथ समाप्त होता है। alti वही एग्ज़िट स्टेटस लौटाता है और stderr पर एक स्टेटस पंक्ति जोड़ता है जिसमें exit=2 होता है।

ट्रेस पाथ न मिलने पर यह प्रिंट होता है:

error: cannot read missing.altrace: No such file or directory (os error 2)

प्रोजेक्ट डायरेक्टरी की सूची देखें और ट्रेस का पाथ --project के सापेक्ष दें।

ls "$PROJECT"

ट्रेस न होने वाली फ़ाइल देने पर नीचे दिया संदेश प्रिंट होता है। ऐसी फ़ाइल दें जो ALTR से शुरू होती हो, जैसे run.altrace।

printf 'this is not a trace\n' > "$PROJECT/notes.txt"
alti trace inspect --project "$PROJECT" notes.txt
error: cannot decode trace 'notes.txt': invalid .altrace magic

ऐसा पहचानकर्ता जो इस प्रोजेक्ट में सहेजा नहीं गया था, materialize से नीचे दिया संदेश प्रिंट करवाता है। उसी --project के साथ चले inspect, timeline या export रन से .artifact.artifact_id कॉपी करें।

error: owned trace artifact not found

गलत रूप वाला पहचानकर्ता, दोहराया गया पहचानकर्ता या 16 से अधिक रेफ़रेंस नीचे दिया संदेश प्रिंट करवाते हैं। ट्रेस या रेफ़रेंस पहचानकर्ता trace:altifigence.trace. से शुरू होता है, और पैकेज पहचानकर्ता trace-review: के बाद 64 लोअरकेस हेक्साडेसिमल अक्षर होता है। हर पहचानकर्ता को उस कमांड से बिना बदले कॉपी करें जिसने उसे प्रिंट किया था और हर एक का नाम एक ही बार दें।

error: invalid trace review request

यदि ग्रुप या अन्य उपयोगकर्ता स्टोर डायरेक्टरी तक पहुँच सकते हैं, तो परिणाम सहेजने या पढ़ने वाला हर trace कमांड नीचे दिया संदेश प्रिंट करता है। स्टोर को केवल अपने लिए निजी बनाएँ।

error: trace review store unavailable
chmod -R go-rwx "$PROJECT/.altifigence"

CLI इंजन कमांड