-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Test Versi Scaling Limit #5962
Comments
How will you test this? With zombienet? Are you just testing the network size or also performance (transactions per second)? |
On Versi - our test net. The most important performance metric we will be monitoring is block rate of parachains. Especially for the second part, we might also look into transactions per second. |
I think we can easily deploy polkadot-introspector for block time monitoring in the CI test, but it would only work with cumulus collators as it requires us to connect to collators via RPC and get inherent TS (which doesn't work for cumulus). However adding Prometheus mode for parachain commander would solve that as we would compute the para block times from the relaychain data. |
this is also overlapping with paritytech/polkadot-sdk#874 |
@tdimitrov could you have a look into this one as well, as soon as Versi is operational again please? |
How does this relate to https://github.com/paritytech/polkadot-stps/ ? |
In the context of this issue we want to identify the performance bottlenecks so we have a high level idea of where to dig further and iterate on optimizing the node performance wrt parachain consensus. |
Thanks for the pointer to |
Nice, thank you Tsveto! So this looks like we are already pushing limits here. I would be very interested how this behaves with extending this to more validators. I have seen in the past that approval-distribution does not seem to like an increased validator set, would be good to confirm or disprove this. So in particular: Increase the validator set even further, let's say 100 more nodes - see how ToFs and channel sizes behave. |
I find the apparent bimodal distribution of Approval-Distribution ToFs quite curious; that is, the gap between messages that arrive instantly and those which are delayed. It makes me wonder if it's blocking somewhere it shouldn't be, for instance on approval-voting DB writes. The heatmap is also clearly on an exponential scale, so the orange/red message volumes are much higher than the blue/green. It still looks as though a majority of messages are handled almost instantaneously. With the exponential scale in mind, it doesn't seem like approval-voting or bitfield-distribution is bottlenecking at all. While there are a few outliers that take a long time, for the most part all messages are processed instantaneously. paritytech/polkadot-sdk#841 was a hypothesis in the past, but @sandreim investigated back then and didn't see convincing evidence that it was a cause. If it is true that approval-distribution is not waiting on the approval-voting subsystem, then it may just be waiting on the network-bridge. Network-bridge ToFs would be interesting to look at as well. Reputation handling clogging up the queue is a potential concern. |
Looks like https://grafana.parity-mgmt.parity.io/goto/73iMs9N4z?orgId=1 |
questions on my mind:
|
Where does approval-voting actually block on approval-distribution. I only see it sending messages via unbounded to approval distribution. |
We identified a bottleneck. I would expect fixing that to bump up performance at least threefold. |
Things look similar across machines.
The issue we suspect is causing most pain is the importing of assignments and approvals which are serialized and both wait for approval voting subsystem checks before doing book keeping. I'm working on some changes to wait for the approval voting checks in parallel but still serialising work per peer so to not break deduplication. We would expect approval voting to have more work to do in this scenario and for it no not block when sending messages to
Currently we are blocked by a deployment/networking issue. We can't even get to 200 validators because of low connectivity (authority discovery failures). |
polkadot/node/core/approval-voting/src/lib.rs Line 1008 in 0bc8fdd
|
Darn 🥇 ... yep, I did not see that one 🙈 |
It's worth noting that the
Ok, I hope it is indeed the bottleneck. My understanding was that we only send assignments or approvals over to approval-voting the first time we receive them, so only a minority of incoming messages actually trigger that code path. It would explain the bimodal distribution of ToFs we see, but my expectation was that anything waiting on approval-voting would be bottlenecked on the DB write, and we disproved that in the past, didn't we? Otherwise, the only work that approval-voting does is verify a signature (not insignificant, but would be a surprising bottleneck at these message volumes), update some in-memory state, and do some DB reads (which should be cached by RocksDB, no?) |
Yes, we disproved the DB as being the bottleneck in the past. |
We concluded last round of testing at 350 paravalidators and 60 parachains with PR #6530. Board https://github.com/orgs/paritytech/projects/63 for tracking. |
To get an idea what could be feasible on Kusama.
Test:
See where block times start to suffer, also check what difference it makes when validator set is scaled up to Kusama size as well. If block times for 250 para validators is still good, but not for 300 - check whether 250 is also good if there are 900 authorities in total.
Depending on the result, other experiments might be worthwhile as well:
300 para validators with only 50 parachains for example: This makes sense to test with non trivial POVs, as a higher number of para validators with same number of parachains reduces load on approval checkers - this will only be noticeable if there actually is any load (candidates perform some computation).
The text was updated successfully, but these errors were encountered: