Visualising an Asynchronous Monad(roscidus.com) |
Visualising an Asynchronous Monad(roscidus.com) |
One of the nice things about OPAM (the OCaml package manager) is that it can recompile upstream library dependencies if some new optional features gets inserted downstream. In this case, Thomas has put together a "lwt.profiling" library that adds profiling hooks, and then every upstream Mirage library gets systematically recompiled against this new functionality.
This way we can have profiling-free production code, and then just "opam install mirage-profiling" and have a coffee while everything gets instrumented. This is going to be incredible as we hook up more complex distributed unikernel-based systems.
[0] https://www.efficios.com/babeltrace [1] http://lttng.org/files/lttv-doc/user_guide/c42.html#mainwind...
I also used 'perf timechart'[0] in the past, or rather I tried to, but the traces on any realistic workload generated SVG files so large that it was too slow to open in firefox/inkscape etc. Your approach seems to be more scalable as it doesn't generate one huge image/SVG but rather generates that zoomable view via Javascript on-the-fly, right?
[0] http://web.archive.org/web/20130729151516/http://blog.fenrus...
- Show labels at a readable size, whatever the zoom.
- Keep labels within the screen bounds where possible rather than letting them scroll off.
- Fade out large-scale features (e.g. arrows spanning long time frames) when you get close, so they don't blot out everything in between.
- Project y values through tanh so you can see everything at once, but focus on the bit you're interested in.
Of course, there are other opportunities for adding interaction too.