Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove AssignmentProviderConfig and use parameters from HostConfiguration instead #3181

Merged
merged 45 commits into from
Feb 29, 2024
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
261063e
Fix some typos
tdimitrov Jan 31, 2024
a7e27bc
Replace calls to `AssignmentProviderConfig` with reads from `HostConf…
tdimitrov Feb 1, 2024
830bc0f
on_demand_retries -> coretime_max_availability_timeouts; on_demand_tt…
tdimitrov Feb 1, 2024
6140dda
Storage migration
tdimitrov Feb 1, 2024
fc59106
Extract coretime related config params to `struct CoretimeParams`
tdimitrov Feb 2, 2024
e8d179c
Remove `coretime_` prefix from config params
tdimitrov Feb 2, 2024
135e057
Remove `coretime_` prefix from config params - part 2
tdimitrov Feb 2, 2024
8f88634
Remove `coretime_` prefix from config params - part 3
tdimitrov Feb 2, 2024
dd3a56c
Remove `coretime_` prefix from config params - part 4Remove `coretime…
tdimitrov Feb 2, 2024
743abe7
Revert "Remove `coretime_` prefix from config params - part 4Remove `…
tdimitrov Feb 5, 2024
a2ddeab
Revert "Remove `coretime_` prefix from config params - part 3"
tdimitrov Feb 5, 2024
79d637c
Revert "Remove `coretime_` prefix from config params - part 2"
tdimitrov Feb 5, 2024
2b0ba0d
Revert "Remove `coretime_` prefix from config params"
tdimitrov Feb 5, 2024
0c3ebc1
CoretimeParams -> SchedulerParams
tdimitrov Feb 5, 2024
e429582
Fix migration test
tdimitrov Feb 5, 2024
d4e0771
Fix compilation errors
tdimitrov Feb 5, 2024
eac9195
Add `MigrateToV12` to `Unreleased`
tdimitrov Feb 5, 2024
f7a8ceb
Fix outdated comments and spacing
tdimitrov Feb 6, 2024
c8412d8
Move `group_rotation_frequency`, `paras_availability_period` and `max…
tdimitrov Feb 6, 2024
9e31af7
`coretime_max_availability_timeouts` -> `max_availability_timeouts`; …
tdimitrov Feb 6, 2024
95641a3
Check `ttl` and `lookahead` in `check_consistency`
tdimitrov Feb 6, 2024
0c3a7d1
Fix a typo
tdimitrov Feb 7, 2024
ab895e5
Merge branch 'master' into tsv-coretime-config
tdimitrov Feb 7, 2024
e8f3f15
Fix a warning
tdimitrov Feb 7, 2024
174d6f2
Fix doc comments and missing imports
tdimitrov Feb 7, 2024
7f68b9a
Fix warnings again
tdimitrov Feb 7, 2024
0b05200
`set_scheduler_params` dispatchable and benchmark
tdimitrov Feb 8, 2024
687bf01
".git/.scripts/commands/bench/bench.sh" --subcommand=pallet --runtime…
Feb 8, 2024
5af1f42
".git/.scripts/commands/bench/bench.sh" --subcommand=pallet --runtime…
Feb 8, 2024
a4b7be8
Fix zombienet tests
tdimitrov Feb 8, 2024
ed7fad0
Merge branch 'master' into tsv-coretime-config
tdimitrov Feb 12, 2024
3f9ef1f
Fix a dispatchable name: set_on_demand_retries -> set_max_availabilit…
tdimitrov Feb 13, 2024
e967b3a
coretime_cores -> num_cores
tdimitrov Feb 13, 2024
3837482
Spacing
tdimitrov Feb 13, 2024
8bc1e7a
Fix a comment
tdimitrov Feb 13, 2024
3807465
max_retries -> max_timeouts in `on_demand_claims_are_pruned_after_tim…
tdimitrov Feb 13, 2024
22e2656
Update doc comment
tdimitrov Feb 26, 2024
3772185
Remove an assert in tests
tdimitrov Feb 27, 2024
691427a
Update runtime.md from the guide
tdimitrov Feb 27, 2024
517e8ee
Merge branch 'master' into tsv-coretime-config
tdimitrov Feb 27, 2024
e861885
compilation errors
tdimitrov Feb 28, 2024
ce53717
Make lint-markdown happy
tdimitrov Feb 28, 2024
c39b851
Merge branch 'master' into tsv-coretime-config
tdimitrov Feb 28, 2024
66401dd
Fix 0012-elastic-scaling-mvp.toml
tdimitrov Feb 28, 2024
aea241a
Merge branch 'master' into tsv-coretime-config
tdimitrov Feb 28, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions polkadot/primitives/src/vstaging/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ use sp_std::prelude::*;
use parity_scale_codec::{Decode, Encode};
use primitives::RuntimeDebug;
use scale_info::TypeInfo;
use sp_arithmetic::Perbill;

/// Approval voting configuration parameters
#[derive(
Expand Down Expand Up @@ -50,6 +51,52 @@ impl Default for ApprovalVotingParams {
}
}

/// Coretime configuration parameters
#[derive(
RuntimeDebug,
Copy,
Clone,
PartialEq,
Encode,
Decode,
TypeInfo,
serde::Serialize,
serde::Deserialize,
)]
pub struct CoretimeParams<BlockNumber> {
/// How many cores are managed by the coretime chain.
pub cores: u32,
/// The max number of times a claim can time out in availability
pub max_availability_timeouts: u32,
/// The number of blocks a claim stays in the scheduler's claimqueue before getting cleared.
/// This number should go reasonably higher than the number of blocks in the async backing
/// lookahead.
pub ttl: BlockNumber,
tdimitrov marked this conversation as resolved.
Show resolved Hide resolved
/// The maximum queue size of the pay as you go module.
pub on_demand_queue_max_size: u32,
/// The target utilization of the spot price queue in percentages.
pub on_demand_target_queue_utilization: Perbill,
/// How quickly the fee rises in reaction to increased utilization.
/// The lower the number the slower the increase.
pub on_demand_fee_variability: Perbill,
/// The minimum amount needed to claim a slot in the spot pricing queue.
pub on_demand_base_fee: Balance,
}
antonva marked this conversation as resolved.
Show resolved Hide resolved

impl<BlockNumber: Default + From<u32>> Default for CoretimeParams<BlockNumber> {
fn default() -> Self {
Self {
cores: Default::default(),
max_availability_timeouts: Default::default(),
ttl: 5u32.into(),
on_demand_queue_max_size: ON_DEMAND_DEFAULT_QUEUE_MAX_SIZE,
on_demand_target_queue_utilization: Perbill::from_percent(25),
on_demand_fee_variability: Perbill::from_percent(3),
on_demand_base_fee: 10_000_000u128,
}
}
}

use bitvec::vec::BitVec;

/// Bit indices in the `HostConfiguration.node_features` that correspond to different node features.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,12 @@ impl GenesisConfigBuilder {
pub(super) fn build(self) -> MockGenesisConfig {
let mut genesis = default_genesis_config();
let config = &mut genesis.configuration.config;
config.coretime_cores = self.on_demand_cores;
config.on_demand_base_fee = self.on_demand_base_fee;
config.on_demand_fee_variability = self.on_demand_fee_variability;
config.on_demand_queue_max_size = self.on_demand_max_queue_size;
config.on_demand_target_queue_utilization = self.on_demand_target_queue_utilization;
config.coretime_params.cores = self.on_demand_cores;
config.coretime_params.on_demand_base_fee = self.on_demand_base_fee;
config.coretime_params.on_demand_fee_variability = self.on_demand_fee_variability;
config.coretime_params.on_demand_queue_max_size = self.on_demand_max_queue_size;
config.coretime_params.on_demand_target_queue_utilization =
self.on_demand_target_queue_utilization;

let paras = &mut genesis.paras.paras;
for para_id in self.onboarded_on_demand_chains {
Expand Down
16 changes: 4 additions & 12 deletions polkadot/runtime/parachains/src/assigner_coretime/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ mod tests;
use crate::{
assigner_on_demand, configuration,
paras::AssignCoretime,
scheduler::common::{Assignment, AssignmentProvider, AssignmentProviderConfig},
scheduler::common::{Assignment, AssignmentProvider},
ParaId,
};

Expand Down Expand Up @@ -316,14 +316,6 @@ impl<T: Config> AssignmentProvider<BlockNumberFor<T>> for Pallet<T> {
}
}

fn get_provider_config(_core_idx: CoreIndex) -> AssignmentProviderConfig<BlockNumberFor<T>> {
let config = <configuration::Pallet<T>>::config();
AssignmentProviderConfig {
max_availability_timeouts: config.on_demand_retries,
ttl: config.on_demand_ttl,
}
}

#[cfg(any(feature = "runtime-benchmarks", test))]
fn get_mock_assignment(_: CoreIndex, para_id: primitives::Id) -> Assignment {
// Given that we are not tracking anything in `Bulk` assignments, it is safe to always
Expand All @@ -333,7 +325,7 @@ impl<T: Config> AssignmentProvider<BlockNumberFor<T>> for Pallet<T> {

fn session_core_count() -> u32 {
let config = <configuration::Pallet<T>>::config();
config.coretime_cores
config.coretime_params.cores
}
}

Expand Down Expand Up @@ -482,8 +474,8 @@ impl<T: Config> AssignCoretime for Pallet<T> {

// Add a new core and assign the para to it.
let mut config = <configuration::Pallet<T>>::config();
let core = config.coretime_cores;
config.coretime_cores.saturating_inc();
let core = config.coretime_params.cores;
config.coretime_params.cores.saturating_inc();

// `assign_coretime` is only called at genesis or by root, so setting the active
// config here is fine.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,12 @@ impl GenesisConfigBuilder {
pub(super) fn build(self) -> MockGenesisConfig {
let mut genesis = default_genesis_config();
let config = &mut genesis.configuration.config;
config.coretime_cores = self.on_demand_cores;
config.on_demand_base_fee = self.on_demand_base_fee;
config.on_demand_fee_variability = self.on_demand_fee_variability;
config.on_demand_queue_max_size = self.on_demand_max_queue_size;
config.on_demand_target_queue_utilization = self.on_demand_target_queue_utilization;
config.coretime_params.cores = self.on_demand_cores;
config.coretime_params.on_demand_base_fee = self.on_demand_base_fee;
config.coretime_params.on_demand_fee_variability = self.on_demand_fee_variability;
config.coretime_params.on_demand_queue_max_size = self.on_demand_max_queue_size;
config.coretime_params.on_demand_target_queue_utilization =
self.on_demand_target_queue_utilization;

let paras = &mut genesis.paras.paras;
for para_id in self.onboarded_on_demand_chains {
Expand Down
18 changes: 11 additions & 7 deletions polkadot/runtime/parachains/src/assigner_on_demand/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -201,10 +201,10 @@ pub mod pallet {
let old_traffic = SpotTraffic::<T>::get();
match Self::calculate_spot_traffic(
old_traffic,
config.on_demand_queue_max_size,
config.coretime_params.on_demand_queue_max_size,
Self::queue_size(),
config.on_demand_target_queue_utilization,
config.on_demand_fee_variability,
config.coretime_params.on_demand_target_queue_utilization,
config.coretime_params.on_demand_fee_variability,
) {
Ok(new_traffic) => {
// Only update storage on change
Expand Down Expand Up @@ -330,8 +330,9 @@ where
let traffic = SpotTraffic::<T>::get();

// Calculate spot price
let spot_price: BalanceOf<T> =
traffic.saturating_mul_int(config.on_demand_base_fee.saturated_into::<BalanceOf<T>>());
let spot_price: BalanceOf<T> = traffic.saturating_mul_int(
config.coretime_params.on_demand_base_fee.saturated_into::<BalanceOf<T>>(),
);

// Is the current price higher than `max_amount`
ensure!(spot_price.le(&max_amount), Error::<T>::SpotPriceHigherThanMaxAmount);
Expand Down Expand Up @@ -450,7 +451,10 @@ where

OnDemandQueue::<T>::try_mutate(|queue| {
// Abort transaction if queue is too large
ensure!(Self::queue_size() < config.on_demand_queue_max_size, Error::<T>::QueueFull);
ensure!(
Self::queue_size() < config.coretime_params.on_demand_queue_max_size,
Error::<T>::QueueFull
);
match location {
QueuePushDirection::Back => queue.push_back(order),
QueuePushDirection::Front => queue.push_front(order),
Expand All @@ -472,7 +476,7 @@ where
target: LOG_TARGET,
"Failed to fetch the on demand queue size, returning the max size."
);
return config.on_demand_queue_max_size
return config.coretime_params.on_demand_queue_max_size
},
}
}
Expand Down
12 changes: 1 addition & 11 deletions polkadot/runtime/parachains/src/assigner_parachains.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ use primitives::CoreIndex;

use crate::{
configuration, paras,
scheduler::common::{Assignment, AssignmentProvider, AssignmentProviderConfig},
scheduler::common::{Assignment, AssignmentProvider},
};

pub use pallet::*;
Expand Down Expand Up @@ -58,16 +58,6 @@ impl<T: Config> AssignmentProvider<BlockNumberFor<T>> for Pallet<T> {
/// this is a no-op in the case of a bulk assignment slot.
fn push_back_assignment(_: Assignment) {}

fn get_provider_config(_core_idx: CoreIndex) -> AssignmentProviderConfig<BlockNumberFor<T>> {
AssignmentProviderConfig {
// The next assignment already goes to the same [`ParaId`], no timeout tracking needed.
max_availability_timeouts: 0,
// The next assignment already goes to the same [`ParaId`], this can be any number
// that's high enough to clear the time it takes to clear backing/availability.
ttl: 10u32.into(),
}
}

#[cfg(any(feature = "runtime-benchmarks", test))]
fn get_mock_assignment(_: CoreIndex, para_id: primitives::Id) -> Assignment {
Assignment::Bulk(para_id)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,12 @@ impl GenesisConfigBuilder {
pub(super) fn build(self) -> MockGenesisConfig {
let mut genesis = default_genesis_config();
let config = &mut genesis.configuration.config;
config.coretime_cores = self.on_demand_cores;
config.on_demand_base_fee = self.on_demand_base_fee;
config.on_demand_fee_variability = self.on_demand_fee_variability;
config.on_demand_queue_max_size = self.on_demand_max_queue_size;
config.on_demand_target_queue_utilization = self.on_demand_target_queue_utilization;
config.coretime_params.cores = self.on_demand_cores;
config.coretime_params.on_demand_base_fee = self.on_demand_base_fee;
config.coretime_params.on_demand_fee_variability = self.on_demand_fee_variability;
config.coretime_params.on_demand_queue_max_size = self.on_demand_max_queue_size;
config.coretime_params.on_demand_target_queue_utilization =
self.on_demand_target_queue_utilization;

let paras = &mut genesis.paras.paras;
for para_id in self.onboarded_on_demand_chains {
Expand Down
14 changes: 4 additions & 10 deletions polkadot/runtime/parachains/src/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,7 @@ use crate::{
configuration, inclusion, initializer, paras,
paras::ParaKind,
paras_inherent,
scheduler::{
self,
common::{AssignmentProvider, AssignmentProviderConfig},
CoreOccupied, ParasEntry,
},
scheduler::{self, common::AssignmentProvider, CoreOccupied, ParasEntry},
session_info, shared,
};
use bitvec::{order::Lsb0 as BitOrderLsb0, vec::BitVec};
Expand Down Expand Up @@ -683,7 +679,7 @@ impl<T: paras_inherent::Config> BenchBuilder<T> {
// We are currently in Session 0, so these changes will take effect in Session 2.
Self::setup_para_ids(used_cores);
configuration::ActiveConfig::<T>::mutate(|c| {
c.coretime_cores = used_cores;
c.coretime_params.cores = used_cores;
});

let validator_ids = Self::generate_validator_pairs(self.max_validators());
Expand Down Expand Up @@ -714,8 +710,7 @@ impl<T: paras_inherent::Config> BenchBuilder<T> {
let cores = (0..used_cores)
.into_iter()
.map(|i| {
let AssignmentProviderConfig { ttl, .. } =
scheduler::Pallet::<T>::assignment_provider_config(CoreIndex(i));
let ttl = configuration::Pallet::<T>::config().coretime_params.ttl;
// Load an assignment into provider so that one is present to pop
let assignment = <T as scheduler::Config>::AssignmentProvider::get_mock_assignment(
CoreIndex(i),
Expand All @@ -730,8 +725,7 @@ impl<T: paras_inherent::Config> BenchBuilder<T> {
let cores = (0..used_cores)
.into_iter()
.map(|i| {
let AssignmentProviderConfig { ttl, .. } =
scheduler::Pallet::<T>::assignment_provider_config(CoreIndex(i));
let ttl = configuration::Pallet::<T>::config().coretime_params.ttl;
// Load an assignment into provider so that one is present to pop
let assignment =
<T as scheduler::Config>::AssignmentProvider::get_mock_assignment(
Expand Down
Loading
Loading