slot-based-collator: Allow multiple blocks per slot (#7569)
**Summary:** This PR enables authoring of multiple blocks in one AURA slot in the slot-based collator and stabilizes the slot-based collator. ## CLI Changes The flag `--experimental-use-slot-based` is now marked as deprecated. I opted to introduce `--authoring slot-based` instead of just removing the `experimental` prefix. By introducing the `authoring` variant, we get some future-proofing in case we want to introduce further options. ## Change Description With elastic-scaling, we are able to author multiple blocks with a single relay-chain parent. In the initial iteration, the interval between two blocks was determined by the `slot_duration` of the parachain. This PR introduces a more flexible model, where we try to author multiple blocks in a single slot if the runtime allows it. The block authoring loop is largely the same. The [`SlotTimer`](https://github.com/paritytech/polkadot-sdk/blob/f1935bd9/cumulus/client/consensus/aura/src/collators/slot_based/slot_timer.rs#L48-L48) now lives in a separate module and is updated with the last seen [core count](https://github.com/paritytech/polkadot-sdk/blob/f1935bd9 /cumulus/client/consensus/aura/src/collators/slot_based/block_builder_task.rs#L231-L231). It will then trigger rounds in the block-building loop based on the core count. This allows some flexibility where elastic-scaling chains can run on a single core in quiet times. Previously, running on 1 core with a 3-core elastic-scaling chain would result in authors getting skipped because the `slot_duration` was too low. ## Parameter Considerations The core logic does not change, so there are a few things to consider: - The `ConsensusHook` implementation still determines how many blocks are allowed per relay-chain block. So if you add arbitrary cores to an async-backing, 6-second parachain, `can_build_upon` in the runtime will deny block-building of additional blocks. - The `MINIMUM_PERIOD` in the runtime needs to be configured to allow enough blocks in the slot. A "classic" configuration of `SLOT_DURATION/2` will lead to slot mismatches when running with 3 cores. - We fetch available cores at least once every relay chain block. So if a parachain runs with a 12-second slot duration and 1 fixed core, we would still author 2 blocks if the parachain runtime allows it. --------- Co-authored-by:cmd[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by:
Michal Kucharczyk <1728078+michalkucharczyk@users.noreply.github.com> Co-authored-by:
Javier Viola <javier@parity.io> Co-authored-by:
Bastian Köcher <git@kchr.de>
Showing
- .github/workflows/build-publish-images.yml 63 additions, 0 deletions.github/workflows/build-publish-images.yml
- .github/workflows/zombienet-reusable-preflight.yml 1 addition, 1 deletion.github/workflows/zombienet-reusable-preflight.yml
- .github/workflows/zombienet_cumulus.yml 54 additions, 0 deletions.github/workflows/zombienet_cumulus.yml
- .github/zombienet-env 1 addition, 1 deletion.github/zombienet-env
- Cargo.lock 36 additions, 0 deletionsCargo.lock
- Cargo.toml 3 additions, 0 deletionsCargo.toml
- cumulus/client/consensus/aura/Cargo.toml 1 addition, 0 deletionscumulus/client/consensus/aura/Cargo.toml
- cumulus/client/consensus/aura/src/collators/slot_based/block_builder_task.rs 28 additions, 77 deletions...ensus/aura/src/collators/slot_based/block_builder_task.rs
- cumulus/client/consensus/aura/src/collators/slot_based/mod.rs 58 additions, 15 deletions...lus/client/consensus/aura/src/collators/slot_based/mod.rs
- cumulus/client/consensus/aura/src/collators/slot_based/slot_timer.rs 269 additions, 0 deletions...ent/consensus/aura/src/collators/slot_based/slot_timer.rs
- cumulus/pallets/aura-ext/Cargo.toml 1 addition, 0 deletionscumulus/pallets/aura-ext/Cargo.toml
- cumulus/pallets/aura-ext/src/consensus_hook.rs 28 additions, 8 deletionscumulus/pallets/aura-ext/src/consensus_hook.rs
- cumulus/pallets/aura-ext/src/test.rs 103 additions, 66 deletionscumulus/pallets/aura-ext/src/test.rs
- cumulus/polkadot-omni-node/lib/src/cli.rs 38 additions, 5 deletionscumulus/polkadot-omni-node/lib/src/cli.rs
- cumulus/polkadot-omni-node/lib/src/command.rs 8 additions, 0 deletionscumulus/polkadot-omni-node/lib/src/command.rs
- cumulus/polkadot-omni-node/lib/src/common/mod.rs 5 additions, 1 deletioncumulus/polkadot-omni-node/lib/src/common/mod.rs
- cumulus/polkadot-omni-node/lib/src/nodes/aura.rs 5 additions, 3 deletionscumulus/polkadot-omni-node/lib/src/nodes/aura.rs
- cumulus/test/runtime/Cargo.toml 5 additions, 0 deletionscumulus/test/runtime/Cargo.toml
- cumulus/test/runtime/build.rs 8 additions, 0 deletionscumulus/test/runtime/build.rs
- cumulus/test/runtime/src/lib.rs 29 additions, 11 deletionscumulus/test/runtime/src/lib.rs
Please register or sign in to comment