Low-level profiling with standard system tools
Since Spicy just emits C++ code one can use standard system tools like e.g.,
perf
to collect profiling information.
In its default configuration spicyc
/spicyz
build in the mode they were
themself compiled in. For upstream packages this means unstripped release
binaries which expose names of called functions, but not per-line information
for e.g., perf annotate
.
zeek -Cr tests/traces/http-non-default-port.pcap build/http.hlto analyzer
Example flamegraphs displayed with
samply
zooming in on just code running
as part of Spicy parsers (<1% of total elapsed time):
Spicy parsers run on a fiber abstraction which can confuse tools like perf annotate
which attempt to restore stack traces. The code to look for is
anything running below a hilti::rt::detail::Callback
.