oxedyne/fe2o3/fe2o3_austenite/tools/bench/edit_latency_runner.sh
3.1 KiB, 1 run, executable
created by r1870400018:60938, which is this file's identity for as long as the history lasts, whatever it is later renamed to
download · who wrote it · its history
| 1 | #!/usr/bin/env bash |
| 2 | # Runs edit_latency.mjs for both wasm engines on each doc: a scripted run of |
| 3 | # one-character edits against a live compiler instance, capped and timed like |
| 4 | # every other run. See edit_latency.mjs for why typst.ts is timed on a full |
| 5 | # `vector` recompile rather than its incr_compile API. |
| 6 | set -uo pipefail |
| 7 | |
| 8 | HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
| 9 | # shellcheck source=lib/host.sh |
| 10 | source "$HERE/lib/host.sh" |
| 11 | |
| 12 | AUST_VENDOR="${AUST_VENDOR:?set AUST_VENDOR to the daimond austenite vendor dir}" |
| 13 | TYPST_VENDOR="${TYPST_VENDOR:?set TYPST_VENDOR to the daimond typst.ts vendor dir}" |
| 14 | EDITS="${EDITS:-10}" |
| 15 | POSITIONS="${POSITIONS:-5}" |
| 16 | OUT_DIR="${OUT_DIR:?set OUT_DIR}" |
| 17 | DOCS=("$@") |
| 18 | |
| 19 | if [[ ${#DOCS[@]} -eq 0 ]]; then |
| 20 | echo "usage: OUT_DIR=... AUST_VENDOR=... TYPST_VENDOR=... edit_latency_runner.sh <doc.typ>..." >&2 |
| 21 | exit 2 |
| 22 | fi |
| 23 | |
| 24 | mkdir -p "$OUT_DIR" |
| 25 | JSONL="$OUT_DIR/edit_latency_runs.jsonl" |
| 26 | : > "$JSONL" |
| 27 | |
| 28 | run_engine() { |
| 29 | local doc="$1" engine="$2" vendor="$3" |
| 30 | local docname; docname="$(basename "$doc" .typ)" |
| 31 | local stdout_f time_f |
| 32 | stdout_f="$(mktemp)"; time_f="$(mktemp)" |
| 33 | |
| 34 | local load_before psi_cpu_before psi_mem_before |
| 35 | load_before="$(loadavg1)"; psi_cpu_before="$(psi_avg10 cpu)"; psi_mem_before="$(psi_avg10 memory)" |
| 36 | |
| 37 | systemd-run --user --scope --quiet -p MemoryMax=3G --slice=claude-rc.slice -- \ |
| 38 | /usr/bin/time -v -o "$time_f" -- \ |
| 39 | node "$HERE/edit_latency.mjs" "--engine=$engine" "--vendor=$vendor" "--doc=$doc" \ |
| 40 | "--edits=$EDITS" "--positions=$POSITIONS" \ |
| 41 | > "$stdout_f" 2> /dev/null |
| 42 | local exit_code=$? |
| 43 | |
| 44 | local load_after psi_cpu_after psi_mem_after |
| 45 | load_after="$(loadavg1)"; psi_cpu_after="$(psi_avg10 cpu)"; psi_mem_after="$(psi_avg10 memory)" |
| 46 | |
| 47 | local rss_kb=0 |
| 48 | [[ -f "$time_f" ]] && rss_kb="$(awk -F': ' '/Maximum resident set size/{print $2}' "$time_f")" |
| 49 | [[ -z "$rss_kb" ]] && rss_kb=0 |
| 50 | |
| 51 | local inner; inner="$(tail -n1 "$stdout_f" 2>/dev/null)" |
| 52 | [[ -z "$inner" ]] && inner='{"ok":false,"error":"no stdout from edit_latency.mjs"}' |
| 53 | |
| 54 | local flagged=false |
| 55 | if awk -v a="$load_before" -v b="$load_after" -v t="$BENCH_LOAD_THRESHOLD" \ |
| 56 | 'BEGIN{exit !(a>t || b>t)}'; then |
| 57 | flagged=true |
| 58 | fi |
| 59 | |
| 60 | jq -nc \ |
| 61 | --arg doc "$docname" --arg engine "$engine" --argjson rss_kb "${rss_kb:-0}" \ |
| 62 | --argjson exit_code "$exit_code" \ |
| 63 | --argjson load_before "$load_before" --argjson load_after "$load_after" \ |
| 64 | --argjson psi_cpu_before "$psi_cpu_before" --argjson psi_cpu_after "$psi_cpu_after" \ |
| 65 | --argjson psi_mem_before "$psi_mem_before" --argjson psi_mem_after "$psi_mem_after" \ |
| 66 | --argjson flagged_under_load "$flagged" --arg ts "$(date -u +%FT%TZ)" \ |
| 67 | --argjson inner "$inner" \ |
| 68 | '$inner * {ts:$ts, doc:$doc, engine:("edit-"+$engine), rss_kb:$rss_kb, exit_code:$exit_code, |
| 69 | load_before:$load_before, load_after:$load_after, |
| 70 | psi_cpu_before:$psi_cpu_before, psi_cpu_after:$psi_cpu_after, |
| 71 | psi_mem_before:$psi_mem_before, psi_mem_after:$psi_mem_after, |
| 72 | flagged_under_load:$flagged_under_load}' \ |
| 73 | >> "$JSONL" |
| 74 | |
| 75 | rm -f "$stdout_f" "$time_f" |
| 76 | } |
| 77 | |
| 78 | for doc in "${DOCS[@]}"; do |
| 79 | run_engine "$doc" austenite "$AUST_VENDOR" |
| 80 | run_engine "$doc" typstts "$TYPST_VENDOR" |
| 81 | echo "[edit_latency] $(basename "$doc" .typ): austenite + typstts done" >&2 |
| 82 | done |
| 83 | |
| 84 | echo "$JSONL" |