BUIP065: Gigablock Testnet Initiative

sickpig

Active Member
Aug 28, 2015
926
2,541
@jtoomim

it will be great to have you on board for this project.

quickly answering to some of your questions:

- @Peter R is the central point of contact for this project

- the main venue used to coordinate will be the BU slack, if you are not subscribed already please share your email (even via PM) and I'll send you an invitation

- wrt contabo we are going to use a bare metal server not a shared one, see https://contabo.com/?show=configurator&server_id=359 cause we just wanted to have a way to compare VPS performance with basre metal one and so keep under control what could be labelled as virtualization overhead. That said we are open to adopt other solutions of course.
 

jtoomim

Active Member
Jan 2, 2016
130
253
The Contabo bare metal server looks reasonable in terms of performance.

In order to keep costs manageable, I suggest doing a dry run with only physical servers on a LAN first in order to test the CPU, disk, and RAM systems. This could be expanded to servers on a LAN with artificial latency and packet loss injection.

Rather than spending $1k per month on renting hardware, I think it makes a lot of sense to simply buy the hardware for maybe $2k total, then colocate it somewhere (e.g. here) for 1/10th the monthly cost and maybe sell the hardware at the end of the testing.

Putting the blocks directory on an HDD and the chainstate and database directories on SSD also saves a ton of money.

My email for slack purposes is myusername at myusername dot org. I also have another email that I use for actual people, but I don't want to post it publicly. Spam sucks.

I don't have a ton of free time these days, but I have other resources at my disposal, including a 1.5 MW datacenter and a fair bit of funds.
 

Peter R

Well-Known Member
Aug 28, 2015
1,398
5,595
@Peter R : I might be interested in participating in this.
I am very excited to hear this! Your help would be very valuable. Your work on the "Block Size Olympics" was awesome!

I could add a physical node in Moses Lake, WA, USA. I can put an SSD for the chainstate (240 GB, or larger upon request) plus an HDD for the unpruned blocks (as many TB as it takes). Depending on how long the experiment was to go for, I could either have it share our office's 100 Mbps symmetric fiber line or I could get a new (dedicated) line.
This would be fantastic.

(The initial experiment (Experiment #1) should be completed by the end of 2017 at the latest and hopefully much sooner. But we intend follow up with continued experiments and eventually grow the Gigablock Testnet into a permanent and self-sustaining resource of the Bitcoin community.)

I should warn you, I've had bad experiences in the past with VPSs from Contabo. It appears that they use spinning HDDs for most of their storage, and they overbook their VPSs with respect to storage bandwidth, so IO will almost certainly be the bottleneck. In the past, I've had it take 30 seconds to run a simple command like ls via ssh. Utterly ridiculous.
Like @sickpig mentioned, this is a physical server in a rack in Munich.

We had good results from Linode. Digital Ocean's performance was okay, but not up to Linode's specs. Aliyun was also decent except for the issue with crossing the GFW. That wasn't Aliyun's fault, though.
All good to know. We should continue this discussion on Slack, as we're spinning up servers already...

Your node in Beijing will not keep up very well unless you're using a UDP-based relay method. I'm not sure what the state of the art in BU is these days -- do you have something equivalent to Corallo's FIBRE yet? (UDP with forward error correction and optimistic forwarding of packets before the full block has been transferred.) Xthin might work well enough with 1 MB blocks because it gets the block down to a handful of TCP packets, but once the Xthin message is a couple of megabytes in size you're going to have severe problems unless you are using UDP with FEC.
All very good points.

But keep in mind that the purpose of "Experiment 1" is just to get a sort of "baseline" with all nodes connected in a standard way (i.e., with Xthin). It is totally fine if Experiment #1 shows that the nodes behind the GFC get partitioned at (say) Q = 100 MB. It gives us something to fix for Experiment #2 (or #3 or #4).

The goal after Experiment #1 isn't to say "look we've got to sustained 3000 TPS throughput -- all the problems are solved." The goal is to say:

"We achieved 3,000 TPS sustained throughput at 1 GB blocks. Although this is a significant milestone, we didn't really test for A, B and C, the Chinese nodes became partitioned, two nodes with less than 16 GB RAM crashed, etc, etc. We've identified bottlenecks X, Y and Z to fix for the next test."

UTXO lookup is going to be a big bottleneck. Disk IO performance will probably be as important as network connectivity and more important than CPU.
Absolutely! But for Experiment #1, our UTXO set will not be _that_ large (we can fairly easily control this based on the algorithm our transaction-generating nodes use). Our current plan is to stress test the UTXO set (and disk IO, etc.) in Experiment #2.

Is there a chat group or a central point of contact for this project?
For now, I am the central point of contact. I have set up a channel in BU Slack and I just sent you an invitation.

Looking forward to your participation!
 
Last edited:

satoshis_sockpuppet

Active Member
Feb 22, 2016
776
3,312
Absolutely! But for Experiment #1, our UTXO set will not be _that_ large (we can fairly easily control this based on the algorithm our transaction-generating nodes use). Our current plan is to stress test the UTXO set (and disk IO, etc.) in Experiment #2.
Did you think about using different clients and comparing performance?
 
  • Like
Reactions: adamstgbit

adamstgbit

Well-Known Member
Mar 13, 2016
1,206
2,650
UTXO lookup is going to be a big bottleneck. Disk IO performance will probably be as important as network connectivity and more important than CPU.
sorry for the newbie question, just curious
can't you just load the whole UTXO in RAM?

Did you think about using different clients and comparing performance?
worth a shot, but it would be hard to believe any other client not written in C++ would go any faster.
but i do remember hearing that bitcoinCore would uses some "safe IO" functions, no doubt provided by some fancy lib, is that what the berkeleyDB dependency is used for?
 

jtoomim

Active Member
Jan 2, 2016
130
253
With 1 GB per block, the UTXO set could easily grow to be 1 TB in size. Currently, the in-RAM representation of the UTXO set takes about 2-3x the amount of space of the on-disk representation, so someone would need around 3 TB of RAM to hold a 1 TB UTXO set. That is not generally feasible. But SSDs are usually fast enough for the UTXO set lookups.

The BDB dependency is for the wallet, not the UTXO database, which uses LevelDB
 

adamstgbit

Well-Known Member
Mar 13, 2016
1,206
2,650
I find it a little odd the the utxo set is 2-3X bigger in ram then on disk, but ok.

hmm... there must be a way to create a UTXO set that is 1GB big and holds "most" of the "relevant" UTXO. I mean there's no way you need the full UTXO set to validate every single TX. if you can validate 90% of the TX's with a "pruned-UTXO" stored in RAM, that might help, since you'd only be going to disk 10% of the time.

LevelDB might have a lot of unnecessary overhead? now i think that @satoshis_sockpuppet's suggestion
Did you think about using different clients and comparing performance?
is a damn good idea.
 
  • Like
Reactions: AdrianX