rooch icon indicating copy to clipboard operation
rooch copied to clipboard

Improve deserialization performance using an object pool

Open steelgeek091 opened this issue 5 months ago • 0 comments

When deserializing Move objects, we found that the current deserialization performance is poor and has room for improvement.

The following potential solutions are available:

  1. Create a global object pool. For large objects that are frequently reused, reuse them and reassign values after each transaction is completed.
  2. For objects that take a long time to deserialize, analyze the specific reasons and resolve them.
simple_deserialize blob size 1 layout Struct(Runtime([Bool]))
Time elapsed: 117ns
simple_deserialize blob size 8 layout U64
Time elapsed: 449ns
simple_deserialize blob size 8 layout U64
Time elapsed: 46ns
simple_deserialize blob size 211 layout Vector(U8)
Time elapsed: 473ns
simple_deserialize blob size 32 layout Address
Time elapsed: 170ns
simple_deserialize blob size 8 layout Struct(Runtime([U64]))
Time elapsed: 179ns
simple_deserialize blob size 16 layout U128
Time elapsed: 85ns
simple_deserialize blob size 40 layout Struct(Runtime([Address, U64]))
Time elapsed: 154ns
simple_deserialize blob size 32 layout Address
Time elapsed: 52ns


simple_deserialize blob size 10390 layout Struct(Runtime([U64, U64, Vector(Struct(Runtime([Struct(Runtime([Vector(U8)])), U64])))]))
Time elapsed: 91.481µs



simple_deserialize blob size 32 layout Address
Time elapsed: 55ns
simple_deserialize blob size 33 layout Struct(Runtime([Struct(Runtime([U256])), Bool]))
Time elapsed: 197ns
simple_deserialize blob size 32 layout Address
Time elapsed: 49ns
simple_deserialize blob size 32 layout Address
Time elapsed: 42ns
simple_deserialize blob size 8 layout U64
Time elapsed: 37ns
simple_deserialize blob size 8 layout U64
Time elapsed: 27ns
simple_deserialize blob size 8 layout U64
Time elapsed: 16ns


simple_deserialize blob size 209 layout Struct(Runtime([Vector(U8), Vector(U8), Vector(U8), Vector(U8), Struct(Runtime([Vector(U8)]))]))
Time elapsed: 484ns


simple_deserialize blob size 20 layout Vector(U8)
Time elapsed: 64ns
simple_deserialize blob size 25 layout Vector(U8)
Time elapsed: 67ns
simple_deserialize blob size 1 layout Vector(U8)
Time elapsed: 35ns



simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 13.448µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 11.454µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 10.07µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.107µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.473µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.159µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.956µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.094µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.406µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.201µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.567µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.004µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.365µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.005µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.73µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 8.925µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.289µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 10.153µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 10.225µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 10.099µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 13.681µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.112µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.432µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.228µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.422µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.005µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.406µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 8.889µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.349µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.009µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.356µs
simple_deserialize blob size 770 layout Vector(Vector(U8))
Time elapsed: 9.003µs



simple_deserialize blob size 1 layout U8
Time elapsed: 36ns
simple_deserialize blob size 32 layout Address
Time elapsed: 51ns
simple_deserialize blob size 1 layout Struct(Runtime([Bool]))
Time elapsed: 85ns
2024-09-22T07:58:05.423766Z  INFO rooch_sequencer::actor::sequencer: sequencer tx: 0xb85c…47a8 order: 14
simple_deserialize blob size 1 layout Struct(Runtime([Bool]))
Time elapsed: 103ns
simple_deserialize blob size 40 layout Struct(Runtime([Address, U64]))
Time elapsed: 128ns
simple_deserialize blob size 45 layout Struct(Runtime([U64, Struct(Runtime([Vector(Struct(Runtime([U64, Address, Struct(Runtime([Vector(U8)]))])))])), Struct(Runtime([Vector(Vector(U8))])), Struct(Runtime([Vector(U8)]))]))
Time elapsed: 415ns
simple_deserialize blob size 32 layout Address
Time elapsed: 69ns
simple_deserialize blob size 1 layout Struct(Runtime([Bool]))
Time elapsed: 119ns
simple_deserialize blob size 1 layout U8
Time elapsed: 62ns
simple_deserialize blob size 1 layout U8
Time elapsed: 19ns
simple_deserialize blob size 32 layout Address
Time elapsed: 67ns
simple_deserialize blob size 67 layout Struct(Runtime([Address, Struct(Runtime([Vector(U8)]))]))
Time elapsed: 348ns
simple_deserialize blob size 467 layout Struct(Runtime([U64, Vector(U8), Vector(U8), U64, Vector(Vector(U8)), U64, U64]))
Time elapsed: 1.135µs
simple_deserialize blob size 32 layout Address
Time elapsed: 88ns
simple_deserialize blob size 32 layout Address
Time elapsed: 43ns
simple_deserialize blob size 32 layout Address
Time elapsed: 64ns
simple_deserialize blob size 32 layout Address
Time elapsed: 45ns
simple_deserialize blob size 8 layout Struct(Runtime([U64]))
Time elapsed: 112ns
simple_deserialize blob size 1 layout U8
Time elapsed: 36ns
simple_deserialize blob size 1 layout U8
Time elapsed: 32ns
simple_deserialize blob size 32 layout Address
Time elapsed: 52ns
simple_deserialize blob size 33 layout Struct(Runtime([Struct(Runtime([U256])), Bool]))
Time elapsed: 233ns
simple_deserialize blob size 1 layout U8
Time elapsed: 44ns
simple_deserialize blob size 1 layout U8
Time elapsed: 19ns
simple_deserialize blob size 32 layout Address
Time elapsed: 63ns
simple_deserialize blob size 33 layout Struct(Runtime([Struct(Runtime([Struct(Runtime([Vector(Address)]))]))]))
Time elapsed: 326ns
simple_deserialize blob size 1 layout U8
Time elapsed: 28ns
simple_deserialize blob size 1 layout U8
Time elapsed: 15ns
simple_deserialize blob size 33 layout Struct(Runtime([Struct(Runtime([U256])), Bool]))
Time elapsed: 166ns
simple_deserialize blob size 32 layout Address
Time elapsed: 59ns
simple_deserialize blob size 1 layout U8
Time elapsed: 30ns
simple_deserialize blob size 1 layout U8
Time elapsed: 15ns
simple_deserialize blob size 32 layout Address
Time elapsed: 53ns
simple_deserialize blob size 93 layout Struct(Runtime([Struct(Runtime([Vector(U8)])), Struct(Runtime([U64]))]))
Time elapsed: 344ns
simple_deserialize blob size 32 layout Address
Time elapsed: 49ns
simple_deserialize blob size 45 layout Struct(Runtime([U64, Struct(Runtime([Vector(Struct(Runtime([U64, Address, Struct(Runtime([Vector(U8)]))])))])), Struct(Runtime([Vector(Vector(U8))])), Struct(Runtime([Vector(U8)]))]))
Time elapsed: 415ns
simple_deserialize blob size 32 layout Address
Time elapsed: 49ns
simple_deserialize blob size 32 layout Address
Time elapsed: 41ns
simple_deserialize blob size 32 layout Address
Time elapsed: 33ns
simple_deserialize blob size 1 layout U8
Time elapsed: 34ns
simple_deserialize blob size 1 layout U8
Time elapsed: 22ns
simple_deserialize blob size 16 layout U128
Time elapsed: 80ns
simple_deserialize blob size 9 layout Struct(Runtime([Bool, U64]))
Time elapsed: 92ns
simple_deserialize blob size 32 layout Address
Time elapsed: 46ns
simple_deserialize blob size 1 layout U8
Time elapsed: 29ns
simple_deserialize blob size 1 layout U8
Time elapsed: 24ns
simple_deserialize blob size 32 layout Address
Time elapsed: 70ns
simple_deserialize blob size 40 layout Struct(Runtime([Address, U64]))
Time elapsed: 118ns
simple_deserialize blob size 32 layout Address
Time elapsed: 45ns
simple_deserialize blob size 137 layout Struct(Runtime([Struct(Runtime([Vector(U8)])), Struct(Runtime([Struct(Runtime([Struct(Runtime([Struct(Runtime([Vector(Address)]))]))]))]))]))
Time elapsed: 536ns
simple_deserialize blob size 32 layout Address
Time elapsed: 49ns
simple_deserialize blob size 32 layout Address
Time elapsed: 35ns
simple_deserialize blob size 1 layout Struct(Runtime([Bool]))
Time elapsed: 91ns
simple_deserialize blob size 32 layout Address
Time elapsed: 36ns
simple_deserialize blob size 1 layout U8
Time elapsed: 30ns
simple_deserialize blob size 1 layout U8
Time elapsed: 24ns

steelgeek091 avatar Sep 24 '24 02:09 steelgeek091