#!/usr/bin/env python3 # SPDX-License-Identifier: BSD-3-Clause # Copyright (c) 2026 Open-IOV contributors import collections, sys path = sys.argv[1] if len(sys.argv) > 1 else '/tmp/opencode/regs-m63.txt' cmp_mode = len(sys.argv) > 2 and sys.argv[2] == 'cmp' hdr = None rows = [] with open(path) as f: for line in f: if line.startswith('#'): if line.startswith('# ts '): hdr = line.split()[2:] continue p = line.split() if len(p) >= 2: rows.append((float(p[0]), p)) print("samples:", len(rows), "t range", rows[0][0], rows[-1][0]) cols = collections.defaultdict(collections.Counter) h = {n: i for i, n in enumerate(hdr)} for t, p in rows: for i, n in enumerate(hdr): if 1 + i < len(p): cols[n][p[1 + i]] += 1 for n in ('FECS_CURRENT_CTX', 'FECS_NEW_CTX', 'CWD_TABLE_0', 'CWD_TABLE_1', 'SKED_HWW_ESR', 'SKED_ACTIVITY', 'GRFIFO_STATUS', 'FECS_CPUCTL', 'PGRAPH_STATUS', 'PMC_ENABLE'): c = cols.get(n) if c: print('%-22s %s' % (n, ', '.join('%s x%d' % (k, v) for k, v in c.most_common(8)))) # interesting transitions: where FECS_CURRENT_CTX or CWD_TABLE_0 or GRFIFO change print("=== transitions (FECS_CURRENT_CTX / CWD_T0 / GRFIFO) ===") last = {} for t, p in rows: key = (p[1 + h['FECS_CURRENT_CTX']], p[1 + h['CWD_TABLE_0']], p[1 + h['GRFIFO_STATUS']]) if key != last.get('k'): print('t=%8.2f FECS=%s NEW=%s CWD0=%s CWD1=%s SKED_ACT=%s GRFIFO=%s PGRAPH=%s' % ( t, key[0], p[1 + h['FECS_NEW_CTX']], key[1], p[1 + h['CWD_TABLE_1']], p[1 + h['SKED_ACTIVITY']], key[2], p[1 + h['PGRAPH_STATUS']])) last['k'] = key