dash/doc
Wladimir J. van der Laan 89ced17da0
Merge #12495: Increase LevelDB max_open_files
ccedbaf Increase LevelDB max_open_files unless on 32-bit Unix. (Evan Klitzke)

Pull request description:

  Currently we set `max_open_files = 64` on all architectures due to concerns about file descriptor exhaustion. This is extremely expensive due to how LevelDB is designed.

  When a LevelDB file handle is opened, a bloom filter and block index are decoded, and some CRCs are checked. Bloom filters and block indexes in open table handles can be checked purely in memory. This means that when doing a key lookup, if a given table file may contain a given key, all of the lookup operations can happen completely in RAM until the block itself is fetched. In the common case fetching the block is one disk seek, because the block index stores its physical offset. This is the ideal case, and what we want to happen as often as possible.

  If a table file handle is not open in the table cache, then in addition to the regular system calls to open the file, the block index and bloom filter need to be decoded before they can be checked. This is expensive and is something we want to avoid.

  The current setting of 64 file handles means that on a synced node, only about 4% of key lookups can be satisifed by table file handles that are actually open and in memory.

  The original concerns about file descriptor exhaustion are unwarranted on most systems because:
   * On 64-bit POSIX hosts LevelDB will open up to 1000 file descriptors using `mmap()`, and it does not retain an open file descriptor for such files.
   * On Windows non-socket files do not interfere with the main network `select()` loop, so the same fd exhaustion issues do not apply there.

  This change keeps the default `max_open_files` value (which is 1000) on all systems except 32-bit POSIX hosts (which do not use `mmap()`). Open file handles use about 20 KB of memory (for the block index), so the extra file handles do not cause much memory overhead. At most 1000 will be open, and a fully synced node right now has about 1500 such files.

  Profile of `loadblk` thread before changes: https://monad.io/maxopenfiles-master.svg
  Profile of `loadblk` thread after changes: https://monad.io/maxopenfiles-increase.svg

Tree-SHA512: de54f77d57e9f8999eaf8d12592aab5b02f5877be8fa727a1f42cf02da2693ce25846445eb19eb138ce4e5045d1c65e14054df72faf3ff32c7655c9cfadd27a9
2020-10-14 13:27:33 -04:00
..
gitian-building Merge #10968: Add instructions for parallel gitian builds. 2019-08-12 09:07:03 -05:00
man Bump few things and update man pages for v0.16 (#3737) 2020-09-28 19:53:41 +03:00
release-notes/dash v0.15 release notes draft (#3283) 2020-01-14 22:46:02 +03:00
.gitignore Merge #10166: Ignore Doxyfile generated from Doxyfile.in template. 2019-05-19 20:43:00 -05:00
assets-attribution.md Merge #945: More dash->dashcore 2016-08-19 05:46:30 -06:00
benchmarking.md bench_bitcoin -> bench_dash 2020-04-06 16:56:32 +00:00
bips.md Merge #12143: [Doc] Fix link for BIP-159 pull request 2020-06-18 11:41:53 -05:00
bitcoin_logo_doxygen.png updated darkcoin logo 2015-01-13 11:55:07 -07:00
build-cross.md Update Windows build instructions (#3453) 2020-04-30 13:28:12 +03:00
build-generic.md Fix Dash specific docs and scripts 2019-11-04 13:29:32 +01:00
build-osx.md Merge #11761: [docs] initial QT documentation 2020-07-17 15:42:50 -05:00
build-unix.md Update OpenBSD build docs as in bitcoin#11442 2019-09-30 08:33:16 +02:00
build-windows.md Update Windows build instructions (#3453) 2020-04-30 13:28:12 +03:00
developer-notes.md Merge #12495: Increase LevelDB max_open_files 2020-10-14 13:27:33 -04:00
dnsseed-policy.md Update dnsseed-policy.md (#2751) 2019-03-08 21:21:20 +03:00
Doxyfile.in Merge #10155: build: Deduplicate version numbers 2019-06-14 01:25:59 -05:00
files.md Merge #11726: Cleanups + nit fixes for walletdir PR 2020-03-04 10:13:19 -06:00
fuzzing.md dashify what made sense in fuzzing.md 2019-08-26 17:25:02 -05:00
gitian-building.md Merge #11392: Fix stale link in gitian-building.md 2020-01-10 10:34:01 -06:00
init.md Merge #12452: docs: clarified systemd installation instructions in init.md for Ubuntu users. 2020-07-17 15:42:50 -05:00
instantsend.md Report instantlock: true for transactions locked via ChainLocks (#2877) 2019-04-25 18:38:26 +03:00
keepass.md Update links and references to current communication channels (#1906) 2018-02-08 08:44:21 +03:00
masternode-budget.md Remove all legacy/compatibility MN code (#2600) 2019-01-03 12:17:43 +03:00
README_osx.md Merge #12584: Fix typos and cleanup documentation 2020-07-17 15:42:50 -05:00
README_windows.txt Merge #10155: build: Deduplicate version numbers 2019-06-14 01:25:59 -05:00
README.md Merge #9172: Resurrect pstratem's "Simple fuzzing framework" 2019-08-24 10:22:40 -05:00
reduce-traffic.md Merge #8712: Remove maxuploadtargets recommended minimum 2018-01-11 13:19:32 +01:00
release-notes.md bitcoin -> Dash Core 2020-04-23 14:33:31 -05:00
release-process.md Merge #13706: doc: Minor improvements to release-process.md 2020-07-17 15:45:43 -05:00
REST-interface.md Merge #12584: Fix typos and cleanup documentation 2020-07-17 15:42:50 -05:00
shared-libraries.md Merge #8848: Add NULLDUMMY verify flag in bitcoinconsensus.h 2018-01-30 20:28:51 +01:00
tor.md Merge #12384: [Docs] Add version footnote to tor.md (#3473) 2020-05-12 02:32:38 +03:00
translation_process.md Merge pull request #3617 from PastaPastaPasta/backports-0.17-pr15 2020-07-19 19:27:24 +03:00
translation_strings_policy.md Merge #13592: Docs: Modify policy to not translate command-line help 2020-07-08 18:32:05 -05:00
travis-ci.md Merge #8879: [doc] Rework docs 2018-01-12 09:57:56 +01:00
zmq.md Merge #12584: Fix typos and cleanup documentation 2020-07-17 15:42:50 -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 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.

OS X

Drag Dash-Qt to your applications folder, and then run Dash-Qt.

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.