message: docs: add perf section to developer docs
diff: @@ -17,6 +17,7 @@ Developer Notes
  - [DEBUG_LOCKORDER](#debug_lockorder)
  - [Valgrind suppressions file](#valgrind-suppressions-file)
  - [Compiling for test coverage](#compiling-for-test-coverage)
  + - [Performance profiling with perf](#performance-profiling-with-perf)
  - [Locking/mutex usage notes](#lockingmutex-usage-notes)
  - [Threads](#threads)
  - [Ignoring IDE/editor files](#ignoring-ideeditor-files)
  @@ -257,6 +258,51 @@ make cov
  # A coverage report will now be accessible at `./test_bitcoin.coverage/index.html`.
  ```
  +### Performance profiling with perf
  +
  +Profiling is a good way to get a precise idea of where time is being spent in
  +code. One tool for doing profiling on Linux platforms is called
  +[`perf`](http://www.brendangregg.com/perf.html), and has been integrated into
  +the functional test framework. Perf can observe a running process and sample
  +(at some frequency) where its execution is.
  +
  +Perf installation is contingent on which kernel version you're running; see
  +[this StackExchange
  +thread](https://askubuntu.com/questions/50145/how-to-install-perf-monitoring-tool)
  +for specific instructions.
  +
  +Certain kernel parameters may need to be set for perf to be able to inspect the
  +running process' stack.
  +
  +```sh
  +$ sudo sysctl -w kernel.perf_event_paranoid=-1
  +$ sudo sysctl -w kernel.kptr_restrict=0
  +```
  +
  +Make sure you [understand the security
  +trade-offs](https://lwn.net/Articles/420403/) of setting these kernel
  +parameters.
  +
  +To profile a running bitcoind process for 60 seconds, you could use an
  +invocation of `perf record` like this:
  +
  +```sh
  +$ perf record \
  + -g --call-graph dwarf --per-thread -F 140 \
  + -p `pgrep bitcoind` -- sleep 60
  +```
  +
  +You could then analyze the results by running
  +
  +```sh
  +perf report --stdio | c++filt | less
  +```
  +
  +or using a graphical tool like [Hotspot](https://github.com/KDAB/hotspot).
  +
  +See the functional test documentation for how to invoke perf within tests.
  +
  +
  **Sanitizers**
  Bitcoin Core can be compiled with various "sanitizers" enabled, which add
  