Description
Running Strorage Benchmark on 3 different networks with significant state size/content results in incoherent results.
We have beeen using Moonbeam v0.32.1 which is based on substrate 0.9.40.
The network Alphanet
and Moonriver
have similar state/usage overall, but Moonbeam had a project that generate a huge amount of storage (all of the same size, 42 bytes IIRC).
As you can see, the Moonbeam read
and write
using paritydb are way off the expected result that we see in alphanet
and moonriver
.
Configuration of the disk is AWS gp3 | 1000 GiB | 3000 IOPS
and each network/db has its own disk (total of 6 disks).
The blocks and state are pruned to avoid having a huge disk space.
Running the storage benchmark (on c6i.4xlarge AWS):
/home/ubuntu/projects/moonbeam/target/release/moonbeam
benchmark
storage
--db=${DB}
--state-version=0
--mul=1.1
--weight-path /home/ubuntu/projects/moonbeam/weights-${DB}-${NETWORK}.rs
--chain ${NETWORK}
--base-path /var/lib/${DB}-${NETWORK}-data
for each chain
Alphanet (~20M keys):
pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight {
read: 65_167 * constants::WEIGHT_REF_TIME_PER_NANOS,
write: 114_721 * constants::WEIGHT_REF_TIME_PER_NANOS,
};
pub const ParityDbWeight: RuntimeDbWeight = RuntimeDbWeight {
read: 16_290 * constants::WEIGHT_REF_TIME_PER_NANOS,
write: 65_374 * constants::WEIGHT_REF_TIME_PER_NANOS,
};
Moonriver (~30M keys state):
pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight {
read: 66_865 * constants::WEIGHT_REF_TIME_PER_NANOS,
write: 114_947 * constants::WEIGHT_REF_TIME_PER_NANOS,
};
pub const ParityDbWeight: RuntimeDbWeight = RuntimeDbWeight {
read: 14_483 * constants::WEIGHT_REF_TIME_PER_NANOS,
write: 64_545 * constants::WEIGHT_REF_TIME_PER_NANOS,
};
Moonbeam (~110M keys state):
pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight {
read: 33_439 * constants::WEIGHT_REF_TIME_PER_NANOS,
write: 86_828 * constants::WEIGHT_REF_TIME_PER_NANOS,
};
pub const ParityDbWeight: RuntimeDbWeight = RuntimeDbWeight {
read: 177_320 * constants::WEIGHT_REF_TIME_PER_NANOS,
write: 69_450 * constants::WEIGHT_REF_TIME_PER_NANOS,
};
Additionally to the paritydb numbers, we can also see that RocksDB average read is 50% on Moonbeam (110M keys) than Moonriver (30M keys), which might be related to the size of the data on Moonbeam being on average smaller than on Moonriver.
Details about the Benchmark output can be found there:
https://gist.github.com/crystalin/8e790a554b246e077c83ad04c04f330c