Skip to content

Instantly share code, notes, and snippets.

View zsfelfoldi's full-sized avatar

Felföldi Zsolt zsfelfoldi

View GitHub Profile
I've collected some points to be addressed at the nov.27. LES collaboration kickoff meeting:
- approximately how much time can you contribute to LES-related tasks in the foreseeable future?
- preferred communication channels and methods?
- gitter channel
- github issue tracking
- two standup calls per week
- regularly scheduled discussion calls for individual tasks
- choose a suitable service for voice calls and screen sharing
- questions about individual tasks, who is interested in which one (not necessarily committing to them during the first chat, just discussing)
@zsfelfoldi
zsfelfoldi / ulc.txt
Last active February 19, 2018 10:09
Here are some pointers to implementing the ULC mode. Just take a look at the relevant code, then feel free to ping me whenever you have questions (I guess it will happen a few times, I tried to document the most important parts but some of the code is still a bit messy, which I apologize for in advance).
- adding the ultra light client option:
Add an extra option for light client mode where the user can specify a text/json ULC config file that contains a list of trusted server enodes and N out of M parameters (which may depend on how many servers we are connected to, there may be 5 servers listed but we can still accept 2 out of 3 connected).
Geth parameters are implemented like this:
https://github.com/ethereum/go-ethereum/blob/master/cmd/utils/flags.go#L162
Search for LightModeFlag or LightServFlag to find out how it is wired through the code.
- requesting signed headers
0xa0b325beb7cd53c031bf0ec17532ce1ffa363366
Running benchmark without bloombits
Clearing bloombits data...
Cleared bloombits data
Running filter benchmarks...
Finished running filter benchmarks
1m2.479473502s total 17.342566172s per million blocks
BenchmarkNoBloomBits-4 1 67490450777 ns/op
Running bloombits benchmark section size: 512 compression method: 0
Benchmarking 100000 consecutive header reads from an existing "new style" database (found at DefaultDataDir/_new):
(note that the database being cached into memory either by leveldb or by the OS affects this test dramatically; this test has been carried out after a fresh system restart)
fefe@Fefe-ThinkPad-SL500:~/go-ethereum$ godep go test -v ./core -bench BenchmarkReadChain_new_header_100k -run XXX -cpuprofile new.prof
PASS
BenchmarkReadChain_new_header_100k-2 1 6754975060 ns/op
ok _/home/fefe/go-ethereum/core 7.218s
CPU profile top 100 nodes (both flat and cumulative are listed):
Benchmarking 100000 consecutive header reads from an existing "old style" database (found at DefaultDataDir/_old):
(note that the database being cached into memory either by leveldb or by the OS affects this test dramatically; this test has been carried out after a fresh system restart)
fefe@Fefe-ThinkPad-SL500:~/go-ethereum$ godep go test -v ./core -bench BenchmarkReadChain_old_header_100k -run XXX -cpuprofile old.prof
PASS
BenchmarkReadChain_old_header_100k-2 1 539808334396 ns/op
ok _/home/fefe/go-ethereum/core 540.260s
CPU profile top 100 nodes (both flat and cumulative are listed):
BenchmarkInsertChain_empty_memdb 5000 371519 ns/op 43341 B/op 603 allocs/op
BenchmarkInsertChain_empty_diskdb 3000 732071 ns/op 56835 B/op 683 allocs/op
BenchmarkInsertChain_valueTx_memdb 2000 669609 ns/op 82256 B/op 1284 allocs/op
BenchmarkInsertChain_valueTx_diskdb 2000 1137578 ns/op 98221 B/op 1361 allocs/op
BenchmarkInsertChain_valueTx_100kB_memdb 500 2586936 ns/op 933950 B/op 1280 allocs/op
BenchmarkInsertChain_valueTx_100kB_diskdb 100 11507311 ns/op 1854512 B/op 1385 allocs/op
BenchmarkInsertChain_uncles_memdb 2000 802834 ns/op 81055 B/op 1154 allocs/op
BenchmarkInsertChain_uncles_diskdb 2000 1443088 ns/op 95069 B/op 1231 allocs/op
BenchmarkInsertChain_ring200_memdb 5 286776384 ns/op 29705977 B/op 407193 allocs/op
BenchmarkInsertChain_ring200_diskdb 10 250175954 ns/op 30438291 B/op 412880 allocs/op
How to benchmark my proposed changes for block data db storage:
- export your chain data (preferably to a physical drive different from the one you put the chain db on)
- download my branch:
https://github.com/zsfelfoldi/go-ethereum/tree/chaindb
- set useNewDb in core/database_util.go to false
- compile
- import chain data (specify a new datadir)
- run "geth headerbenchmark" with the same datadir
- set useNewDb in core/database_util.go to true and repeat the last three steps
imported 965000 blocks in 4h18m58s
fetched 10000 headers in 1.8s
fetched 965000 headers in 57s
fefe@Fefe-ThinkPad-SL500:~/go-ethereum$ ./geth --datadir "~/.333" import "/media/fefe/My Book/blockchain"
I0405 16:04:40.803209 ethdb/database.go:82] Alloted 128MB cache and 1024 file handles to /home/fefe/.333/chaindata
I0405 16:04:41.456626 core/headerchain.go:93] WARNING: Wrote default ethereum genesis block
I0405 16:04:41.456945 core/blockchain.go:206] Last header: #0 [d4e56740…] TD=17179869184
I0405 16:04:41.456993 core/blockchain.go:207] Last block: #0 [d4e56740…] TD=17179869184
I0405 16:04:41.457017 core/blockchain.go:208] Fast block: #0 [d4e56740…] TD=17179869184
imported 965000 blocks in 7h7m22s
fetched 10000 headers in 2m14s
fetched 965000 headers in 4m31s
fefe@Fefe-ThinkPad-SL500:~/go-ethereum$ ./geth --datadir "~/.222" import "/media/fefe/My Book/blockchain"
I0405 04:05:20.301262 ethdb/database.go:88] Alloted 128MB cache and 1024 file handles to /home/fefe/.222/chaindata
I0405 04:05:20.934751 core/headerchain.go:93] WARNING: Wrote default ethereum genesis block
I0405 04:05:20.935057 core/blockchain.go:206] Last header: #0 [d4e56740…] TD=17179869184
I0405 04:05:20.935105 core/blockchain.go:207] Last block: #0 [d4e56740…] TD=17179869184
I0405 04:05:20.935129 core/blockchain.go:208] Fast block: #0 [d4e56740…] TD=17179869184