Browse Source

improved doc/ on profiling Tor

(Based on join work at
Pierre-Antoine Rault 3 years ago
1 changed files with 55 additions and 0 deletions
  1. 55 0

+ 55 - 0

@@ -142,6 +142,12 @@ run `make test-network`.
 We also have scripts to run integration tests using Stem.  To try them, set
 `STEM_SOURCE_DIR` to your Stem source directory, and run `test-stem`.
+Profiling Tor
+Ongoing notes about Tor profiling can be found at
 Profiling Tor with oprofile
@@ -167,6 +173,55 @@ Here are some basic instructions
    * `opcontrol --dump;`
    * `opreport -l that_dir/*`
  - Profit
+Profiling Tor with perf
+This works with a running Tor, and requires root.
+1. Decide how long you want to profile for. Start with (say) 30 seconds. If that
+   works, try again with longer times.
+2. Find the PID of your running tor process.
+3. Run `perf record --call-graph dwarf -p <PID> sleep <SECONDS>`
+   (You may need to do this as root.)
+   You might need to add `-e cpu-clock` as an option to the perf record line
+   above, if you are on an older CPU without access to hardware profiling
+   events, or in a VM, or something.
+4. Now you have a file. Have a look at it with `perf report
+   --no-children --sort symbol,dso` or `perf report --no-children --sort
+   symbol,dso --stdio --header`. How does it look?
+5a. Once you have a nice big file, you can compress it, encrypt it,
+    and send it to your favorite Tor developers.
+5b. Or maybe you'd rather not send a nice big file. Who knows what's
+    in that!? It's kinda scary. To generate a less scary file, you can use `perf
+    report -g > <FILENAME>.out`. Then you can compress that and put it somewhere
+    public.
+Profiling Tor with gperftools aka Google-performance-tools
+This should work on nearly any unixy system. It doesn't seem to be compatible
+with RunAsDaemon though.
+Beforehand, install google-perftools.
+1. You need to rebuild Tor, hack the linking steps to add `-lprofiler` to the
+   libs. You can do this by adding `LIBS=-lprofiler` when you call `./configure`.
+Now you can run Tor with profiling enabled, and use the pprof utility to look at
+performance! See the gperftools manual for more info, but basically:
+2. Run `env CPUPROFILE=/tmp/profile src/or/tor -f <path/torrc>`. The profile file
+   is not written to until Tor finishes execuction.
+3. Run `pprof src/or/tor /tm/profile` to start the REPL.
 Generating and analyzing a callgraph