Move CostModel and CostTracker to its own crate (#32354)

* Move CostModel and CostTracker to its own crate

* compile new crate and update imports

* update sbf Cargo.lock

* fix AbiExample

* fix cargo sort

* Fix AbiExample
This commit is contained in:
Pankaj Garg 2023-07-06 10:08:18 -07:00 committed by GitHub
parent b060f62004
commit 4674b0099f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 155 additions and 43 deletions

29
Cargo.lock generated
View File

@ -5610,6 +5610,7 @@ dependencies = [
"solana-address-lookup-table-program", "solana-address-lookup-table-program",
"solana-bloom", "solana-bloom",
"solana-client", "solana-client",
"solana-cost-model",
"solana-entry", "solana-entry",
"solana-frozen-abi", "solana-frozen-abi",
"solana-frozen-abi-macro", "solana-frozen-abi-macro",
@ -5650,6 +5651,31 @@ dependencies = [
"trees", "trees",
] ]
[[package]]
name = "solana-cost-model"
version = "1.17.0"
dependencies = [
"lazy_static",
"log",
"rustc_version 0.4.0",
"solana-address-lookup-table-program",
"solana-bpf-loader-program",
"solana-compute-budget-program",
"solana-config-program",
"solana-frozen-abi",
"solana-frozen-abi-macro",
"solana-loader-v4-program",
"solana-logger",
"solana-metrics",
"solana-program-runtime",
"solana-sdk",
"solana-stake-program",
"solana-system-program",
"solana-vote-program",
"static_assertions",
"test-case",
]
[[package]] [[package]]
name = "solana-dos" name = "solana-dos"
version = "1.17.0" version = "1.17.0"
@ -5996,6 +6022,7 @@ dependencies = [
"sha2 0.10.7", "sha2 0.10.7",
"solana-account-decoder", "solana-account-decoder",
"solana-bpf-loader-program", "solana-bpf-loader-program",
"solana-cost-model",
"solana-entry", "solana-entry",
"solana-frozen-abi", "solana-frozen-abi",
"solana-frozen-abi-macro", "solana-frozen-abi-macro",
@ -6051,6 +6078,7 @@ dependencies = [
"solana-clap-utils", "solana-clap-utils",
"solana-cli-output", "solana-cli-output",
"solana-core", "solana-core",
"solana-cost-model",
"solana-entry", "solana-entry",
"solana-geyser-plugin-manager", "solana-geyser-plugin-manager",
"solana-gossip", "solana-gossip",
@ -6688,6 +6716,7 @@ dependencies = [
"solana-bucket-map", "solana-bucket-map",
"solana-compute-budget-program", "solana-compute-budget-program",
"solana-config-program", "solana-config-program",
"solana-cost-model",
"solana-frozen-abi", "solana-frozen-abi",
"solana-frozen-abi-macro", "solana-frozen-abi-macro",
"solana-loader-v4-program", "solana-loader-v4-program",

View File

@ -20,6 +20,7 @@ members = [
"client-test", "client-test",
"connection-cache", "connection-cache",
"core", "core",
"cost-model",
"dos", "dos",
"download-utils", "download-utils",
"entry", "entry",
@ -312,6 +313,7 @@ solana-client = { path = "client", version = "=1.17.0" }
solana-compute-budget-program = { path = "programs/compute-budget", version = "=1.17.0" } solana-compute-budget-program = { path = "programs/compute-budget", version = "=1.17.0" }
solana-config-program = { path = "programs/config", version = "=1.17.0" } solana-config-program = { path = "programs/config", version = "=1.17.0" }
solana-core = { path = "core", version = "=1.17.0" } solana-core = { path = "core", version = "=1.17.0" }
solana-cost-model = { path = "cost-model", version = "=1.17.0" }
solana-download-utils = { path = "download-utils", version = "=1.17.0" } solana-download-utils = { path = "download-utils", version = "=1.17.0" }
solana-entry = { path = "entry", version = "=1.17.0" } solana-entry = { path = "entry", version = "=1.17.0" }
solana-faucet = { path = "faucet", version = "=1.17.0" } solana-faucet = { path = "faucet", version = "=1.17.0" }

View File

@ -38,6 +38,7 @@ serde_derive = { workspace = true }
solana-address-lookup-table-program = { workspace = true } solana-address-lookup-table-program = { workspace = true }
solana-bloom = { workspace = true } solana-bloom = { workspace = true }
solana-client = { workspace = true } solana-client = { workspace = true }
solana-cost-model = { workspace = true }
solana-entry = { workspace = true } solana-entry = { workspace = true }
solana-frozen-abi = { workspace = true } solana-frozen-abi = { workspace = true }
solana-frozen-abi-macro = { workspace = true } solana-frozen-abi-macro = { workspace = true }

View File

@ -736,6 +736,7 @@ mod tests {
}, },
crossbeam_channel::{unbounded, Receiver}, crossbeam_channel::{unbounded, Receiver},
solana_address_lookup_table_program::state::{AddressLookupTable, LookupTableMeta}, solana_address_lookup_table_program::state::{AddressLookupTable, LookupTableMeta},
solana_cost_model::cost_model::CostModel,
solana_entry::entry::{next_entry, next_versioned_entry}, solana_entry::entry::{next_entry, next_versioned_entry},
solana_ledger::{ solana_ledger::{
blockstore::{entries_to_test_shreds, Blockstore}, blockstore::{entries_to_test_shreds, Blockstore},
@ -748,7 +749,7 @@ mod tests {
solana_poh::poh_recorder::{PohRecorder, WorkingBankEntry}, solana_poh::poh_recorder::{PohRecorder, WorkingBankEntry},
solana_program_runtime::timings::ProgramTiming, solana_program_runtime::timings::ProgramTiming,
solana_rpc::transaction_status_service::TransactionStatusService, solana_rpc::transaction_status_service::TransactionStatusService,
solana_runtime::{cost_model::CostModel, prioritization_fee_cache::PrioritizationFeeCache}, solana_runtime::prioritization_fee_cache::PrioritizationFeeCache,
solana_sdk::{ solana_sdk::{
account::AccountSharedData, account::AccountSharedData,
instruction::InstructionError, instruction::InstructionError,

View File

@ -1,11 +1,11 @@
use { use {
super::immutable_deserialized_packet::ImmutableDeserializedPacket, super::immutable_deserialized_packet::ImmutableDeserializedPacket,
solana_perf::packet::Packet, solana_cost_model::{
solana_runtime::{
block_cost_limits, block_cost_limits,
cost_model::CostModel, cost_model::CostModel,
cost_tracker::{CostTracker, CostTrackerError}, cost_tracker::{CostTracker, CostTrackerError},
}, },
solana_perf::packet::Packet,
solana_sdk::{feature_set::FeatureSet, transaction::SanitizedTransaction}, solana_sdk::{feature_set::FeatureSet, transaction::SanitizedTransaction},
std::sync::Arc, std::sync::Arc,
}; };

View File

@ -6,8 +6,9 @@
use { use {
super::{committer::CommitTransactionDetails, BatchedTransactionDetails}, super::{committer::CommitTransactionDetails, BatchedTransactionDetails},
crossbeam_channel::{unbounded, Receiver, Sender}, crossbeam_channel::{unbounded, Receiver, Sender},
solana_cost_model::{cost_model::CostModel, transaction_cost::TransactionCost},
solana_measure::measure::Measure, solana_measure::measure::Measure,
solana_runtime::{bank::Bank, cost_model::CostModel, transaction_cost::TransactionCost}, solana_runtime::bank::Bank,
solana_sdk::{ solana_sdk::{
clock::Slot, clock::Slot,
feature_set::FeatureSet, feature_set::FeatureSet,

42
cost-model/Cargo.toml Normal file
View File

@ -0,0 +1,42 @@
[package]
name = "solana-cost-model"
description = "Solana cost model"
documentation = "https://docs.rs/solana-cost-model"
version = { workspace = true }
authors = { workspace = true }
repository = { workspace = true }
homepage = { workspace = true }
license = { workspace = true }
edition = { workspace = true }
[dependencies]
lazy_static = { workspace = true }
log = { workspace = true }
solana-address-lookup-table-program = { workspace = true }
solana-bpf-loader-program = { workspace = true }
solana-compute-budget-program = { workspace = true }
solana-config-program = { workspace = true }
solana-frozen-abi = { workspace = true }
solana-frozen-abi-macro = { workspace = true }
solana-loader-v4-program = { workspace = true }
solana-metrics = { workspace = true }
solana-program-runtime = { workspace = true }
solana-sdk = { workspace = true }
solana-stake-program = { workspace = true }
solana-system-program = { workspace = true }
solana-vote-program = { workspace = true }
[lib]
crate-type = ["lib"]
name = "solana_cost_model"
[dev-dependencies]
solana-logger = { workspace = true }
static_assertions = { workspace = true }
test-case = { workspace = true }
[package.metadata.docs.rs]
targets = ["x86_64-unknown-linux-gnu"]
[build-dependencies]
rustc_version = { workspace = true }

27
cost-model/build.rs Normal file
View File

@ -0,0 +1,27 @@
extern crate rustc_version;
use rustc_version::{version_meta, Channel};
fn main() {
// Copied and adapted from
// https://github.com/Kimundi/rustc-version-rs/blob/1d692a965f4e48a8cb72e82cda953107c0d22f47/README.md#example
// Licensed under Apache-2.0 + MIT
match version_meta().unwrap().channel {
Channel::Stable => {
println!("cargo:rustc-cfg=RUSTC_WITHOUT_SPECIALIZATION");
}
Channel::Beta => {
println!("cargo:rustc-cfg=RUSTC_WITHOUT_SPECIALIZATION");
}
Channel::Nightly => {
println!("cargo:rustc-cfg=RUSTC_WITH_SPECIALIZATION");
}
Channel::Dev => {
println!("cargo:rustc-cfg=RUSTC_WITH_SPECIALIZATION");
// See https://github.com/solana-labs/solana/issues/11055
// We may be running the custom `rust-bpf-builder` toolchain,
// which currently needs `#![feature(proc_macro_hygiene)]` to
// be applied.
println!("cargo:rustc-cfg=RUSTC_NEEDS_PROC_MACRO_HYGIENE");
}
}
}

View File

@ -207,11 +207,6 @@ impl CostModel {
mod tests { mod tests {
use { use {
super::*, super::*,
crate::{
bank::Bank,
genesis_utils::{create_genesis_config, GenesisConfigInfo},
inline_spl_token,
},
solana_sdk::{ solana_sdk::{
compute_budget::{self, ComputeBudgetInstruction}, compute_budget::{self, ComputeBudgetInstruction},
hash::Hash, hash::Hash,
@ -222,19 +217,11 @@ mod tests {
system_program, system_transaction, system_program, system_transaction,
transaction::Transaction, transaction::Transaction,
}, },
std::sync::Arc,
}; };
fn test_setup() -> (Keypair, Hash) { fn test_setup() -> (Keypair, Hash) {
solana_logger::setup(); solana_logger::setup();
let GenesisConfigInfo { (Keypair::new(), Hash::new_unique())
genesis_config,
mint_keypair,
..
} = create_genesis_config(10);
let bank = Arc::new(Bank::new_no_wallclock_throttle_for_tests(&genesis_config));
let start_hash = bank.last_blockhash();
(mint_keypair, start_hash)
} }
#[test] #[test]
@ -325,7 +312,7 @@ mod tests {
solana_sdk::pubkey::new_rand(), solana_sdk::pubkey::new_rand(),
], ],
start_hash, start_hash,
vec![inline_spl_token::id()], vec![Pubkey::new_unique()],
instructions, instructions,
); );
let token_transaction = SanitizedTransaction::from_transaction_for_tests(tx); let token_transaction = SanitizedTransaction::from_transaction_for_tests(tx);
@ -363,7 +350,7 @@ mod tests {
solana_sdk::pubkey::new_rand(), solana_sdk::pubkey::new_rand(),
], ],
start_hash, start_hash,
vec![inline_spl_token::id(), compute_budget::id()], vec![Pubkey::new_unique(), compute_budget::id()],
instructions, instructions,
); );
let token_transaction = SanitizedTransaction::from_transaction_for_tests(tx); let token_transaction = SanitizedTransaction::from_transaction_for_tests(tx);
@ -413,7 +400,7 @@ mod tests {
solana_sdk::pubkey::new_rand(), solana_sdk::pubkey::new_rand(),
], ],
start_hash, start_hash,
vec![inline_spl_token::id(), compute_budget::id()], vec![Pubkey::new_unique(), compute_budget::id()],
instructions, instructions,
); );
let token_transaction = SanitizedTransaction::from_transaction_for_tests(tx); let token_transaction = SanitizedTransaction::from_transaction_for_tests(tx);

View File

@ -5,6 +5,7 @@
//! //!
use { use {
crate::{block_cost_limits::*, transaction_cost::TransactionCost}, crate::{block_cost_limits::*, transaction_cost::TransactionCost},
solana_metrics::datapoint_info,
solana_sdk::{ solana_sdk::{
clock::Slot, pubkey::Pubkey, saturating_add_assign, transaction::TransactionError, clock::Slot, pubkey::Pubkey, saturating_add_assign, transaction::TransactionError,
}, },
@ -286,10 +287,6 @@ impl CostTracker {
mod tests { mod tests {
use { use {
super::*, super::*,
crate::{
bank::Bank,
genesis_utils::{create_genesis_config, GenesisConfigInfo},
},
solana_sdk::{ solana_sdk::{
hash::Hash, hash::Hash,
signature::{Keypair, Signer}, signature::{Keypair, Signer},
@ -299,7 +296,7 @@ mod tests {
}, },
}, },
solana_vote_program::vote_transaction, solana_vote_program::vote_transaction,
std::{cmp, sync::Arc}, std::cmp,
}; };
impl CostTracker { impl CostTracker {
@ -323,14 +320,7 @@ mod tests {
fn test_setup() -> (Keypair, Hash) { fn test_setup() -> (Keypair, Hash) {
solana_logger::setup(); solana_logger::setup();
let GenesisConfigInfo { (Keypair::new(), Hash::new_unique())
genesis_config,
mint_keypair,
..
} = create_genesis_config(10);
let bank = Arc::new(Bank::new_no_wallclock_throttle_for_tests(&genesis_config));
let start_hash = bank.last_blockhash();
(mint_keypair, start_hash)
} }
fn build_simple_transaction( fn build_simple_transaction(

10
cost-model/src/lib.rs Normal file
View File

@ -0,0 +1,10 @@
#![cfg_attr(RUSTC_WITH_SPECIALIZATION, feature(min_specialization))]
#![allow(clippy::integer_arithmetic)]
pub mod block_cost_limits;
pub mod cost_model;
pub mod cost_tracker;
pub mod transaction_cost;
#[macro_use]
extern crate solana_frozen_abi_macro;

View File

@ -29,6 +29,7 @@ solana-bpf-loader-program = { workspace = true }
solana-clap-utils = { workspace = true } solana-clap-utils = { workspace = true }
solana-cli-output = { workspace = true } solana-cli-output = { workspace = true }
solana-core = { workspace = true } solana-core = { workspace = true }
solana-cost-model = { workspace = true }
solana-entry = { workspace = true } solana-entry = { workspace = true }
solana-geyser-plugin-manager = { workspace = true } solana-geyser-plugin-manager = { workspace = true }
solana-gossip = { workspace = true } solana-gossip = { workspace = true }

View File

@ -30,6 +30,7 @@ use {
system_monitor_service::{SystemMonitorService, SystemMonitorStatsReportConfig}, system_monitor_service::{SystemMonitorService, SystemMonitorStatsReportConfig},
validator::BlockVerificationMethod, validator::BlockVerificationMethod,
}, },
solana_cost_model::{cost_model::CostModel, cost_tracker::CostTracker},
solana_entry::entry::Entry, solana_entry::entry::Entry,
solana_ledger::{ solana_ledger::{
ancestor_iterator::AncestorIterator, ancestor_iterator::AncestorIterator,
@ -50,8 +51,6 @@ use {
accounts_index::ScanConfig, accounts_index::ScanConfig,
bank::{Bank, RewardCalculationEvent, TotalAccountsStats}, bank::{Bank, RewardCalculationEvent, TotalAccountsStats},
bank_forks::BankForks, bank_forks::BankForks,
cost_model::CostModel,
cost_tracker::CostTracker,
hardened_unpack::MAX_GENESIS_ARCHIVE_UNPACKED_SIZE, hardened_unpack::MAX_GENESIS_ARCHIVE_UNPACKED_SIZE,
runtime_config::RuntimeConfig, runtime_config::RuntimeConfig,
snapshot_archive_info::SnapshotArchiveInfoGetter, snapshot_archive_info::SnapshotArchiveInfoGetter,

View File

@ -38,6 +38,7 @@ serde_bytes = { workspace = true }
sha2 = { workspace = true } sha2 = { workspace = true }
solana-account-decoder = { workspace = true } solana-account-decoder = { workspace = true }
solana-bpf-loader-program = { workspace = true } solana-bpf-loader-program = { workspace = true }
solana-cost-model = { workspace = true }
solana-entry = { workspace = true } solana-entry = { workspace = true }
solana-frozen-abi = { workspace = true } solana-frozen-abi = { workspace = true }
solana-frozen-abi-macro = { workspace = true } solana-frozen-abi-macro = { workspace = true }

View File

@ -16,6 +16,7 @@ use {
rand::{seq::SliceRandom, thread_rng}, rand::{seq::SliceRandom, thread_rng},
rayon::{prelude::*, ThreadPool}, rayon::{prelude::*, ThreadPool},
scopeguard::defer, scopeguard::defer,
solana_cost_model::cost_model::CostModel,
solana_entry::entry::{ solana_entry::entry::{
self, create_ticks, Entry, EntrySlice, EntryType, EntryVerificationStatus, VerifyRecyclers, self, create_ticks, Entry, EntrySlice, EntryType, EntryVerificationStatus, VerifyRecyclers,
}, },
@ -32,7 +33,6 @@ use {
bank_forks::BankForks, bank_forks::BankForks,
bank_utils, bank_utils,
commitment::VOTE_THRESHOLD_SIZE, commitment::VOTE_THRESHOLD_SIZE,
cost_model::CostModel,
epoch_accounts_hash::EpochAccountsHash, epoch_accounts_hash::EpochAccountsHash,
prioritization_fee_cache::PrioritizationFeeCache, prioritization_fee_cache::PrioritizationFeeCache,
rent_debits::RentDebits, rent_debits::RentDebits,

View File

@ -4750,6 +4750,7 @@ dependencies = [
"solana-address-lookup-table-program", "solana-address-lookup-table-program",
"solana-bloom", "solana-bloom",
"solana-client", "solana-client",
"solana-cost-model",
"solana-entry", "solana-entry",
"solana-frozen-abi", "solana-frozen-abi",
"solana-frozen-abi-macro", "solana-frozen-abi-macro",
@ -4785,6 +4786,28 @@ dependencies = [
"trees", "trees",
] ]
[[package]]
name = "solana-cost-model"
version = "1.17.0"
dependencies = [
"lazy_static",
"log",
"rustc_version",
"solana-address-lookup-table-program",
"solana-bpf-loader-program",
"solana-compute-budget-program",
"solana-config-program",
"solana-frozen-abi",
"solana-frozen-abi-macro",
"solana-loader-v4-program",
"solana-metrics",
"solana-program-runtime",
"solana-sdk",
"solana-stake-program",
"solana-system-program",
"solana-vote-program",
]
[[package]] [[package]]
name = "solana-download-utils" name = "solana-download-utils"
version = "1.17.0" version = "1.17.0"
@ -5006,6 +5029,7 @@ dependencies = [
"sha2 0.10.7", "sha2 0.10.7",
"solana-account-decoder", "solana-account-decoder",
"solana-bpf-loader-program", "solana-bpf-loader-program",
"solana-cost-model",
"solana-entry", "solana-entry",
"solana-frozen-abi", "solana-frozen-abi",
"solana-frozen-abi-macro", "solana-frozen-abi-macro",
@ -5474,6 +5498,7 @@ dependencies = [
"solana-bucket-map", "solana-bucket-map",
"solana-compute-budget-program", "solana-compute-budget-program",
"solana-config-program", "solana-config-program",
"solana-cost-model",
"solana-frozen-abi", "solana-frozen-abi",
"solana-frozen-abi-macro", "solana-frozen-abi-macro",
"solana-loader-v4-program", "solana-loader-v4-program",

View File

@ -50,6 +50,7 @@ solana-bpf-loader-program = { workspace = true }
solana-bucket-map = { workspace = true } solana-bucket-map = { workspace = true }
solana-compute-budget-program = { workspace = true } solana-compute-budget-program = { workspace = true }
solana-config-program = { workspace = true } solana-config-program = { workspace = true }
solana-cost-model = { workspace = true }
solana-frozen-abi = { workspace = true } solana-frozen-abi = { workspace = true }
solana-frozen-abi-macro = { workspace = true } solana-frozen-abi-macro = { workspace = true }
solana-loader-v4-program = { workspace = true } solana-loader-v4-program = { workspace = true }

View File

@ -57,8 +57,6 @@ use {
bank::metrics::*, bank::metrics::*,
blockhash_queue::BlockhashQueue, blockhash_queue::BlockhashQueue,
builtins::{BuiltinPrototype, BUILTINS}, builtins::{BuiltinPrototype, BUILTINS},
cost_model::CostModel,
cost_tracker::CostTracker,
epoch_accounts_hash::{self, EpochAccountsHash}, epoch_accounts_hash::{self, EpochAccountsHash},
epoch_rewards_hasher::hash_rewards_into_partitions, epoch_rewards_hasher::hash_rewards_into_partitions,
epoch_stakes::{EpochStakes, NodeVoteAccounts}, epoch_stakes::{EpochStakes, NodeVoteAccounts},
@ -98,6 +96,7 @@ use {
ThreadPool, ThreadPoolBuilder, ThreadPool, ThreadPoolBuilder,
}, },
solana_bpf_loader_program::syscalls::create_program_runtime_environment, solana_bpf_loader_program::syscalls::create_program_runtime_environment,
solana_cost_model::{cost_model::CostModel, cost_tracker::CostTracker},
solana_measure::{measure, measure::Measure, measure_us}, solana_measure::{measure, measure::Measure, measure_us},
solana_perf::perf_libs, solana_perf::perf_libs,
solana_program_runtime::{ solana_program_runtime::{

View File

@ -27,7 +27,6 @@ pub mod bank_client;
mod bank_creation_freezing_progress; mod bank_creation_freezing_progress;
pub mod bank_forks; pub mod bank_forks;
pub mod bank_utils; pub mod bank_utils;
pub mod block_cost_limits;
pub mod blockhash_queue; pub mod blockhash_queue;
pub mod bucket_map_holder; pub mod bucket_map_holder;
pub mod bucket_map_holder_stats; pub mod bucket_map_holder_stats;
@ -36,8 +35,6 @@ pub mod cache_hash_data;
pub mod cache_hash_data_stats; pub mod cache_hash_data_stats;
pub mod commitment; pub mod commitment;
pub mod contains; pub mod contains;
pub mod cost_model;
pub mod cost_tracker;
pub mod epoch_accounts_hash; pub mod epoch_accounts_hash;
mod epoch_rewards_hasher; mod epoch_rewards_hasher;
pub mod epoch_stakes; pub mod epoch_stakes;
@ -80,7 +77,6 @@ pub mod status_cache;
mod storable_accounts; mod storable_accounts;
pub mod tiered_storage; pub mod tiered_storage;
pub mod transaction_batch; pub mod transaction_batch;
pub mod transaction_cost;
pub mod transaction_error_metrics; pub mod transaction_error_metrics;
pub mod transaction_priority_details; pub mod transaction_priority_details;
pub mod transaction_results; pub mod transaction_results;