AArch64 EL2 hypervisor for QEMU virt that boots at EL2
1

Configure Feed

Select the types of activity you want to include in your feed.

ariel / tools / log_decode.py
2.2 kB 70 lines
1#!/usr/bin/env python3 2from __future__ import annotations 3 4import argparse 5from collections import Counter 6import shlex 7import sys 8 9 10def parse(line: str) -> dict[str, str]: 11 parts = shlex.split(line.strip()) 12 if not parts or parts[0] != "event": 13 return {} 14 out: dict[str, str] = {} 15 for part in parts[1:]: 16 if "=" in part: 17 key, value = part.split("=", 1) 18 out[key] = value 19 return out 20 21 22def emit_event(event: dict[str, str]) -> None: 23 print( 24 "seq={seq} vcpu={vcpu} kind={kind} ec={ec} name={name} " 25 "dir={dir} action={action} reason={reason}".format( 26 seq=event.get("seq", "-"), 27 vcpu=event.get("vcpu", "-"), 28 kind=event.get("kind", "-"), 29 ec=event.get("ec", "-"), 30 name=event.get("name", "-"), 31 dir=event.get("dir", "-"), 32 action=event.get("action", "-"), 33 reason=event.get("reason", "-"), 34 ) 35 ) 36 37 38def print_counter(title: str, counter: Counter[str]) -> None: 39 print(title) 40 for key, count in counter.most_common(): 41 print(f" {key}: {count}") 42 43 44def main() -> int: 45 parser = argparse.ArgumentParser() 46 parser.add_argument("--summary", action="store_true", help="print aggregate trace counters") 47 parser.add_argument("--events", action="store_true", help="print normalized events with --summary") 48 args = parser.parse_args() 49 50 events: list[dict[str, str]] = [] 51 for line in sys.stdin: 52 event = parse(line) 53 if not event: 54 continue 55 events.append(event) 56 if not args.summary or args.events: 57 emit_event(event) 58 59 if args.summary: 60 print(f"events: {len(events)}") 61 print_counter("by-kind", Counter(e.get("kind", "-") for e in events)) 62 print_counter("by-ec", Counter(e.get("ec", "-") for e in events)) 63 print_counter("by-sysreg", Counter(e.get("name", "-") for e in events if e.get("kind") == "trap")) 64 print_counter("by-action", Counter(e.get("action", "-") for e in events)) 65 print_counter("by-reason", Counter(e.get("reason", "-") for e in events)) 66 return 0 67 68 69if __name__ == "__main__": 70 raise SystemExit(main())