Skip to content

Latest commit

 

History

History
188 lines (121 loc) · 5.92 KB

scalability.MD

File metadata and controls

188 lines (121 loc) · 5.92 KB

deploy time calculation, time elapsed between "PreCharging" is printed on screen, and the 200 names (result from PUBLIC_READ_ALL_PURSES) is printed.

Command to execute:

rnode deploy --phlo-price 1 --phlo-limit 1000000000 --valid-after-block-number x --private-key x ./rholang/read_all_purses.rho
Results:

Local deploy, around 200 names depth = 1 PUBLIC_READ_ALL_PURSES 200 names (deploy 1) = 20s PUBLIC_READ_ALL_PURSES 200 names (deploy 2) = 20s

Local deploy, around 100 names depth = 2 PUBLIC_READ_ALL_PURSES 100 names (deploy 1) = 45s PUBLIC_READ_ALL_PURSES 100 names (deploy 2) = 45s

Local deploy, around 200 names depth = 2 PUBLIC_READ_ALL_PURSES 200 names (deploy 1) = 84s PUBLIC_READ_ALL_PURSES 200 names (deploy 2) = 86s

{ id: 1, quantity: 130, type: "gold", box: "aa", publicKey:"aaaaaaaaaaaaadd" }

{ id: 1, quantity: 130, type: "gold", box: "aa", publicKey:"aaaaaaaaaaaaadd" }.toByteArray()

[255, 12, 12, 1, 120]

Local deploy, around 400 names depth = 2 PUBLIC_READ_ALL_PURSES 100 names (deploy 1) = 142s

Local deploy, around 594 names depth = 2 PUBLIC_READ_ALL_PURSES 100 names (deploy 1) = 243s

2021-04-19 release 5.0.3 (not fixed) - rnode 0.12.0

Local deploy, 20 names depth = 1 PUBLIC_READ_ALL_PURSES 20 names = 2.22s

Local deploy, 20 names depth = 2 PUBLIC_READ_ALL_PURSES 20 names = 13.9s

Local deploy, 60 names depth = 1 PUBLIC_READ_ALL_PURSES 60 names = 5.24s

Local deploy, 60 names depth = 2 PUBLIC_READ_ALL_PURSES 60 names = 26.63s

Improvement 1: New code in tree_hash_map.rho that does not iterate over keys of map to send value, but rather does allMap.union(map) directly. See around line 204 in tree_hash_map.rho

Local deploy, 20 names depth = 1 PUBLIC_READ_ALL_PURSES 20 names = 1.34s

Local deploy, 20 names depth = 2 PUBLIC_READ_ALL_PURSES 60 names = 9.56s

Local deploy, 60 names depth = 1 PUBLIC_READ_ALL_PURSES 60 names = 2.8s

Local deploy, 60 names depth = 2 PUBLIC_READ_ALL_PURSES 60 names = 12.35s

Imrovement 2: don't use nodeGet channel in TreeHashMapGetterValues (and in TreeHashMapGetter) to avoid one round of serialization / deserialization for each map (144 or 12 times)

Local deploy, 20 names depth = 1 PUBLIC_READ_ALL_PURSES 20 names = 1.4s

Local deploy, 60 names depth = 2 PUBLIC_READ_ALL_PURSES 60 names = 11.949s

Improvement 3: put TreeHashMapGetterValues close to itCh loop to reduce comm events again

Local deploy, 60 names depth = 2 PUBLIC_READ_ALL_PURSES 60 names = 9.0s

Local deploy, 120 names depth = 2 PUBLIC_READ_ALL_PURSES 120 names = 20.0s

Local deploy, 200 names depth = 2 PUBLIC_READ_ALL_PURSES 120 names = 41.5s

2021-04-20 Now doing tests on a blank tree hash map, no rchain-token involved See stress/stress_thm.js

We will create tree hash map with 200 entries, depth 1 or 12 (12 maps or 144 maps), and the value will be 1, 2 or 3 (see stress/stress_thm.js to know what values 1 2 3 are). We will see if the size and nature (Map or String) of the process being stored impacts the "getAllValues" time.

Local deploy, 200 values (1) depth = 2 PUBLIC_READ_ALL_PURSES 200 values = 10.914

Local deploy, 200 values (2) depth = 2 PUBLIC_READ_ALL_PURSES 200 values = 11.363

Local deploy, 200 values (3) depth = 2 PUBLIC_READ_ALL_PURSES 200 values = 40s

Testing with blake2b256 instead of keccak256

Local deploy, 200 values (3) depth = 2 phlo/dust = 5605188 PUBLIC_READ_ALL_PURSES 200 values = 39s

Local deploy, 200 values (3) depth = 2 pĥlo/dust = 5536578 PUBLIC_READ_ALL_PURSES 200 values = 39s

No effect, back to keccak

Local deploy, 200 values (1) depth = 2 phlo/dust = 4676733 PUBLIC_READ_ALL_PURSES 200 values = 11.3s

Local deploy, 200 values (2) depth = 2 phlo/dust = 11322433 PUBLIC_READ_ALL_PURSES 200 values = 11.45s

Local deploy, 200 values (3) depth = 2 phlo/dust = 5530078 PUBLIC_READ_ALL_PURSES 200 values = 39s

With the map (3), time to read is around 4x superior.

Storing as byte array newVal.toByteArray() instead of storing the process whatever kind it is (Map, String etc.)

Local deploy, 200 values (3) as byte array depth = 2 phlo/dust = 5530078 PUBLIC_READ_ALL_PURSES 200 values = 11.3s

Great ! So even value (3) can be recovered as quick as value 1 and 2, it just has to be stored as byte array

2021-04-21 - rnode 0.12.0

Tree hash map can also store process as bytes, the hard work of deserialisation etc. is done in javascript off-chain

Very good results !!!

"getAllValues", sends back the bytes directly, in the following format:

{
    // hash of the key : byte array
    "abbcbcdbbabbd": Buffer<ab4feaf4>,
    "cdbcacebbabbd": Buffer<c3335dae>,
}

Maybe there's a way to even get rid of the Map structure, this would imply that rholang can manipulate byte arrays.

Local deploy, 200 values depth = 2 PUBLIC_READ_ALL_PURSES 200 values = 13s

Local deploy, 450 values depth = 2 PUBLIC_READ_ALL_PURSES 200 values = 16.52s

Local deploy, 1400 values depth = 2 PUBLIC_READ_ALL_PURSES 1400 values = 43.9s

Local deploy, 15 values depth = 2 PUBLIC_READ_ALL_PURSES 15 values = 8.7s

Local deploy, 100 values depth = 2 PUBLIC_READ_ALL_PURSES 100 values = 11.8s time to create purse (time between purse.SWAP logs) = 1,2s

2021-04-22 - rnode 0.12.0

Local deploy, 2900 values depth = 2 PUBLIC_READ_ALL_PURSES 2900 values = 66.7s

Local deploy, 2900 values depth = 2 PUBLIC_READ_ALL_PURSES 2900 values = 63.7s

Local deploy, 150 values depth = 2 PUBLIC_READ_ALL_PURSES 150 values = 11.6s, 12.7s, 11.8s, 11.6s, 11.4s, 11.6s

2021-05-20 6.0.0 - rnode 0.12.0

Local deploy, 3300 values depth = 2 PUBLIC_READ_ALL_PURSES 3300 values = 99.7s, 98.8s

Local deploy, 340 values depth = 2 PUBLIC_READ_ALL_PURSES 340 values = 43s, 14s, 13s

2021-08-06 8.0.0 - rnode 0.12.0

Local deploy, 5000 values depth = 2 read all purses (src.readAllPursesTerm) 5000 values = 49.7s, 49.8s

2021-12-06 15.0.2 - rnode 0.12.4

Local deploy, 100 values depth = 2 read all purses (src.readAllPursesTerm) 100 values = 7s

Local deploy, 340 values depth = 2 read all purses (src.readAllPursesTerm) 340 values = 25s