Profiling
CIDER has a built-in profiler that can help you identify hot-spots in your application code. It’s built on top of the thunknyc/profile library.
The profiler doesn’t support ClojureScript. |
Usage
Using CIDER’s profiler is super easy. You’d just identify
the vars you’d want to profile and invoke
M-x cider-profile-toggle
(C-c C-= t). By defaults it operates on the symbol
at point, but will prompt for a var if there’s nothing under the point.
There’s also cider-profile-ns-toggle (C-c C-= n) that will profiles all vars in a
namespace.
|
Afterwards you can evaluate some code making use of those vars and their invocations will be automatically profiled.
You can display a report of the collected profiling data with M-x cider-profile-display-stats
(C-c C-= S). If you’d like to limit the displayed data to a particular var you should try
M-x cider-profile-var-summary
(C-c C-= s).
Understanding the Report Format
A typical profiling report looks something like this:
| :name | :n | :sum | :q1 | :med | :q3 | :sd | :mad | |----------------+----+------+-----+------+-----+-----+------| | #'user/my-add | 1 | 2µs | 2µs | 2µs | 2µs | 0µs | 0µs | | #'user/my-mult | 2 | 11µs | 3µs | 8µs | 3µs | 3µs | 5µs |
Let’s demystify all the column names:
-
:n
Number of samples. -
:sum
Aggregate time spent in fn. -
:q1
First quartile i.e. twenty-fifth percentile. -
:med
Median i.e. fiftieth percentile. -
:q3
Third quartile i.e. seventy-fifth percentile. -
:sd
Standard deviation i.e. the square root of the sum of squares of differences from the mean. -
:mad
Mean average deviation, I don’t feel like looking up the definition just now.
Keybindings
Command | Keyboard shortcut | Description |
---|---|---|
|
C-c C-= t |
Toggle profiling for var. Defaults to the var at point. |
|
C-c C-= n |
Toggle profiling for the current ns. |
|
C-c C-= v |
Show whether some var has profiling enabled or not. |
|
C-c C-= s |
Display the profiling summary for some var. |
|
C-c C-= S |
Display the profiling summary for all vars. |
|
C-c C-=+ |
Display or update |
|
C-c C-= c |
Clear profiling data. |