:: [Libbitcoin] libbitcoin node update
Top Page
Delete this message
Reply to this message
Author: Eric Voskuil
Date:  
To: libbitcoin
New-Topics: [Libbitcoin] libbitcoin node/server update
Subject: [Libbitcoin] libbitcoin node update
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>