:: Re: [Libbitcoin] libbitcoin node up…
Top Page
Delete this message
Reply to this message
Author: Police Terror
Date:  
To: libbitcoin
Subject: Re: [Libbitcoin] libbitcoin node update
Yes I'm very excited for this release. I'm currently working on porting
the C wrapper to the latest API.

Neill Miller:
> Excellent news -- looking forward to v3 all around!
>
> -Neill.
>
> On Fri, Dec 09, 2016 at 05:29:21PM -0800, Eric Voskuil wrote:
>> Reposting as text, formatted HTML got moderated :/.
>>
>> ---
>>
>> We’ve spent a good amount of time on node, following a rewrite of validation
>> and script processing, and on the heels of the previous network redesign.
>> I’m very happy with the results. We have a very stable node and excellent
>> block validation performance. We have been lucky to have the full time
>> support of Bitprim in operational testing of the node on both high and low
>> end platforms. You may recall that we previously achieved full chain sync of
>> about 15 minutes (all blocks checkpointed). We have since validated the full
>> mainnet chain countless times. Despite the fact that our networking is still
>> not optimal in terms of catch-up sync (blocks-first), we are able to sync
>> 0-295,000 and validate 295,001-top (Core parameters) in about 7 hrs. I
>> expect that number to come down significantly in v4 owing to more advanced
>> networking.
>>
>> Below is a sample of the new console reporting format for block acceptance,
>> on a high end server (SSD, 12 Cores, 128GB RAM). You can see that we are
>> processing at a rate of about 3-4 blocks per second at the top of the
>> current chain. But given network limitations this is not the full story. As
>> you can see our median time process a block is about 62.5 µs per input (1 µs
>> = one millionth of a second), or full block validation times (i.e. excluding
>> the empty blocks) averaging under .3 seconds. We have not tested on more
>> than 12 cores. The number of cores used (and validation thread priority) is
>> configurable, so we can easily see improvement in speed from 1-12 cores
>> presently. I expect those numbers would continue to improve with additional
>> cores up to some point of diminishing returns.
>>
>> A libbitcoin node store is 3 files for a total of ~102GB. The files are
>> portable across machines. In other words 128GB RAM is more than sufficient
>> to hold the entire chain, reducing paging costs. However even an 8GB RAM
>> machine with 4 cores maintains healthy performance. We have not tested at
>> intermediate RAM levels (e.g. 64 or 32 GB) but these sizes are expected to
>> be very performant.
>>
>> I should point out that libbitcoin does not use a UTXO database nor does it
>> cache UTXOs, so there is no problem with scale as the blockchain grows.
>> Per-input performance is linear across the full range of the chain
>> regardless of hardware (assuming a drive of sufficient space for the chain).
>> Outputs are read, and updated as spent, directly via transaction records.
>> The cost of all store reads, including outputs, activation state, block and
>> transaction duplicate checks, difficulty, and timestamps, is incurred all at
>> once and captured in the pµs value below (averaging 15 µs per input). The
>> cost of storing the new block, including spent output information, is
>> reflected in the dµs value below (averaging 5 µs per input). Reading and
>> writing independently from validation and other processing is not only huge
>> boost for testability but also dramatically simplifies code and exposes
>> important optimizations. For example, all per-input operations with the
>> exception of block check are parallelized either by tx or input.
>>
>> Our script validation uses a fully-generalized script processor:
>>
>> https://github.com/libbitcoin/libbitcoin/blob/master/include/bitcoin/bitcoin
>> /impl/machine/interpreter.ipp
>>
>> This makes Bitcoin script easy to understand/ and test, and safer to
>> maintain. Despite this high level of generalization compared to other
>> implementations, we are achieving a script validation cost of 41 µs per
>> input. This is 13.5% faster than we achieve using libconsensus (which can be
>> swapped in via a configuration option). Testing has confirmed that this is
>> entirely the consequence of the need to serialize each transaction and
>> previous output for that library’s interface, and because each must then be
>> deserialized internal to that library. As such libconsensus is not viable
>> for high performance implementations, such as mining, but the cost is small
>> enough to not adversely impact other scenarios.
>>
>> e
>>
>>
>> Block Totals (milliseconds)
>> ----------------------------------
>> txs: count of transactions
>> ins: count of inputs
>> wms: wait on previous block
>> vms: validate (*) time
>>
>> Per Input (microseconds)
>> ----------------------------------
>> vµs: validate (*)
>> rµs: deserialization (read from wire)
>> cµs: check block (context-free validation)
>> pµs: populate (all database reads)
>> aµs: accept block (contextual validation)
>> sµs: connect block (script verify)
>> dµs: deposit (all database writes)
>>
>> (*) validate is the time from start of block-check to the end of
>> block-connect. This is the time that it takes to fully validate a block
>> object. This is important in that it is the time, after receipt and
>> deserialization (time also shown) of a (whole) block from a peer, that a
>> miner must wait until a notification of validity is available.
>>
>> 09:28:37.985756 INFO [blockchain] Block [441133] 2412 txs 4214 ins  188 wms
>> 307 vms   73 vµs    1 rµs    5 cµs   19 pµs    2 aµs   48 sµs    5 dµs
>> 09:28:38.295939 INFO [blockchain] Block [441134] 2691 txs 4863 ins  291 wms
>> 286 vms   59 vµs    2 rµs    5 cµs   21 pµs    1 aµs   31 sµs    5 dµs
>> 09:28:38.751393 INFO [blockchain] Block [441135] 2136 txs 4484 ins  270 wms
>> 434 vms   97 vµs    1 rµs    4 cµs   26 pµs    2 aµs   65 sµs    5 dµs
>> 09:28:38.966397 INFO [blockchain] Block [441136] 1918 txs 3528 ins  427 wms
>> 198 vms   56 vµs    1 rµs    4 cµs   15 pµs    1 aµs   36 sµs    5 dµs
>> 09:28:39.170047 INFO [blockchain] Block [441137] 1915 txs 3258 ins  185 wms
>> 186 vms   57 vµs    2 rµs    5 cµs   13 pµs    2 aµs   37 sµs    5 dµs
>> 09:28:39.474600 INFO [blockchain] Block [441138] 2367 txs 4197 ins  172 wms
>> 284 vms   68 vµs    1 rµs    5 cµs   17 pµs    2 aµs   45 sµs    5 dµs
>> 09:28:39.798699 INFO [blockchain] Block [441139] 2386 txs 4434 ins  270 wms
>> 302 vms   68 vµs    1 rµs    4 cµs   18 pµs    1 aµs   45 sµs    5 dµs
>> 09:28:40.161076 INFO [blockchain] Block [441140] 2150 txs 4648 ins  293 wms
>> 342 vms   73 vµs    1 rµs    4 cµs   15 pµs    1 aµs   53 sµs    4 dµs
>> 09:28:40.493881 INFO [blockchain] Block [441141] 1768 txs 4754 ins  325 wms
>> 313 vms   66 vµs    2 rµs    4 cµs   19 pµs    1 aµs   42 sµs    4 dµs
>> 09:28:40.688693 INFO [blockchain] Block [441142] 1860 txs 3726 ins  301 wms
>> 178 vms   48 vµs    2 rµs    4 cµs   12 pµs    1 aµs   30 sµs    5 dµs
>> 09:28:40.977133 INFO [blockchain] Block [441143] 2737 txs 4598 ins  161 wms
>> 265 vms   58 vµs    1 rµs    5 cµs   18 pµs    1 aµs   34 sµs    5 dµs
>> 09:28:41.295907 INFO [blockchain] Block [441144] 1530 txs 4592 ins  251 wms
>> 301 vms   66 vµs    1 rµs    4 cµs   16 pµs    1 aµs   45 sµs    4 dµs
>> 09:28:41.539977 INFO [blockchain] Block [441145] 1625 txs 3637 ins  282 wms
>> 228 vms   63 vµs    1 rµs    4 cµs   10 pµs    1 aµs   47 sµs    4 dµs
>> 09:28:41.823650 INFO [blockchain] Block [441146] 2820 txs 4539 ins  210 wms
>> 261 vms   57 vµs    2 rµs    5 cµs   17 pµs    1 aµs   34 sµs    5 dµs
>> 09:28:42.163806 INFO [blockchain] Block [441147] 1395 txs 4515 ins  245 wms
>> 321 vms   71 vµs    1 rµs    3 cµs   20 pµs    2 aµs   46 sµs    4 dµs
>> 09:28:42.476815 INFO [blockchain] Block [441148]  999 txs 5157 ins  312 wms
>> 295 vms   57 vµs    1 rµs    3 cµs   15 pµs    1 aµs   39 sµs    3 dµs
>> 09:28:42.813068 INFO [blockchain] Block [441149] 1026 txs 5413 ins  284 wms
>> 313 vms   58 vµs    1 rµs    2 cµs   18 pµs    1 aµs   37 sµs    4 dµs
>> 09:28:42.813827 INFO [blockchain] Block [441150]    9 txs    8 ins  323 wms
>> 1 vms   67 vµs    4 rµs   17 cµs   10 pµs    9 aµs   30 sµs   15 dµs
>> 09:28:43.101809 INFO [blockchain] Block [441151] 2669 txs 4608 ins    0 wms
>> 253 vms   55 vµs    1 rµs    4 cµs   16 pµs    1 aµs   34 sµs    5 dµs
>> 09:28:43.389835 INFO [blockchain] Block [441152] 2870 txs 4474 ins  238 wms
>> 264 vms   59 vµs    2 rµs    5 cµs   18 pµs    1 aµs   35 sµs    5 dµs
>> 09:28:43.696813 INFO [blockchain] Block [441153] 2451 txs 4484 ins  249 wms
>> 285 vms   64 vµs    1 rµs    5 cµs   16 pµs    1 aµs   41 sµs    5 dµs
>> 09:28:44.005768 INFO [blockchain] Block [441154] 2217 txs 4515 ins  274 wms
>> 288 vms   64 vµs    1 rµs    4 cµs   19 pµs    2 aµs   39 sµs    5 dµs
>> 09:28:44.488287 INFO [blockchain] Block [441155] 1407 txs 4516 ins  279 wms
>> 462 vms  102 vµs    1 rµs    3 cµs   37 pµs    2 aµs   60 sµs    5 dµs
>> 09:28:45.096894 INFO [blockchain] Block [441156] 1291 txs 3971 ins  456 wms
>> 591 vms  149 vµs    1 rµs    4 cµs   34 pµs    1 aµs  109 sµs    4 dµs
>> 09:28:45.373956 INFO [blockchain] Block [441157] 2556 txs 4412 ins  582 wms
>> 255 vms   58 vµs    1 rµs    4 cµs   13 pµs    1 aµs   39 sµs    5 dµs
>> 09:28:45.751849 INFO [blockchain] Block [441158] 2122 txs 4869 ins  245 wms
>> 356 vms   73 vµs    1 rµs    4 cµs   18 pµs    1 aµs   50 sµs    4 dµs
>> 09:28:45.752609 INFO [blockchain] Block [441159]   10 txs    9 ins  359 wms
>> 0 vms   54 vµs    2 rµs   12 cµs    6 pµs    7 aµs   30 sµs   17 dµs
>> 09:28:46.167439 INFO [blockchain] Block [441160] 2260 txs 4798 ins    0 wms
>> 380 vms   79 vµs    1 rµs    3 cµs   24 pµs    1 aµs   51 sµs    5 dµs
>> 09:28:46.534458 INFO [blockchain] Block [441161] 2037 txs 4720 ins  373 wms
>> 347 vms   74 vµs    1 rµs    4 cµs   16 pµs    1 aµs   53 sµs    4 dµs
>> 09:28:46.786271 INFO [blockchain] Block [441162] 1478 txs 4044 ins  328 wms
>> 236 vms   58 vµs    2 rµs    4 cµs   14 pµs    2 aµs   39 sµs    4 dµs
>> 09:28:47.062390 INFO [blockchain] Block [441163] 2620 txs 4455 ins  217 wms
>> 253 vms   57 vµs    2 rµs    5 cµs   13 pµs    1 aµs   37 sµs    5 dµs
>> 09:28:47.063237 INFO [blockchain] Block [441164]   10 txs    9 ins  255 wms
>> 1 vms   69 vµs    3 rµs   15 cµs    7 pµs    7 aµs   40 sµs   14 dµs
>> 09:28:47.381445 INFO [blockchain] Block [441165] 2490 txs 4611 ins    0 wms
>> 285 vms   62 vµs    1 rµs    4 cµs   16 pµs    1 aµs   41 sµs    5 dµs
>> 09:28:47.697020 INFO [blockchain] Block [441166] 2266 txs 4225 ins  271 wms
>> 297 vms   70 vµs    2 rµs    4 cµs   15 pµs    1 aµs   49 sµs    4 dµs
>> 09:28:47.904200 INFO [blockchain] Block [441167] 1689 txs 3652 ins  283 wms
>> 191 vms   52 vµs    2 rµs    4 cµs    9 pµs    1 aµs   38 sµs    4 dµs
>> 09:28:48.215998 INFO [blockchain] Block [441168] 2301 txs 4441 ins  174 wms
>> 293 vms   66 vµs    2 rµs    4 cµs   12 pµs    1 aµs   48 sµs    4 dµs
>> 09:28:48.490337 INFO [blockchain] Block [441169] 2823 txs 4950 ins  273 wms
>> 250 vms   50 vµs    2 rµs    5 cµs   15 pµs    1 aµs   30 sµs    5 dµs
>> 09:28:48.771430 INFO [blockchain] Block [441170] 2728 txs 4938 ins  232 wms
>> 258 vms   52 vµs    2 rµs    4 cµs   16 pµs    1 aµs   30 sµs    5 dµs
>> 09:28:49.252750 INFO [blockchain] Block [441171] 1967 txs 4328 ins  242 wms
>> 464 vms  107 vµs    2 rµs    4 cµs   14 pµs    2 aµs   87 sµs    4 dµs
>> 09:28:49.564182 INFO [blockchain] Block [441172] 2401 txs 4575 ins  451 wms
>> 291 vms   64 vµs    1 rµs    4 cµs   13 pµs    2 aµs   45 sµs    5 dµs
>> 09:28:50.094058 INFO [blockchain] Block [441173] 1482 txs 4119 ins  281 wms
>> 514 vms  125 vµs    1 rµs    4 cµs   10 pµs    2 aµs  108 sµs    4 dµs
>> 09:28:50.446385 INFO [blockchain] Block [441174] 2216 txs 4791 ins  502 wms
>> 331 vms   69 vµs    1 rµs    4 cµs   15 pµs    1 aµs   49 sµs    4 dµs
>> 09:28:50.860666 INFO [blockchain] Block [441175] 1172 txs 5169 ins  322 wms
>> 396 vms   77 vµs    1 rµs    3 cµs   12 pµs    1 aµs   61 sµs    4 dµs
>> 09:28:51.197153 INFO [blockchain] Block [441176] 2022 txs 4642 ins  388 wms
>> 317 vms   68 vµs    1 rµs    4 cµs   13 pµs    2 aµs   50 sµs    4 dµs
>> 09:28:51.512118 INFO [blockchain] Block [441177] 1852 txs 4358 ins  307 wms
>> 296 vms   68 vµs    1 rµs    4 cµs   14 pµs    2 aµs   48 sµs    4 dµs
>> 09:28:51.859025 INFO [blockchain] Block [441178] 2319 txs 5030 ins  285 wms
>> 326 vms   65 vµs    1 rµs    4 cµs   13 pµs    1 aµs   47 sµs    4 dµs
>> 09:28:52.185014 INFO [blockchain] Block [441179] 2612 txs 4344 ins  314 wms
>> 305 vms   70 vµs    1 rµs    5 cµs   14 pµs    2 aµs   49 sµs    5 dµs
>> 09:28:52.475703 INFO [blockchain] Block [441180] 2262 txs 4030 ins  287 wms
>> 272 vms   68 vµs    2 rµs    5 cµs   15 pµs    2 aµs   46 sµs    5 dµs
>> 09:28:52.798759 INFO [blockchain] Block [441181] 2885 txs 5092 ins  253 wms
>> 299 vms   59 vµs    2 rµs    4 cµs   17 pµs    1 aµs   36 sµs    5 dµs
>> 09:28:53.078336 INFO [blockchain] Block [441182] 2436 txs 4915 ins  282 wms
>> 257 vms   52 vµs    2 rµs    4 cµs   14 pµs    1 aµs   32 sµs    5 dµs
>> 09:28:53.398266 INFO [blockchain] Block [441183] 2843 txs 4446 ins  238 wms
>> 298 vms   67 vµs    2 rµs    5 cµs   20 pµs    2 aµs   41 sµs    5 dµs
>> 09:28:53.707133 INFO [blockchain] Block [441184] 2324 txs 4476 ins  278 wms
>> 288 vms   64 vµs    2 rµs    4 cµs   16 pµs    2 aµs   42 sµs    5 dµs
>> 09:28:53.918838 INFO [blockchain] Block [441185] 1512 txs 3339 ins  276 wms
>> 196 vms   59 vµs    1 rµs    4 cµs    9 pµs    1 aµs   44 sµs    5 dµs
>> 09:28:54.237412 INFO [blockchain] Block [441186] 2067 txs 4655 ins  180 wms
>> 299 vms   64 vµs    2 rµs    4 cµs   14 pµs    2 aµs   45 sµs    4 dµs
>> 09:28:54.525741 INFO [blockchain] Block [441187] 1403 txs 5186 ins  282 wms
>> 268 vms   52 vµs    1 rµs    3 cµs   12 pµs    1 aµs   35 sµs    4 dµs
>> 09:28:54.768170 INFO [blockchain] Block [441188]  770 txs 4352 ins  259 wms
>> 227 vms   52 vµs    1 rµs    2 cµs   10 pµs    1 aµs   39 sµs    3 dµs
>> 09:28:55.050891 INFO [blockchain] Block [441189] 2428 txs 4573 ins  220 wms
>> 262 vms   57 vµs    1 rµs    4 cµs   14 pµs    1 aµs   38 sµs    5 dµs
>> 09:28:55.129727 INFO [blockchain] Block [441190]  477 txs 1278 ins  261 wms
>> 73 vms   57 vµs    1 rµs    4 cµs    4 pµs    2 aµs   47 sµs    4 dµs
>> 09:28:55.287538 INFO [blockchain] Block [441191] 1355 txs 2932 ins   66 wms
>> 146 vms   50 vµs    1 rµs    4 cµs    8 pµs    1 aµs   37 sµs    4 dµs
>> 09:28:55.622908 INFO [blockchain] Block [441192] 1139 txs 5365 ins  136 wms
>> 305 vms   57 vµs    1 rµs    3 cµs   12 pµs    1 aµs   41 sµs    6 dµs
>> 09:28:55.717459 INFO [blockchain] Block [441193]  904 txs 1852 ins  314 wms
>> 86 vms   46 vµs    2 rµs    4 cµs    7 pµs    1 aµs   34 sµs    5 dµs
>> 09:28:55.986453 INFO [blockchain] Block [441194]  250 txs 4923 ins   74 wms
>> 255 vms   52 vµs    1 rµs    2 cµs   11 pµs    1 aµs   38 sµs    3 dµs
>> 09:28:55.987299 INFO [blockchain] Block [441195]    7 txs   10 ins  261 wms
>> 1 vms   62 vµs    3 rµs   11 cµs    8 pµs    7 aµs   37 sµs   12 dµs
>> 09:28:56.262784 INFO [blockchain] Block [441196] 2502 txs 4894 ins    0 wms
>> 243 vms   50 vµs    1 rµs    4 cµs   14 pµs    1 aµs   31 sµs    4 dµs
>> 09:28:56.539972 INFO [blockchain] Block [441197] 1963 txs 5490 ins  228 wms
>> 257 vms   47 vµs    1 rµs    3 cµs   13 pµs    1 aµs   29 sµs    4 dµs
>> 09:28:56.846339 INFO [blockchain] Block [441198] 2574 txs 4683 ins  246 wms
>> 281 vms   60 vµs    1 rµs    4 cµs   16 pµs    1 aµs   38 sµs    5 dµs

>>
>> <end>
>>
>>
>> _______________________________________________
>> Libbitcoin mailing list
>> Libbitcoin@???
>> https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/libbitcoin
> _______________________________________________
> Libbitcoin mailing list
> Libbitcoin@???
> https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/libbitcoin
>