mirror of
https://github.com/arnaucube/arbo.git
synced 2026-01-15 01:41:28 +01:00
Add dbgStats metrics
Add dbgStats metrics to analyze number of Hashes, db Gets, and db Puts. Current benchmarks: ``` CASE A, AddBatch was 8.841700 times faster than without AddBatch nCPU: 4, nLeafs: 1024, hash: Poseidon, db: memory dbgStats(hash: 2.044k, dbGet: 1, dbPut: 2.049k) CASE B, AddBatch was 7.678766 times faster than without AddBatch nCPU: 4, nLeafs: 1024, hash: Poseidon, db: memory dbgStats(hash: 2.044k, dbGet: 199, dbPut: 2.049k) CASE C, AddBatch was 8.401087 times faster than without AddBatch nCPU: 4, nLeafs: 1024, hash: Poseidon, db: memory dbgStats(hash: 2.044k, dbGet: 207, dbPut: 2.049k) CASE D, AddBatch was 2.466346 times faster than without AddBatch nCPU: 4, nLeafs: 4096, hash: Poseidon, db: memory dbgStats(hash: 33.884k, dbGet: 30.697k, dbPut: 33.889k) CASE E, AddBatch was 1.958160 times faster than without AddBatch nCPU: 4, nLeafs: 4096, hash: Poseidon, db: memory dbgStats(hash: 41.419k, dbGet: 37.558k, dbPut: 41.874k) TestAddBatchBench: nCPU: 4, nLeafs: 50000, hash: Blake2b, db: leveldb Add loop: 10.089858449s dbgStats(hash: 825.285k, dbGet: 788.869k, dbPut: 925.285k) AddBatch: 904.647829ms dbgStats(hash: 122.458k, dbGet: 1, dbPut: 122.463k) TestDbgStats add in loop dbgStats(hash: 141.915k, dbGet: 134.602k, dbPut: 161.915k) addbatch caseA dbgStats(hash: 24.528k, dbGet: 1, dbPut: 24.533k) addbatch caseD dbgStats(hash: 115.506k, dbGet: 97.482k, dbPut: 115.516k) ```
This commit is contained in:
15
vt.go
15
vt.go
@@ -24,11 +24,13 @@ type params struct {
|
||||
maxLevels int
|
||||
hashFunction HashFunction
|
||||
emptyHash []byte
|
||||
dbg *dbgStats
|
||||
}
|
||||
|
||||
// vt stands for virtual tree. It's a tree that does not have any computed hash
|
||||
// while placing the leafs. Once all the leafs are placed, it computes all the
|
||||
// hashes. In this way, each node hash is only computed one time.
|
||||
// hashes. In this way, each node hash is only computed one time (at the end)
|
||||
// and the tree is computed in memory.
|
||||
type vt struct {
|
||||
root *node
|
||||
params *params
|
||||
@@ -45,6 +47,15 @@ func newVT(maxLevels int, hash HashFunction) vt {
|
||||
}
|
||||
}
|
||||
|
||||
// WIP
|
||||
// func (t *vt) addBatch(fromLvl int, k, v []byte) error {
|
||||
// // parallelize adding leafs in the virtual tree
|
||||
// nCPU := flp2(runtime.NumCPU())
|
||||
// l := int(math.Log2(float64(nCPU)))
|
||||
//
|
||||
// return nil
|
||||
// }
|
||||
|
||||
func (t *vt) add(fromLvl int, k, v []byte) error {
|
||||
leaf := newLeafNode(t.params, k, v)
|
||||
if t.root == nil {
|
||||
@@ -205,6 +216,7 @@ func (n *node) computeHashes(p *params, pairs [][2][]byte) ([][2][]byte, error)
|
||||
t := n.typ()
|
||||
switch t {
|
||||
case vtLeaf:
|
||||
p.dbg.incHash()
|
||||
leafKey, leafValue, err := newLeafValue(p.hashFunction, n.k, n.v)
|
||||
if err != nil {
|
||||
return pairs, err
|
||||
@@ -235,6 +247,7 @@ func (n *node) computeHashes(p *params, pairs [][2][]byte) ([][2][]byte, error)
|
||||
}
|
||||
// once the sub nodes are computed, can compute the current node
|
||||
// hash
|
||||
p.dbg.incHash()
|
||||
k, v, err := newIntermediate(p.hashFunction, n.l.h, n.r.h)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
Reference in New Issue
Block a user