dash/doc
MarcoFalke 33384816b5 Merge #14519: tests: add utility to easily profile node performance with perf
13782b8ba8 docs: add perf section to developer docs (James O'Beirne)
58180b5fd4 tests: add utility to easily profile node performance with perf (James O'Beirne)

Pull request description:

  Adds a context manager to easily (and selectively) profile node performance during functional test execution using `perf`.

  While writing some tests, I encountered some odd bitcoind slowness. I wrote up a utility (`TestNode.profile_with_perf`) that generates performance diagnostics for a node by running `perf` during the execution of a particular region of test code.

  `perf` usage is detailed in the excellent (and sadly unmerged) https://github.com/bitcoin/bitcoin/pull/12649; all due props to @eklitzke.

  ### Example

  ```python
  with node.profile_with_perf("large-msgs"):
      for i in range(200):
          node.p2p.send_message(some_large_msg)
      node.p2p.sync_with_ping()
  ```

  This generates a perf data file in the test node's datadir (`/tmp/testtxmpod0y/node0/node-0-TestName-large-msgs.perf.data`).

  Running `perf report` generates nice output about where the node spent most of its time while running that part of the test:

  ```bash
  $ perf report -i /tmp/testtxmpod0y/node0/node-0-TestName-large-msgs.perf.data --stdio \
    | c++filt \
    | less

  # To display the perf.data header info, please use --header/--header-only options.
  #
  #
  # Total Lost Samples: 0
  #
  # Samples: 135  of event 'cycles:pp'
  # Event count (approx.): 1458205679493582
  #
  # Children      Self  Command          Shared Object        Symbol
  # ........  ........  ...............  ...................  ........................................................................................................................................................................................................................................................................
  #
      70.14%     0.00%  bitcoin-net      bitcoind             [.] CNode::ReceiveMsgBytes(char const*, unsigned int, bool&)
                  |
                  ---CNode::ReceiveMsgBytes(char const*, unsigned int, bool&)

      70.14%     0.00%  bitcoin-net      bitcoind             [.] CNetMessage::readData(char const*, unsigned int)
                  |
                  ---CNetMessage::readData(char const*, unsigned int)
                     CNode::ReceiveMsgBytes(char const*, unsigned int, bool&)

      35.52%     0.00%  bitcoin-net      bitcoind             [.] std::vector<char, zero_after_free_allocator<char> >::_M_fill_insert(__gnu_cxx::__normal_iterator<char*, std::vector<char, zero_after_free_allocator<char> > >, unsigned long, char const&)
                  |
                  ---std::vector<char, zero_after_free_allocator<char> >::_M_fill_insert(__gnu_cxx::__normal_iterator<char*, std::vector<char, zero_after_free_allocator<char> > >, unsigned long, char const&)
                     CNetMessage::readData(char const*, unsigned int)
                     CNode::ReceiveMsgBytes(char const*, unsigned int, bool&)

  ...
  ```

Tree-SHA512: 9ac4ceaa88818d5eca00994e8e3c8ad42ae019550d6583972a0a4f7b0c4f61032e3d0c476b4ae58756bc5eb8f8015a19a7fc26c095bd588f31d49a37ed0c6b3e
2021-08-18 22:24:36 -03:00
..
gitian-building
man Bump to v0.17.0.3 2021-06-04 00:33:04 +03:00
release-notes/dash doc: Archive v0.17.0.2 release notes 2021-06-04 00:12:41 +03:00
.gitignore
assets-attribution.md
benchmarking.md merge #18011: Replace current benchmarking framework with nanobench 2021-07-05 18:28:55 +05:30
bips.md Merge #13255: trivial: Fixed typos and cleaned up language 2021-07-02 12:59:29 +03:00
bitcoin_logo_doxygen.png
build-cross.md
build-generic.md
build-netbsd.md continued 2021-06-26 11:54:34 -05:00
build-osx.md Merge #15176: docs: Get rid of badly named readme 2021-08-12 23:45:30 -03:00
build-unix.md Merge #14153: Docs: Add disable-wallet section to OSX build instructions, update line in Unix instructions 2021-07-07 12:04:54 -04:00
build-windows.md
dash-conf.md Merge #16621: doc: add default bitcoin.conf locations 2021-07-12 20:52:56 -05:00
developer-notes.md Merge #14519: tests: add utility to easily profile node performance with perf 2021-08-18 22:24:36 -03:00
dnsseed-policy.md
Doxyfile.in partial merge #17398: Update leveldb to 1.22+ (#4230) 2021-07-15 15:42:55 -05:00
files.md fix misc. spelling errors 2021-07-19 12:51:30 -05:00
fuzzing.md bitcoin#17942: Improve fuzzing docs for macOS users 2021-08-11 09:48:41 +05:30
gitian-building.md Merge #13366: Docs: Rename “OS X” to the newer “macOS” convention 2021-06-28 02:31:48 +03:00
init.md Merge #14395: Fix typos and cleanup 2021-07-22 16:02:34 -04:00
instantsend.md
JSON-RPC-interface.md Merge #19050: doc: Add warning for rest interface limitation 2021-07-15 19:38:52 -05:00
keepass.md fix misc. spelling errors 2021-07-19 12:51:30 -05:00
masternode-budget.md
productivity.md dashify productivity.md 2021-07-10 12:10:51 -05:00
psbt.md Merge #15012: Docs: Fix minor error in doc/psbt.md 2021-08-03 10:36:15 -04:00
README_windows.txt
README.md Merge #13941: Add PSBT documentation 2021-07-19 17:11:15 -05:00
reduce-memory.md Merge #17751: doc: use recommended shebang approach in documentation code block 2021-07-14 18:43:55 -05:00
reduce-traffic.md Merge #15990: Add tests and documentation for blocksonly 2021-07-21 15:53:38 -05:00
release-notes.md doc: Add 0.17.0.3 release notes 2021-06-04 00:37:07 +03:00
release-process.md Merge #15176: docs: Get rid of badly named readme 2021-08-12 23:45:30 -03:00
REST-interface.md Merge #19050: doc: Add warning for rest interface limitation 2021-07-15 19:38:52 -05:00
shared-libraries.md
tor.md Merge #14804: docs: Less confusing documentation for torpassword 2021-08-15 11:08:08 -04:00
translation_process.md
translation_strings_policy.md Merge #15353: docs: Minor textual improvements in translation_strings_policy.md 2021-06-28 19:05:22 -05:00
travis-ci.md
zmq.md Merge #19870: doc: update PyZMQ install instructions, fix zmq_sub.py file permissions 2021-07-15 19:30:07 -05:00

Dash Core

This is the official reference wallet for Dash digital currency and comprises the backbone of the Dash peer-to-peer network. You can download Dash Core or build it yourself using the guides below.

Running

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

Unix

Unpack the files into a directory and run:

  • bin/dash-qt (GUI) or
  • bin/dashd (headless)

Windows

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

macOS

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

Need Help?

Building

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

Development

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

Resources

Miscellaneous

License

Distributed under the MIT software license. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. This product includes cryptographic software written by Eric Young (eay@cryptsoft.com), and UPnP software written by Thomas Bernard.