mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-21 14:34:49 +01: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)
|
- [DEBUG_LOCKORDER](#debug_lockorder)
|
||||||
- [Valgrind suppressions file](#valgrind-suppressions-file)
|
- [Valgrind suppressions file](#valgrind-suppressions-file)
|
||||||
- [Compiling for test coverage](#compiling-for-test-coverage)
|
- [Compiling for test coverage](#compiling-for-test-coverage)
|
||||||
|
- [Performance profiling with perf](#performance-profiling-with-perf)
|
||||||
- [Locking/mutex usage notes](#lockingmutex-usage-notes)
|
- [Locking/mutex usage notes](#lockingmutex-usage-notes)
|
||||||
- [Threads](#threads)
|
- [Threads](#threads)
|
||||||
- [Ignoring IDE/editor files](#ignoring-ideeditor-files)
|
- [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`.
|
# 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**
|
**Sanitizers**
|
||||||
|
|
||||||
Bitcoin Core can be compiled with various "sanitizers" enabled, which add
|
Bitcoin Core can be compiled with various "sanitizers" enabled, which add
|
||||||
|
|
Loading…
Add table
Reference in a new issue