Comments (3)
@kolesnikovae does this also imply that the x-axis in the flamegraph could/would be "time" instead of "samples"?
If so, I'd love to see this feature.
No, not quite. Currently, Pyroscope is most suited for statistical profiling. In such a profile, we do not have any information on the order of calls or when exactly a function was called. Instead, it shows aggregated measurements for sampled stack traces: for a CPU profile, this typically involves counting the number of times the stack trace was observed executing on the CPU. This allows us to visualize this information as a flame graph – I'll quote the author of the idea:
The x-axis shows the stack profile population, sorted alphabetically (it is not the passage of time), and the y-axis shows stack depth, counting from zero at the bottom. Each rectangle represents a stack frame. The wider a frame is is, the more often it was present in the stacks. The top edge shows what is on-CPU, and beneath it is its ancestry. Original flame graphs use random colors to help visually differentiate adjacent frames. Variations include inverting the y-axis (an "icicle graph"), changing the hue to indicate code type, and using a color spectrum to convey an additional dimension.
What you're describing is another kind of profile – a so-called event-based profile or an execution trace. This is a vastly different type of signal, with a completely different data model and analysis methods.
As of now, Pyroscope does not support profiles of this type. The main reason is that it's currently impractical to continuously profile programs in this fashion: the amount of data this produces and the footprint on the profiled program are the biggest problems. Therefore, profiling of this type is typically performed on an ad-hoc basis
from pyroscope.
@kolesnikovae thanks so much for your detailed answer!
from pyroscope.
@kolesnikovae does this also imply that the x-axis in the flamegraph could/would be "time" instead of "samples"?
If so, I'd love to see this feature.
Our use case: alongside the boons of distributed profiling, it's very useful to "drill down" into a single profile to get a better understanding of a performance issue. In particular in cases where the same stack traces can appear multiple times and the ordering of calls is key to understanding & debugging an issue.
Right now it seems like the ordering within the flamegraph to be somewhat arbitrary. Is there documentation somewhere on how the aggregation (and visualization thereof) works?
from pyroscope.
Related Issues (20)
- [DOC] Add doc about support for span profiles using .NET
- [DOC] Add Agent > Alloy admonition for profile docs HOT 3
- Add CallGraph query API
- Add line breakdown API
- Jsonnet dashboards job selectors are not aligned with monitoring resources
- [DOC] Update examples readme
- When fetching label names, the API should return their cardinality
- Panic: Index out of range on the write path
- Multi-tenant Query Support
- Service analytics
- [DOC] Update the SDKs and supported profile types table to make info easier to find
- How run pyroscope agent with IIS HOT 4
- Improve symbols partitioning heuristics
- use pyroscope with .net app and IIS
- Row buffering prevents asynchronous symbols fetching
- ebpf(python): does not work with memory swapping enabled nicely
- ebpf improvements ideas
- Improve developer experience with ebpf testdata HOT 4
- [DOC] Update Pyroscope for Agent > Alloy
- [DOC] Update Cloud Profiles docs for Agent > Alloy
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pyroscope.