Netflix FlameScope
medium.com
medium.com
later de-acronym-ized to "Ajax" w/ JSON replacing XML.
wat.
the original browser wars? ns vs ie? 2 incompatible implementations w/ no tooling to help?
I've played with using space-filling curves for this to visualise binaries:
You can play around on there with the scan layout (similar to the Netflix layout) and compare it to the Hilbert curve. You can click and drag to select regions in both (similar to the video for this visualisation).
There are tradeoffs - the Hilbert layout is not intuitive, and you have to play around to select regions accurately. On the other hand, the clustering lets you visually pick hotspots in much greater detail, e.g.:
https://binvis.io/#/view/examples/tcpview.exe.bin?colors=ent...
I've found it useful to be able to toggle between both scanning and clustered layouts, and plan to explore some more interaction paradigms when I get time to turn back to the project.
https://github.com/brendangregg/Dump2PNG/wiki
So with the subsecond-offset heat map, you get clustering from one column to the next for events that happen at the same time offset. Which is common with periodic tasks: see the example patterns in the post.
https://github.com/cortesi/scurve
I have a blazing fast command-line version of binvis in Rust that I plan to release in the next month or so. I really need make some time to turn back to this.
So I was more interested in core dumps, which gets tricky since they can be 10s of Gbytes in size. Probably the most useful thing I figured out was this palette type:
x86 grayscale with some (9) color indicators:
green = common english chars: 'e', 't', 'a'
red = common x86 instructions: movl, call, testl
blue = binary values: 0x01, 0x02, 0x03While I'm thinking about it, you're of course quite right that spotting periodic patterns in a Hilbert curve layout is really hard. However, I've found that being able to spot them in a scanning layout is highly dependent on your column width matching/resonating with the period of the pattern you're looking for. Another thing on my todo list is to combine Hilbert layouts with Fourier transforms. There's a very suggestive paper on this that I'd love to explore:
And Brendans blog has been more recently inspiring and educational, seeing you guys chatting on HN is too cool. Thank you both for the awesome and freely accessible material.
From a quick glance, it's interesting to see both Flask and Node.JS be used within the same project repo. Is this becoming more commonplace?
One interesting thing here is also the statistical nature of this problem: i.e. there are spikes but their duration are not exact or known when to start. Here[1] is some reference work done on Neural Spike Trains that seems relevant.
[1]http://www.stat.columbia.edu/~liam/teaching/neurostat-spr12/...
A minor suggestion: For the first part of the demo i was thrown of by the fact that each second as laid out bottom->top. Maybe moving the time labels below the plot would provide a visual cue for the direction.
I can understand why it's confusing, and perhaps could be a UI option to reverse it, but I do think that's the reason.
I'd love to be able to generate a flamegraph for a django app, for example, and visualise it with flame scope.
https://mail.python.org/pipermail/python-dev/2014-November/1... discusses the problems with python and the `perf` tool. There may have been some patches applied recently to help, but it doesn't look like there was a full resolution.
For example in the flame graph in chrome's performance tab, you can select/slice/zoom/pan arbitrary time ranges. If you want the high level view you just zoom out.
Maybe open a pull request for a graph based view and we can A/B test ️
Way out in the distance, maybe even a variable-interval mode, where you can click-select blocks and each one is given its own column, so you can directly compare them without the dead space in the middle and starting from the same baseline?
[1] Particularly striking: https://cdn-images-1.medium.com/max/2000/1*EypUnkPtayeKr9bJu...
In your example, I imagine you might see a periodic color shift along the Y axis as things aligned with that 16ms window. The example grid looks to have about 50 rows, so that would be ~20ms each, which is a bit too large for your use case. The example usage shows that you get to define the Hertz is samples at though, so you should be able to define exactly the period length you desire.
It'd be pretty sweet if you could send things sampled using Vector over to FlameScope. I know the flamegraphs PMDA is experimental but it's always worked fine for me :)
(It'd also be pretty sweet if there was a fleshed out PMDA for bcc tools. And Vector supported them. And, and, and... I have a really long wishlist.)
But then how does it make sense to plot the number of events per second in the overview? Or what exactly is being plotted in the overview?
Edit: Perhaps it is simply that idle events are discarded and multiple CPUs allow more than one event in the period?
Awesome tool nevertheless. Always a pleasure to go through Brendan's utilities regarding performance analysis!
But there's also a newer way that can do Java stack sampling from perf without the frame pointer: https://github.com/jvm-profiling-tools/async-profiler
We're not running it yet. I want to try it out. Note that the stacks with async-profiler are a bit broken -- Java methods become detached from the JVM -- but I'm hoping that's fixable (it should be with a JVM change, at least).
In the java ecosystem this is solved with utilization timelines.
[Sorry I hadn't realized <> wasn't work as URL delimiters here, as I'm used to elsewhere since the RFC <URL:...> convention got ignored.]
It was intermittent latency that was hard to explain using existing tools.
Although you lose the images so not that helpful in this situation, but usually good for medium.
As things go, I think they're actually handling that part fairly well.
Medium automatically adds a tooltip so I can share whatever I highlighted to Twitter/Facebook.
It's an accessibility issue, where they are privileging hypothetical social sharing of content over readers who actually need to consume the content.