Преглед изворни кода

feature gate metrics usage in program-runtime (#3477)

* feature gate metrics usage in program-runtime

* missing feature activation

* add dummy-for-ci-check feature that includes the metrics feature
Kevin Heavey пре 10 месеци
родитељ
комит
10be2c33d1

+ 1 - 1
core/Cargo.toml

@@ -117,7 +117,7 @@ solana-ledger = { workspace = true, features = ["dev-context-only-utils"] }
 solana-logger = { workspace = true }
 solana-net-utils = { workspace = true, features = ["dev-context-only-utils"] }
 solana-poh = { workspace = true, features = ["dev-context-only-utils"] }
-solana-program-runtime = { workspace = true }
+solana-program-runtime = { workspace = true, features = ["metrics"] }
 solana-sdk = { workspace = true, features = ["dev-context-only-utils"] }
 solana-stake-program = { workspace = true }
 solana-system-program = { workspace = true }

+ 1 - 1
ledger-tool/Cargo.toml

@@ -43,7 +43,7 @@ solana-ledger = { workspace = true, features = ["dev-context-only-utils"] }
 solana-log-collector = { workspace = true }
 solana-logger = { workspace = true }
 solana-measure = { workspace = true }
-solana-program-runtime = { workspace = true }
+solana-program-runtime = { workspace = true, features = ["metrics"] }
 solana-rpc = { workspace = true }
 solana-runtime = { workspace = true, features = ["dev-context-only-utils"] }
 solana-runtime-transaction = { workspace = true }

+ 1 - 1
ledger/Cargo.toml

@@ -56,7 +56,7 @@ solana-frozen-abi-macro = { workspace = true, optional = true, features = [
 solana-measure = { workspace = true }
 solana-metrics = { workspace = true }
 solana-perf = { workspace = true }
-solana-program-runtime = { workspace = true }
+solana-program-runtime = { workspace = true, features = ["metrics"] }
 solana-rayon-threadlimit = { workspace = true }
 solana-runtime = { workspace = true }
 solana-runtime-transaction = { workspace = true }

+ 3 - 1
program-runtime/Cargo.toml

@@ -37,7 +37,7 @@ solana-instruction = { workspace = true }
 solana-last-restart-slot = { workspace = true }
 solana-log-collector = { workspace = true }
 solana-measure = { workspace = true }
-solana-metrics = { workspace = true }
+solana-metrics = { workspace = true, optional = true }
 solana-precompiles = { workspace = true }
 solana-pubkey = { workspace = true }
 solana-rent = { workspace = true }
@@ -69,11 +69,13 @@ name = "solana_program_runtime"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [features]
+dummy-for-ci-check = ["metrics"]
 frozen-abi = [
     "dep:solana-frozen-abi",
     "dep:solana-frozen-abi-macro",
     "solana-compute-budget/frozen-abi",
 ]
+metrics = ["dep:solana-metrics"]
 shuttle-test = [
     "solana-type-overrides/shuttle-test",
     "solana-sbpf/shuttle-test",

+ 1 - 0
program-runtime/src/lib.rs

@@ -2,6 +2,7 @@
 #![deny(clippy::arithmetic_side_effects)]
 #![deny(clippy::indexing_slicing)]
 
+#[cfg(feature = "metrics")]
 #[macro_use]
 extern crate solana_metrics;
 

+ 24 - 8
program-runtime/src/loaded_programs.rs

@@ -3,7 +3,6 @@ use {
     log::{debug, error, log_enabled, trace},
     percentage::PercentageInteger,
     solana_clock::{Epoch, Slot},
-    solana_measure::measure::Measure,
     solana_pubkey::Pubkey,
     solana_sbpf::{
         elf::Executable,
@@ -14,7 +13,6 @@ use {
     solana_sdk_ids::{
         bpf_loader, bpf_loader_deprecated, bpf_loader_upgradeable, loader_v4, native_loader,
     },
-    solana_timings::ExecuteDetailsTimings,
     solana_type_overrides::{
         rand::{thread_rng, Rng},
         sync::{
@@ -29,6 +27,8 @@ use {
         sync::Weak,
     },
 };
+#[cfg(feature = "metrics")]
+use {solana_measure::measure::Measure, solana_timings::ExecuteDetailsTimings};
 
 pub type ProgramRuntimeEnvironment = Arc<BuiltinProgram<InvokeContext<'static>>>;
 pub const MAX_LOADED_ENTRY_COUNT: usize = 512;
@@ -270,6 +270,7 @@ impl ProgramCacheStats {
     }
 }
 
+#[cfg(feature = "metrics")]
 /// Time measurements for loading a single [ProgramCacheEntry].
 #[derive(Debug, Default)]
 pub struct LoadProgramMetrics {
@@ -285,6 +286,7 @@ pub struct LoadProgramMetrics {
     pub jit_compile_us: u64,
 }
 
+#[cfg(feature = "metrics")]
 impl LoadProgramMetrics {
     pub fn submit_datapoint(&self, timings: &mut ExecuteDetailsTimings) {
         timings.create_executor_register_syscalls_us += self.register_syscalls_us;
@@ -319,7 +321,7 @@ impl ProgramCacheEntry {
         effective_slot: Slot,
         elf_bytes: &[u8],
         account_size: usize,
-        metrics: &mut LoadProgramMetrics,
+        #[cfg(feature = "metrics")] metrics: &mut LoadProgramMetrics,
     ) -> Result<Self, Box<dyn std::error::Error>> {
         Self::new_internal(
             loader_key,
@@ -328,6 +330,7 @@ impl ProgramCacheEntry {
             effective_slot,
             elf_bytes,
             account_size,
+            #[cfg(feature = "metrics")]
             metrics,
             false, /* reloading */
         )
@@ -348,7 +351,7 @@ impl ProgramCacheEntry {
         effective_slot: Slot,
         elf_bytes: &[u8],
         account_size: usize,
-        metrics: &mut LoadProgramMetrics,
+        #[cfg(feature = "metrics")] metrics: &mut LoadProgramMetrics,
     ) -> Result<Self, Box<dyn std::error::Error>> {
         Self::new_internal(
             loader_key,
@@ -357,6 +360,7 @@ impl ProgramCacheEntry {
             effective_slot,
             elf_bytes,
             account_size,
+            #[cfg(feature = "metrics")]
             metrics,
             true, /* reloading */
         )
@@ -369,27 +373,39 @@ impl ProgramCacheEntry {
         effective_slot: Slot,
         elf_bytes: &[u8],
         account_size: usize,
-        metrics: &mut LoadProgramMetrics,
+        #[cfg(feature = "metrics")] metrics: &mut LoadProgramMetrics,
         reloading: bool,
     ) -> Result<Self, Box<dyn std::error::Error>> {
+        #[cfg(feature = "metrics")]
         let load_elf_time = Measure::start("load_elf_time");
         // The following unused_mut exception is needed for architectures that do not
         // support JIT compilation.
         #[allow(unused_mut)]
         let mut executable = Executable::load(elf_bytes, program_runtime_environment.clone())?;
-        metrics.load_elf_us = load_elf_time.end_as_us();
+        #[cfg(feature = "metrics")]
+        {
+            metrics.load_elf_us = load_elf_time.end_as_us();
+        }
 
         if !reloading {
+            #[cfg(feature = "metrics")]
             let verify_code_time = Measure::start("verify_code_time");
             executable.verify::<RequisiteVerifier>()?;
-            metrics.verify_code_us = verify_code_time.end_as_us();
+            #[cfg(feature = "metrics")]
+            {
+                metrics.verify_code_us = verify_code_time.end_as_us();
+            }
         }
 
         #[cfg(all(not(target_os = "windows"), target_arch = "x86_64"))]
         {
+            #[cfg(feature = "metrics")]
             let jit_compile_time = Measure::start("jit_compile_time");
             executable.jit_compile()?;
-            metrics.jit_compile_us = jit_compile_time.end_as_us();
+            #[cfg(feature = "metrics")]
+            {
+                metrics.jit_compile_us = jit_compile_time.end_as_us();
+            }
         }
 
         Ok(Self {

+ 1 - 1
programs/bpf_loader/Cargo.toml

@@ -23,7 +23,7 @@ solana-log-collector = { workspace = true }
 solana-measure = { workspace = true }
 solana-poseidon = { workspace = true }
 solana-program-memory = { workspace = true }
-solana-program-runtime = { workspace = true }
+solana-program-runtime = { workspace = true, features = ["metrics"] }
 solana-sbpf = { workspace = true }
 solana-sdk = { workspace = true }
 solana-timings = { workspace = true }

+ 1 - 1
runtime/Cargo.toml

@@ -70,7 +70,7 @@ solana-measure = { workspace = true }
 solana-metrics = { workspace = true }
 solana-perf = { workspace = true }
 solana-program = { workspace = true }
-solana-program-runtime = { workspace = true }
+solana-program-runtime = { workspace = true, features = ["metrics"] }
 solana-pubkey = { workspace = true }
 solana-rayon-threadlimit = { workspace = true }
 solana-runtime-transaction = { workspace = true }

+ 1 - 1
svm/Cargo.toml

@@ -41,7 +41,7 @@ solana-message = { workspace = true }
 solana-nonce = { workspace = true }
 solana-precompiles = { workspace = true }
 solana-program = { workspace = true, default-features = false }
-solana-program-runtime = { workspace = true }
+solana-program-runtime = { workspace = true, features = ["metrics"] }
 solana-pubkey = { workspace = true }
 solana-rent = { workspace = true }
 solana-rent-debits = { workspace = true }