mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-02 09:46:52 -05:00
docs: add perf section to developer docs
This commit is contained in:
parent
58180b5fd4
commit
13782b8ba8
1 changed files with 46 additions and 0 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue