bitcoin/doc
0xb10c 411c6cfc6c
tracing: only prepare tracepoint args if attached
Before this commit, we would always prepare tracepoint arguments
regardless of the tracepoint being used or not. While we already made
sure not to include expensive arguments in our tracepoints, this
commit introduces gating to make sure the arguments are only prepared
if the tracepoints are actually used. This is a win-win improvement
to our tracing framework. For users not interested in tracing, the
overhead is reduced to a cheap 'greater than 0' compare. As the
semaphore-gating technique used here is available in bpftrace, bcc,
and libbpf, users interested in tracing don't have to change their
tracing scripts while profiting from potential future tracepoints
passing slightly more expensive arguments. An example are mempool
tracepoints that pass serialized transactions. We've avoided the
serialization in the past as it was too expensive.

Under the hood, the semaphore-gating works by placing a 2-byte
semaphore in the '.probes' ELF section. The address of the semaphore
is contained in the ELF note providing the tracepoint information
(`readelf -n ./src/bitcoind | grep NT_STAPSDT`). Tracing toolkits
like bpftrace, bcc, and libbpf increase the semaphore at the address
upon attaching to the tracepoint. We only prepare the arguments and
reach the tracepoint if the semaphore is greater than zero. The
semaphore is decreased when detaching from the tracepoint.

This also extends the "Adding a new tracepoint" documentation to
include information about the semaphores and updated step-by-step
instructions on how to add a new tracepoint.
2024-10-28 14:27:47 +01:00
..
design doc: multiprocess documentation improvements 2024-09-23 15:03:04 -05:00
man build: Remove Autotools-based build system 2024-08-30 21:31:39 +01:00
policy [doc] update documentation for new mempoolfullrbf default 2024-08-07 10:19:52 +01:00
release-notes doc: Archive 28.0 release notes 2024-10-04 19:25:11 -04:00
assets-attribution.md [doc] Merge doc/assets-attribution.md into contrib/debian/copyright 2015-09-18 18:14:42 +02:00
assumeutxo.md doc: fix assumeutxo design doc link 2024-09-04 22:53:34 +01:00
benchmarking.md doc: replace -? with -h for bench_bitcoin help 2024-10-19 18:44:22 +02:00
bips.md docs: Add 379 and 387 to bips.md 2024-08-27 11:20:54 -04:00
bitcoin-conf.md doc: add testnet4 section header for config file 2024-10-01 15:18:12 +02:00
bitcoin_logo_doxygen.png Lossless image optimization 2013-12-02 10:10:22 +01:00
build-freebsd.md doc: remove mentions of UPnP 2024-10-25 09:27:29 -04:00
build-netbsd.md doc: Update for CMake-based build system 2024-08-16 21:24:08 +01:00
build-openbsd.md doc: remove mentions of UPnP 2024-10-25 09:27:29 -04:00
build-osx.md doc: remove mentions of UPnP 2024-10-25 09:27:29 -04:00
build-unix.md doc: remove mentions of UPnP 2024-10-25 09:27:29 -04:00
build-windows-msvc.md docs: Fix minor typo 2024-09-08 20:25:53 +02:00
build-windows.md doc: remove dependency install instructions from win docs 2024-10-16 14:47:11 +01:00
cjdns.md doc: update getnodeaddresses for CJDNS, I2P and Tor and rm link 2023-06-01 15:52:51 +02:00
CMakeLists.txt cmake: add USE_SOURCE_PERMISSIONS to all configure_file usage 2024-09-06 10:52:19 +01:00
dependencies.md doc: remove mentions of UPnP 2024-10-25 09:27:29 -04:00
descriptors.md Merge bitcoin/bitcoin#22838: descriptors: Be able to specify change and receiving in a single descriptor string 2024-08-28 15:56:15 +01:00
developer-notes.md doc: Updating docs from autotools to cmake 2024-09-18 11:04:52 -04:00
dnsseed-policy.md Update the developer mailing list address. 2024-04-02 15:38:40 -03:00
Doxyfile.in cmake: Add docs build target 2024-08-16 21:19:12 +01:00
external-signer.md wallet: compare address returned by displayaddress 2024-04-16 17:47:43 +02:00
files.md Merge bitcoin/bitcoin#29775: Testnet4 including PoW difficulty adjustment fix 2024-08-07 13:05:04 -04:00
fuzzing.md doc: fuzz: remove Honggfuzz NetDriver instructions 2024-10-15 07:46:54 -03:00
guix.md docs: Point to contrib/guix/README.md in doc/guix.md 2021-01-08 11:40:01 -05:00
i2p.md doc: i2p: improve -i2pacceptincoming mention 2024-04-04 18:32:39 -03:00
init.md Merge bitcoin/bitcoin#28167: init: Add option for rpccookie permissions (replace 26088) 2024-06-27 17:35:08 -04:00
JSON-RPC-interface.md minor: remove unnecessary semicolons from RPC content type examples 2024-06-07 10:47:24 -04:00
managing-wallets.md Merge bitcoin/bitcoin#27064: system: use %LOCALAPPDATA% as default datadir on windows 2024-05-23 12:11:55 -04:00
multiprocess.md doc: multiprocess documentation improvements 2024-09-23 15:03:04 -05:00
multisig-tutorial.md doc: Prepend 'build/' to binary paths under 'src/' in docs 2024-08-29 15:23:12 +02:00
offline-signing-tutorial.md doc: Prepend 'build/' to binary paths under 'src/' in docs 2024-08-29 15:23:12 +02:00
p2p-bad-ports.md init, doc: improve -onlynet help and tor/i2p documentation 2022-03-03 16:14:01 +01:00
productivity.md doc: Update for CMake-based build system 2024-08-16 21:24:08 +01:00
psbt.md doc: M-of-N multisig using descriptor wallets and PSBTs, as well as a signing flow 2021-08-16 10:43:07 +05:00
README.md doc: update IBD requirements in doc/README.md 2024-10-02 17:46:11 +02:00
README_doxygen.md doc: Improve doxygen readme navigation section 2019-09-23 19:22:06 -04:00
README_windows.txt doc: Remove version numbers from READMEs 2017-04-05 09:40:48 +02:00
reduce-memory.md doc: Be vague instead of wrong about MALLOC_ARENA_MAX 2023-09-20 17:12:24 +00:00
reduce-traffic.md doc: update/clarify max outbound connection count 2023-12-11 20:05:25 +01:00
release-notes-28358.md validation: drop maximum -dbcache 2024-05-28 08:36:28 +02:00
release-notes-31130.md doc: add release note for #31130 2024-10-25 09:27:30 -04:00
release-notes-empty-template.md build: Bump minimum supported macOS to 13.0 2024-10-15 10:18:48 +01:00
release-process.md doc: Update for CMake-based build system 2024-08-16 21:24:08 +01:00
REST-interface.md testnet: Introduce Testnet4 2024-08-06 01:38:10 +02:00
tor.md doc: remove mentions of UPnP 2024-10-25 09:27:29 -04:00
tracing.md tracing: only prepare tracepoint args if attached 2024-10-28 14:27:47 +01:00
translation_process.md doc: Updating docs from autotools to cmake 2024-09-18 11:04:52 -04:00
translation_strings_policy.md doc: Updating docs from autotools to cmake 2024-09-18 11:04:52 -04:00
zmq.md doc: correct the zmq automatic build info 2024-09-25 07:07:04 -04:00

Bitcoin Core

Setup

Bitcoin Core is the original Bitcoin client and it builds the backbone of the network. It downloads and, by default, stores the entire history of Bitcoin transactions, which requires several hundred gigabytes or more of disk space. Depending on the speed of your computer and network connection, the synchronization process can take anywhere from a few hours to several days or more.

To download Bitcoin Core, visit bitcoincore.org.

Running

The following are some helpful notes on how to run Bitcoin Core on your native platform.

Unix

Unpack the files into a directory and run:

  • bin/bitcoin-qt (GUI) or
  • bin/bitcoind (headless)

Windows

Unpack the files into a directory, and then run bitcoin-qt.exe.

macOS

Drag Bitcoin Core to your applications folder, and then run Bitcoin Core.

Need Help?

Building

The following are developer notes on how to build Bitcoin Core on your native platform. They are not complete guides, but include notes on the necessary libraries, compile flags, etc.

Development

The Bitcoin repo's root README contains relevant information on the development process and automated testing.

Resources

Miscellaneous

License

Distributed under the MIT software license.