Skip to content

Commit 8a65ed8

Browse files
committed
Fix python script
1 parent 73aab09 commit 8a65ed8

File tree

2 files changed

+27
-13
lines changed

2 files changed

+27
-13
lines changed

ci/scripts/metric_unify/prometheus_flamegraph.py renamed to ci/scripts/metric_unify/flamegraph_prom.py

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
import subprocess
66
from prometheus_api_client import PrometheusConnect
77
from utils import FLAMEGRAPHS_DIR, get_git_root
8+
from flamegraph import get_function_symbol
89

9-
def get_stack_lines(prom, group_by_kvs, stack_keys, metric_name, sum_metrics=None):
10+
def get_stack_lines(prom, group_by_kvs, stack_keys, metric_name, sum_metrics=None, string_table=None):
1011
"""
1112
Filters metrics from prometheus for entries that look like:
1213
[ { labels: [["key1", "span1;span2"], ["key2", "span3"]], "metric": metric_name, "value": 2 } ]
@@ -43,7 +44,15 @@ def get_stack_lines(prom, group_by_kvs, stack_keys, metric_name, sum_metrics=Non
4344
if key not in labels:
4445
filter = True
4546
break
46-
stack_values.append(labels[key])
47+
if key == 'cycle_tracker_span':
48+
if labels[key] == '' or string_table is None:
49+
stack_values.append(labels[key])
50+
else:
51+
symbol_offsets = labels[key].split(';')
52+
function_symbols = [get_function_symbol(string_table, offset) for offset in symbol_offsets]
53+
stack_values.extend(function_symbols)
54+
else:
55+
stack_values.append(labels[key])
4756
if filter:
4857
continue
4958

@@ -60,8 +69,8 @@ def get_stack_lines(prom, group_by_kvs, stack_keys, metric_name, sum_metrics=Non
6069
return lines if non_zero else []
6170

6271

63-
def create_flamegraph(fname, prom, group_by_kvs, stack_keys, metric_name, sum_metrics=None, reverse=False):
64-
lines = get_stack_lines(prom, group_by_kvs, stack_keys, metric_name, sum_metrics)
72+
def create_flamegraph(fname, prom, group_by_kvs, stack_keys, metric_name, sum_metrics=None, reverse=False, string_table=None):
73+
lines = get_stack_lines(prom, group_by_kvs, stack_keys, metric_name, sum_metrics, string_table)
6574
if not lines:
6675
return
6776

@@ -88,24 +97,24 @@ def create_flamegraph(fname, prom, group_by_kvs, stack_keys, metric_name, sum_me
8897
print(f"Created flamegraph at {flamegraph_path}")
8998

9099

91-
def create_flamegraphs(prom, group_by, stack_keys, metric_name, sum_metrics=None, reverse=False):
100+
def create_flamegraphs(prom, group_by, stack_keys, metric_name, sum_metrics=None, reverse=False, string_table=None):
92101
# Assume group_by is a list of length 1
93102
group_by_values_list = prom.get_label_values(label_name=group_by[0])
94103
for group_by_values in group_by_values_list:
95104
group_by_kvs = list(zip(group_by, [group_by_values]))
96105
fname = 'metrics' + '-' + '-'.join([group_by_values])
97-
create_flamegraph(fname, prom, group_by_kvs, stack_keys, metric_name, sum_metrics, reverse=reverse)
106+
create_flamegraph(fname, prom, group_by_kvs, stack_keys, metric_name, sum_metrics, reverse=reverse, string_table=string_table)
98107

99108

100-
def create_custom_flamegraphs(prom, group_by=["group"]):
109+
def create_custom_flamegraphs(prom, group_by=["group"], string_table=None):
101110
for reverse in [False, True]:
102111
create_flamegraphs(prom, group_by, ["cycle_tracker_span", "dsl_ir", "opcode"], "frequency",
103-
reverse=reverse)
112+
reverse=reverse, string_table=string_table)
104113
create_flamegraphs(prom, group_by, ["cycle_tracker_span", "dsl_ir", "opcode", "air_name"], "cells_used",
105-
reverse=reverse)
114+
reverse=reverse, string_table=string_table)
106115
create_flamegraphs(prom, group_by, ["cell_tracker_span"], "cells_used",
107116
sum_metrics=["simple_advice_cells", "fixed_cells", "lookup_advice_cells"],
108-
reverse=reverse)
117+
reverse=reverse, string_table=string_table)
109118

110119

111120
def main():
@@ -117,11 +126,18 @@ def main():
117126

118127
argparser = argparse.ArgumentParser()
119128
argparser.add_argument('prometheus_url', type=str, help="Path to the prometheus server")
129+
argparser.add_argument('--guest-symbols', type=str, help="Path to the guest symbols file", default=None, required=False)
120130
args = argparser.parse_args()
121131

132+
if args.guest_symbols:
133+
with open(args.guest_symbols, 'rb') as f:
134+
string_table = f.read()
135+
else:
136+
string_table = None
137+
122138
prom = PrometheusConnect(url=args.prometheus_url, disable_ssl=True)
123139

124-
create_custom_flamegraphs(prom)
140+
create_custom_flamegraphs(prom, string_table=string_table)
125141

126142

127143
if __name__ == '__main__':

crates/toolchain/transpiler/src/elf.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,6 @@ impl Elf {
121121

122122
for symbol in symtab.iter() {
123123
if symbol.st_symtype() == elf::abi::STT_FUNC {
124-
let raw_name = stringtab.get(symbol.st_name as usize).unwrap().to_string();
125-
let demangled_name = rustc_demangle::demangle(&raw_name).to_string();
126124
fn_bounds.insert(
127125
symbol.st_value as u32,
128126
FnBound {

0 commit comments

Comments
 (0)