aboutsummaryrefslogtreecommitdiff
path: root/src/p2p/net_node.inl
Commit message (Collapse)AuthorAgeFilesLines
...
* net_node: skimplify rate limit code, and log as appropriatemoneromooo-monero2015-08-111-8/+5
|
* ** CHANGES ARE EXPERIMENTAL (FOR TESTING ONLY)NoodleDoodleNoodleDoodleNoodleDoodleNoo2015-07-151-9/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Bockchain: 1. Optim: Multi-thread long-hash computation when encountering groups of blocks. 2. Optim: Cache verified txs and return result from cache instead of re-checking whenever possible. 3. Optim: Preload output-keys when encoutering groups of blocks. Sort by amount and global-index before bulk querying database and multi-thread when possible. 4. Optim: Disable double spend check on block verification, double spend is already detected when trying to add blocks. 5. Optim: Multi-thread signature computation whenever possible. 6. Patch: Disable locking (recursive mutex) on called functions from check_tx_inputs which causes slowdowns (only seems to happen on ubuntu/VMs??? Reason: TBD) 7. Optim: Removed looped full-tx hash computation when retrieving transactions from pool (???). 8. Optim: Cache difficulty/timestamps (735 blocks) for next-difficulty calculations so that only 2 db reads per new block is needed when a new block arrives (instead of 1470 reads). Berkeley-DB: 1. Fix: 32-bit data errors causing wrong output global indices and failure to send blocks to peers (etc). 2. Fix: Unable to pop blocks on reorganize due to transaction errors. 3. Patch: Large number of transaction aborts when running multi-threaded bulk queries. 4. Patch: Insufficient locks error when running full sync. 5. Patch: Incorrect db stats when returning from an immediate exit from "pop block" operation. 6. Optim: Add bulk queries to get output global indices. 7. Optim: Modified output_keys table to store public_key+unlock_time+height for single transaction lookup (vs 3) 8. Optim: Used output_keys table retrieve public_keys instead of going through output_amounts->output_txs+output_indices->txs->output:public_key 9. Optim: Added thread-safe buffers used when multi-threading bulk queries. 10. Optim: Added support for nosync/write_nosync options for improved performance (*see --db-sync-mode option for details) 11. Mod: Added checkpoint thread and auto-remove-logs option. 12. *Now usable on 32-bit systems like RPI2. LMDB: 1. Optim: Added custom comparison for 256-bit key tables (minor speed-up, TBD: get actual effect) 2. Optim: Modified output_keys table to store public_key+unlock_time+height for single transaction lookup (vs 3) 3. Optim: Used output_keys table retrieve public_keys instead of going through output_amounts->output_txs+output_indices->txs->output:public_key 4. Optim: Added support for sync/writemap options for improved performance (*see --db-sync-mode option for details) 5. Mod: Auto resize to +1GB instead of multiplier x1.5 ETC: 1. Minor optimizations for slow-hash for ARM (RPI2). Incomplete. 2. Fix: 32-bit saturation bug when computing next difficulty on large blocks. [PENDING ISSUES] 1. Berkely db has a very slow "pop-block" operation. This is very noticeable on the RPI2 as it sometimes takes > 10 MINUTES to pop a block during reorganization. This does not happen very often however, most reorgs seem to take a few seconds but it possibly depends on the number of outputs present. TBD. 2. Berkeley db, possible bug "unable to allocate memory". TBD. [NEW OPTIONS] (*Currently all enabled for testing purposes) 1. --fast-block-sync arg=[0:1] (default: 1) a. 0 = Compute long hash per block (may take a while depending on CPU) b. 1 = Skip long-hash and verify blocks based on embedded known good block hashes (faster, minimal CPU dependence) 2. --db-sync-mode arg=[[safe|fast|fastest]:[sync|async]:[nblocks_per_sync]] (default: fastest:async:1000) a. safe = fdatasync/fsync (or equivalent) per stored block. Very slow, but safest option to protect against power-out/crash conditions. b. fast/fastest = Enables asynchronous fdatasync/fsync (or equivalent). Useful for battery operated devices or STABLE systems with UPS and/or systems with battery backed write cache/solid state cache. Fast - Write meta-data but defer data flush. Fastest - Defer meta-data and data flush. Sync - Flush data after nblocks_per_sync and wait. Async - Flush data after nblocks_per_sync but do not wait for the operation to finish. 3. --prep-blocks-threads arg=[n] (default: 4 or system max threads, whichever is lower) Max number of threads to use when computing long-hash in groups. 4. --show-time-stats arg=[0:1] (default: 1) Show benchmark related time stats. 5. --db-auto-remove-logs arg=[0:1] (default: 1) For berkeley-db only. Auto remove logs if enabled. **Note: lmdb and berkeley-db have changes to the tables and are not compatible with official git head version. At the moment, you need a full resync to use this optimized version. [PERFORMANCE COMPARISON] **Some figures are approximations only. Using a baseline machine of an i7-2600K+SSD+(with full pow computation): 1. The optimized lmdb/blockhain core can process blocks up to 585K for ~1.25 hours + download time, so it usually takes 2.5 hours to sync the full chain. 2. The current head with memory can process blocks up to 585K for ~4.2 hours + download time, so it usually takes 5.5 hours to sync the full chain. 3. The current head with lmdb can process blocks up to 585K for ~32 hours + download time and usually takes 36 hours to sync the full chain. Averate procesing times (with full pow computation): lmdb-optimized: 1. tx_ave = 2.5 ms / tx 2. block_ave = 5.87 ms / block memory-official-repo: 1. tx_ave = 8.85 ms / tx 2. block_ave = 19.68 ms / block lmdb-official-repo (0f4a036437fd41a5498ee5e74e2422ea6177aa3e) 1. tx_ave = 47.8 ms / tx 2. block_ave = 64.2 ms / block **Note: The following data denotes processing times only (does not include p2p download time) lmdb-optimized processing times (with full pow computation): 1. Desktop, Quad-core / 8-threads 2600k (8Mb) - 1.25 hours processing time (--db-sync-mode=fastest:async:1000). 2. Laptop, Dual-core / 4-threads U4200 (3Mb) - 4.90 hours processing time (--db-sync-mode=fastest:async:1000). 3. Embedded, Quad-core / 4-threads Z3735F (2x1Mb) - 12.0 hours processing time (--db-sync-mode=fastest:async:1000). lmdb-optimized processing times (with per-block-checkpoint) 1. Desktop, Quad-core / 8-threads 2600k (8Mb) - 10 minutes processing time (--db-sync-mode=fastest:async:1000). berkeley-db optimized processing times (with full pow computation) 1. Desktop, Quad-core / 8-threads 2600k (8Mb) - 1.8 hours processing time (--db-sync-mode=fastest:async:1000). 2. RPI2. Improved from estimated 3 months(???) into 2.5 days (*Need 2AMP supply + Clock:1Ghz + [usb+ssd] to achieve this speed) (--db-sync-mode=fastest:async:1000). berkeley-db optimized processing times (with per-block-checkpoint) 1. RPI2. 12-15 hours (*Need 2AMP supply + Clock:1Ghz + [usb+ssd] to achieve this speed) (--db-sync-mode=fastest:async:1000).
* Merge pull request #292Riccardo Spagni2015-05-261-31/+36
|\ | | | | | | c44755a Build seed node list without duplicates (warptangent)
| * Build seed node list without duplicateswarptangent2015-05-251-31/+36
| | | | | | | | | | | | | | | | | | | | | | | | The random selection of a node shouldn't favor repeats that occur in the hardcoded and DNS seed node lists. Remove hardcoded ":18080" address which gives parse error. Test: bitmonerod --log-level 2 The seed node list displayed at startup shouldn't show duplicate addresses (includes port).
* | Fix compile for GCC 5.1.0warptangent2015-05-251-1/+5
|/ | | | | | | | | | Add fix for compile error with multiple uses of peerid_type (uint64_t) variable in lambda expression. - known GCC issue: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65843 epee: replace return value of nullptr for expected boolean with false. Fixes #231.
* Merge branch 'clang_fixes' into clang_fixes-masterSergey Kazenyuk2015-05-061-4/+3
|\
| * Fix missing virtual destructorSergey Kazenyuk2015-04-201-2/+2
| |
* | Merge pull request #252Riccardo Spagni2015-04-021-38/+200
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 618f20c Network 1.7; Quieted the debug a bit. (rfree2monero) 391c7f9 Utils: use const, document dbg. Less default debug (rfree2monero) 44f4234 [fix] mac os x includes std::random... (rfree2monero) 162c993 Network 1.6: network limits, logging, +doxy (rfree2monero) a3b2226 my changelog (rfree2monero) 2900b1e doxygen files (rfree2monero) 1489310 doxygen related tool (rfree2monero) f9dba47 added windows_stream.* console colors (rfree2monero) c511abf remerged; commands JSON. logging upgrade. doxygen (rfree2monero) f79821a fix locking in count-peers thread (2) (rfree2monero) 0198ffb 2014 network limit 1.3 fix log/path/data +utils (rfree2monero) ae2a506 2014 network limit 1.2 +utils +toc -doc -drmonero (rfree2monero) 0f06dca fixed size_t on windows (rfree2monero) 39fc63f removed not needed <netinet/in.h> (rfree2monero) 5ce4256 2014 network limit 1.1 +utils +toc -doc -drmonero (rfree2monero) eabb519 2014 network limit 1.0a +utils +toc -doc -drmonero (rfree2monero)
| * | remerged; commands JSON. logging upgrade. doxygenrfree2monero2015-04-011-25/+35
| | |
| * | Merge remote-tracking branch 'monero-official/master' into network-1.6-work1rfree2monero2015-04-011-2/+6
| |\ \
| * | | fix locking in count-peers thread (2)rfree2monero2015-02-241-9/+10
| | | |
| * | | 2014 network limit 1.2 +utils +toc -doc -drmonerorfree2monero2015-02-201-29/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | new update of the pr with network limits more debug options: discarding downloaded blocks all or after given height. trying to trigger the locking errors. debug levels polished/tuned to sane values. debug/logging improved. warning: this pr should be correct code, but it could make an existing (in master version) locking error appear more often. it's a race on the list (map) of peers, e.g. between closing/deleting them versus working on them in net-limit sleep in sending chunk. the bug is not in this code/this pr, but in the master version. the locking problem of master will be fixed in other pr. problem is ub, and in practice is seems to usually cause program abort (tested on debian stable with updated gcc). see --help for option to add sleep to trigger the error faster.
| * | | 2014 network limit 1.1 +utils +toc -doc -drmonerorfree2monero2015-02-201-6/+60
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Update of the PR with network limits works very well for all speeds (but remember that low download speed can stop upload because we then slow down downloading of blockchain requests too) more debug options fixed pedantic warnings in our code should work again on Mac OS X and FreeBSD fixed warning about size_t tested on Debian, Ubuntu, Windows(testing now) TCP options and ToS (QoS) flag FIXED peer number limit FIXED some spikes in ingress/download FIXED problems when other up and down limit
| * | | 2014 network limit 1.0a +utils +toc -doc -drmonerorfree2monero2015-02-201-36/+147
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | commands and options for network limiting works very well e.g. for 50 KiB/sec up and down ToS (QoS) flag peer number limit TODO some spikes in ingress/download TODO problems when other up and down limit added "otshell utils" - simple logging (with colors, text files channels)
* | | | update hardcoded fallback seedsRiccardo Spagni2015-04-021-12/+25
| |/ / |/| |
* | | Daemonize changes pulled in -- daemon buildsThomas Winget2015-02-241-1/+6
|/ / | | | | | | | | | | | | many RPC functions added by the daemonize changes (and related changes on the upstream dev branch that were not merged) were commented out (apart from return). Other than that, this *should* work...at any rate, it builds, and that's something.
* | Fix seed node threaded DNS lookupwarptangent2015-01-141-27/+40
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Use copied value of seed node index during thread creation, not reference. - fixes segfault Use boost::thread::try_join_until() instead of an atomic flag result variable for each thread. Add and handle interrupt for thread timeout. - fixes segfault where a thread exceeds requested timeout and tries to assign results to a referenced, but now out-of-scope, variable in the main thread.
* | Merge pull request #206Riccardo Spagni2015-01-081-11/+57
|\ \ | | | | | | | | | | | | | | | 1b46226 std::atomic_flag has no copy/move constructor, can't have a vector (Thomas Winget) df53c0a small typo in previous commit (Thomas Winget) 4a53898 DNS seed timeout and fallback (Thomas Winget)
| * | std::atomic_flag has no copy/move constructor, can't have a vectorThomas Winget2014-12-151-9/+7
| | |
| * | small typo in previous commitThomas Winget2014-12-151-1/+1
| | |
| * | DNS seed timeout and fallbackThomas Winget2014-12-151-11/+59
| |/
* / year updated in licenseRiccardo Spagni2015-01-021-1/+1
|/
* remove dangling upnp port mappings, updated miniupnpcRiccardo Spagni2014-10-021-2/+10
|
* reload checkpoints file every ~hr and print if any failThomas Winget2014-09-301-1/+3
| | | | also some other minor bug squashing and code formatting
* use boost::asio::ip::address because cross-platform plzRiccardo Spagni2014-09-241-94/+25
|
* seed node DNS code updated to use DNSResolverThomas Winget2014-09-231-39/+109
| | | | | | Also implemented rudimentary IPv6 support, but commented it out because it's not widely supported by ISPs for now, and thus is not currently supported by Monero.
* ipv4 and ipv6 resolution workingThomas Winget2014-09-231-11/+27
| | | | | | IPv4 and IPv6 name resolution working. Unit tests written (and passing). net_node.{h,inl} code modified to use DNS seeds.
* Fix time_t serialization issueZachary Michaels2014-09-151-2/+6
| | | | | | | | | | | On 32-bit MinGW-w64, time_t is int32_t. The existing code was serializing time_t directly and implicitly assuming that time_t is int64_t. This commit formalizes that assumption by serializing int64_t directly and casting to time_t where appropriate. Thanks go to greatwolf for reporting this issue. monero-project/bitmonero#88
* Make P2P use the testnet data dirZachary Michaels2014-09-151-1/+3
|
* Replace macro with equivalent function callZachary Michaels2014-09-151-47/+43
| | | | Also removed useless bool return
* Add testnet seed nodesZachary Michaels2014-09-151-3/+8
|
* Separate p2p port for testnetZachary Michaels2014-09-151-4/+19
|
* Reorganize testnet constantsZachary Michaels2014-09-151-2/+2
|
* Add testnet flagZachary Michaels2014-09-151-15/+19
| | | | Source: cryptonotefoundation
* versioning now includes the commit hash, or -final for tagged releasesRiccardo Spagni2014-09-121-1/+1
|
* more dynamic miniupnp fixesfluffypony2014-09-101-2/+9
|
* miniupnpc includes fixedfluffypony2014-09-101-2/+2
|
* moved non-critical warnings and errors to log level 1fluffypony2014-09-091-4/+4
|
* License updated to BSD 3-clausefluffypony2014-07-231-6/+32
|
* Allow priority peers when there are exclusive peersZachary Michaels2014-07-011-1/+1
| | | | | | | | Per my reading this change makes sense since a subset of the exclusive peers could be priority peers. Priority peers that are not exclusive will not get loaded, and priority peers that *are* exclusive will get special treatment. Prior to this change it looks like priority peers were silently ignored when exclusive peers were provided.
* added new seed nodesfluffypony2014-06-101-0/+9
|
* 0.8.8updatemydesktop2014-05-251-68/+126
|
* mac osx building fixesmydesktop2014-04-301-1/+4
|
* various fixes to allow mac osx compilationmydesktop2014-04-301-1/+3
|
* 2nd seed node addedthankful_for_today2014-04-301-0/+1
|
* Bitmonero releasethankful_for_today2014-04-181-10/+1
|
* Port mapping with UPnPAntonio Juarez2014-04-091-0/+35
|
* some fixesAntonio Juarez2014-03-201-9/+48
|
* moved all stuff to githubAntonio Juarez2014-03-031-0/+1020