LearnBitcoin

Bitcoin Dev Archive 2015

Electrum Server Speed Test

7 messages, 23 Jul 2015. Started by Slurms MacKenzie.

Slurms MacKenzie (2), Joseph Gleason ⑈ (2), Matt Whitlock, Thomas Voegtlin, Eric Voskuil

Permalink Original thread on gnusha.org

Slurms MacKenzie permalink original

Similar to the Bitcoin Node Speed Test, this is a quick quantitative look at how the Electrum server software handles under load. The Electrum wallet is extremely popular, and the distributed servers which power it are all hosted by volunteers without budget. The server requires a fully indexed Bitcoin Core daemon running, and produces sizable external index in order to allow SPV clients to quickly retrieve their history.

    3.9G    electrum/utxo
    67M     electrum/undo
    19G     electrum/hist
    1.4G    electrum/addr
    24G     electrum/

Based on my own logs produced by the electrum-server console, it takes this server (Xeon, lots of memory, 7200 RPM RAID) approximately 3.7 minutes per megabyte of block to process into the index. This seems to hold true through the 10 or so blocks I have in my scroll buffer, the contents of blocks seem to be of approximately the same processing load. Continuing this trend with the current inter-block time of 9.8 minutes, an electrum-server instance running on modest-high end dedicated server is able to support up to 2.64 MB block sizes before permanently falling behind the chain.

Joseph Gleason ⑈ in reply to Slurms MacKenzie permalink original

I have concerns about the performance of the Electrum server software as well. It seems to load data one block at a time (which normally makes sense) and I think it is even single threaded on transactions inside the block.

To try to addresses these issues, I made my own implementation of the electrum server. It doesn't support UTXO (yet) but happily interacts with all the clients I've tested. It is heavily multithreaded, uses mongodb as a key value store and bitcoinj for block and transaction parsing.

https://github.com/fireduck64/jelectrum

You can hit a running instance at: b.1209k.com:50002:s or b.1209k.com:50001:t

A synced node uses 347G of mongodb storage.

Here are the recent blocks imported, with number of transactions and import time. http://pastebin.com/cfW3C2L6 These times are based on having mongodb on SSD. The CPU is 8 core Intel(R) Xeon(R) CPU E5430 @ 2.66GHz

I'd be happy to help with anything you need to evaluate it.

On Thu, Jul 23, 2015 at 9:01 AM Slurms MacKenzie via bitcoin-dev < bitcoin-dev@lists•linuxfoundation•org> wrote:

Quoted text (27 lines)
> Similar to the Bitcoin Node Speed Test, this is a quick quantitative look
> at how the Electrum server software handles under load. The Electrum wallet
> is extremely popular, and the distributed servers which power it are all
> hosted by volunteers without budget. The server requires a fully indexed
> Bitcoin Core daemon running, and produces sizable external index in order
> to allow SPV clients to quickly retrieve their history.
>
>     3.9G    electrum/utxo
>     67M     electrum/undo
>     19G     electrum/hist
>     1.4G    electrum/addr
>     24G     electrum/
>
> Based on my own logs produced by the electrum-server console, it takes
> this server (Xeon, lots of memory, 7200 RPM RAID) approximately 3.7 minutes
> per megabyte of block to process into the index. This seems to hold true
> through the 10 or so blocks I have in my scroll buffer, the contents of
> blocks seem to be of approximately the same processing load. Continuing
> this trend with the current inter-block time of 9.8 minutes, an
> electrum-server instance running on modest-high end dedicated server is
> able to support up to 2.64 MB block sizes before permanently falling behind
> the chain.
> _______________________________________________
> bitcoin-dev mailing list
> bitcoin-dev@lists•linuxfoundation•org
> https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev
>
Matt Whitlock in reply to Slurms MacKenzie permalink original

Great data points, but isn't this an argument for improving Electrum Server's database performance, not for holding Bitcoin back?

(Nice alias, by the way. Whimmy wham wham wozzle!)

On Thursday, 23 July 2015, at 5:56 pm, Slurms MacKenzie via bitcoin-dev wrote:

Quoted text (13 lines)
> Similar to the Bitcoin Node Speed Test, this is a quick quantitative look at how the Electrum server software handles under load. The Electrum wallet is extremely popular, and the distributed servers which power it are all hosted by volunteers without budget. The server requires a fully indexed Bitcoin Core daemon running, and produces sizable external index in order to allow SPV clients to quickly retrieve their history.
>
>     3.9G    electrum/utxo
>     67M     electrum/undo
>     19G     electrum/hist
>     1.4G    electrum/addr
>     24G     electrum/
>
> Based on my own logs produced by the electrum-server console, it takes this server (Xeon, lots of memory, 7200 RPM RAID) approximately 3.7 minutes per megabyte of block to process into the index. This seems to hold true through the 10 or so blocks I have in my scroll buffer, the contents of blocks seem to be of approximately the same processing load. Continuing this trend with the current inter-block time of 9.8 minutes, an electrum-server instance running on modest-high end dedicated server is able to support up to 2.64 MB block sizes before permanently falling behind the chain.
> _______________________________________________
> bitcoin-dev mailing list
> bitcoin-dev@lists•linuxfoundation•org
> https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev
Joseph Gleason ⑈ in reply to Matt Whitlock permalink original

I think our friendly original party worm is just trying to evaluate where we are currently so arguments can be based on data.

I would tend to agree that there are performance improvements to be made and would rather do that work than limit the block size.

On Thu, Jul 23, 2015 at 10:28 AM Matt Whitlock via bitcoin-dev < bitcoin-dev@lists•linuxfoundation•org> wrote:

Quoted text (39 lines)
> Great data points, but isn't this an argument for improving Electrum
> Server's database performance, not for holding Bitcoin back?
>
> (Nice alias, by the way. Whimmy wham wham wozzle!)
>
>
> On Thursday, 23 July 2015, at 5:56 pm, Slurms MacKenzie via bitcoin-dev
> wrote:
> > Similar to the Bitcoin Node Speed Test, this is a quick quantitative
> look at how the Electrum server software handles under load. The Electrum
> wallet is extremely popular, and the distributed servers which power it are
> all hosted by volunteers without budget. The server requires a fully
> indexed Bitcoin Core daemon running, and produces sizable external index in
> order to allow SPV clients to quickly retrieve their history.
> >
> >     3.9G    electrum/utxo
> >     67M     electrum/undo
> >     19G     electrum/hist
> >     1.4G    electrum/addr
> >     24G     electrum/
> >
> > Based on my own logs produced by the electrum-server console, it takes
> this server (Xeon, lots of memory, 7200 RPM RAID) approximately 3.7 minutes
> per megabyte of block to process into the index. This seems to hold true
> through the 10 or so blocks I have in my scroll buffer, the contents of
> blocks seem to be of approximately the same processing load. Continuing
> this trend with the current inter-block time of 9.8 minutes, an
> electrum-server instance running on modest-high end dedicated server is
> able to support up to 2.64 MB block sizes before permanently falling behind
> the chain.
> > _______________________________________________
> > bitcoin-dev mailing list
> > bitcoin-dev@lists•linuxfoundation•org
> > https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev
> _______________________________________________
> bitcoin-dev mailing list
> bitcoin-dev@lists•linuxfoundation•org
> https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev
>
Thomas Voegtlin in reply to Slurms MacKenzie permalink original

There is some room for optimization in the Electrum server: - the utxo database (patricia tree) should be made a binary tree. - the server is written in python, which is slow.

I am not too worried about the short-term; a block takes on average 15s to process on my server. For example, here are the last blocks in my log:

[23/07/2015-17:11:57] catch_up: block 366604 (0.145s 27.278s) [23/07/2015-17:37:55] catch_up: block 366605 (0.126s 24.453s) [23/07/2015-17:50:23] catch_up: block 366606 (0.133s 21.666s) [23/07/2015-18:03:22] catch_up: block 366607 (0.110s 31.680s) [23/07/2015-18:11:14] catch_up: block 366608 (0.093s 18.269s) [23/07/2015-18:26:38] catch_up: block 366609 (0.115s 27.925s) [23/07/2015-18:29:07] catch_up: block 366610 (0.062s 8.163s) [23/07/2015-18:44:18] catch_up: block 366611 (0.118s 21.294s) [23/07/2015-18:52:14] catch_up: block 366612 (0.075s 12.535s) [23/07/2015-18:58:54] catch_up: block 366613 (0.100s 17.857s) [23/07/2015-19:04:18] catch_up: block 366614 (0.061s 11.174s) [23/07/2015-19:10:31] catch_up: block 366615 (0.064s 10.151s) [23/07/2015-19:11:04] catch_up: block 366616 (0.035s 2.962s) [23/07/2015-19:19:53] catch_up: block 366617 (0.081s 13.125s) [23/07/2015-19:25:23] catch_up: block 366618 (0.037s 8.377s) [23/07/2015-19:28:08] catch_up: block 366619 (0.044s 3.984s) [23/07/2015-19:30:36] catch_up: block 366620 (0.051s 6.105s) [23/07/2015-19:40:05] catch_up: block 366621 (0.058s 14.632s) [23/07/2015-19:42:10] catch_up: block 366622 (0.040s 4.143s)

That server is a Hetzner EX40 box, rented for 50 eur/month. Of course if you run the electrum server on a cheap VPS, performance might not be as good.

Le 23/07/2015 17:56, Slurms MacKenzie via bitcoin-dev a écrit :

Quoted text (14 lines)
> Similar to the Bitcoin Node Speed Test, this is a quick quantitative look at how the Electrum server software handles under load. The Electrum wallet is extremely popular, and the distributed servers which power it are all hosted by volunteers without budget. The server requires a fully indexed Bitcoin Core daemon running, and produces sizable external index in order to allow SPV clients to quickly retrieve their history.
>
>     3.9G    electrum/utxo
>     67M     electrum/undo
>     19G     electrum/hist
>     1.4G    electrum/addr
>     24G     electrum/
>
> Based on my own logs produced by the electrum-server console, it takes this server (Xeon, lots of memory, 7200 RPM RAID) approximately 3.7 minutes per megabyte of block to process into the index. This seems to hold true through the 10 or so blocks I have in my scroll buffer, the contents of blocks seem to be of approximately the same processing load. Continuing this trend with the current inter-block time of 9.8 minutes, an electrum-server instance running on modest-high end dedicated server is able to support up to 2.64 MB block sizes before permanently falling behind the chain.
> _______________________________________________
> bitcoin-dev mailing list
> bitcoin-dev@lists•linuxfoundation•org
> https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev
>
Eric Voskuil in reply to Slurms MacKenzie permalink original

Does "to process into the index" include time for transport and/or block validation (presumably by bitcoind) or this this exclusively the time for Electrum Server to index a validated block?

e

On 07/23/2015 08:56 AM, Slurms MacKenzie via bitcoin-dev wrote:

Quoted text (2 lines)
> Similar to the Bitcoin Node Speed Test, this is a quick
> quantitative

look at how the Electrum server software handles under load. The Electrum wallet is extremely popular, and the distributed servers which power it are all hosted by volunteers without budget. The server requires a fully indexed Bitcoin Core daemon running, and produces sizable external index in order to allow SPV clients to quickly retrieve their history.

Quoted text (7 lines)
>
>
> 3.9G    electrum/utxo 67M     electrum/undo 19G     electrum/hist
> 1.4G    electrum/addr 24G     electrum/
>
>
> Based on my own logs produced by the electrum-server console, it

takes this server (Xeon, lots of memory, 7200 RPM RAID) approximately 3.7 minutes per megabyte of block to process into the index. This seems to hold true through the 10 or so blocks I have in my scroll buffer, the contents of blocks seem to be of approximately the same processing load. Continuing this trend with the current inter-block time of 9.8 minutes, an electrum-server instance running on modest-high end dedicated server is able to support up to 2.64 MB block sizes before permanently falling behind the chain.

Slurms MacKenzie in reply to Eric Voskuil permalink original

That's purely the time on the wall for electrum-server, validation in bitcoind happens before. As ThomasV has pointed out it is significantly faster with a solid state disk (but much more expensive to operate), if we get to that point it'll only be expensive servers with lots of SSD space which are able to keep up with the current software.

I was mostly trying to make a point about other software being impacted in ways which aren't really discussed, rather than a specific dig about electrum-server. I should have made that more clear.

Quoted text (14 lines)
> Sent: Thursday, July 23, 2015 at 9:21 PM
> From: "Eric Voskuil" <eric@voskuil•org>
> To: "Slurms MacKenzie" <slurms@gmx•us>, bitcoin-dev@lists•linuxfoundation•org
> Subject: Re: [bitcoin-dev] Electrum Server Speed Test
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Does "to process into the index" include time for transport and/or
> block validation (presumably by bitcoind) or this this exclusively the
> time for Electrum Server to index a validated block?
>
> e
>