PAPERS ARE AMAZING: Profiling threaded programs with Coz by Julia Evans.
I don’t often mention profiling at all but I mention Julia’s post because:
- It reports a non-intuitive insight in profiling threaded programs (at least until you have seen it).
- Julia writes a great post on new ideas with
perf
.
From the post:
…
The core idea in this paper is – if you have a line of code in a thread, and you want to know if it’s making your program slow, speed up that line of code to see if it makes the whole program faster!
Of course, you can’t actually speed up a thread. But you can slow down all other threads! So that’s what they do. The implemention here is super super super interesting – they use the
perf
Linux system to do this, and in particular they can do it without modifying the program’s code. So this is a) wizardry, and b) usesperf
Which are both things we love here (omg perf). I’m going to refer you to the paper for now to learn more about how they use perf to slow down threads, because I honestly don’t totally understand it myself yet. There are some difficult details like “if the thread is already waiting on another thread, should we slow it down even more?” that they get into.
…
The insight that slowing down all but one thread is the equivalent to speeding up the thread of interest for performance evaluation sounds obvious when mentioned. But only after it is mentioned.
I suspect the ability to have that type of insight isn’t teachable other than by demonstration across a wide range of cases. If you know of other such insights, ping me.
For those interested in “real world” application of insights, Julia mentions the use of this profiler on SQLite and Memcached.
See Julia’s post for the paper and other references.
If you aren’t already checking Julia’s blog on a regular basis you might want to start.