From c9d63204eb71e9415277920b30db952e85f26ce2 Mon Sep 17 00:00:00 2001 From: carllin Date: Thu, 6 Jun 2019 23:53:21 -0700 Subject: [PATCH] Replace unneeded seqcst with relaxed on atomic operations (#4587) --- core/src/rpc_pubsub.rs | 6 +++--- metrics/src/metrics.rs | 6 +++--- runtime/src/bank.rs | 22 ++++++++++++---------- runtime/src/serde_utils.rs | 4 ++-- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/core/src/rpc_pubsub.rs b/core/src/rpc_pubsub.rs index caf686c3e6..4a7b19d77c 100644 --- a/core/src/rpc_pubsub.rs +++ b/core/src/rpc_pubsub.rs @@ -120,7 +120,7 @@ impl RpcSolPubSub for RpcSolPubSubImpl { ) { match param::(&pubkey_str, "pubkey") { Ok(pubkey) => { - let id = self.uid.fetch_add(1, atomic::Ordering::SeqCst); + let id = self.uid.fetch_add(1, atomic::Ordering::Relaxed); let sub_id = SubscriptionId::Number(id as u64); info!("account_subscribe: account={:?} id={:?}", pubkey, sub_id); let sink = subscriber.assign_id(sub_id.clone()).unwrap(); @@ -158,7 +158,7 @@ impl RpcSolPubSub for RpcSolPubSubImpl { ) { match param::(&pubkey_str, "pubkey") { Ok(pubkey) => { - let id = self.uid.fetch_add(1, atomic::Ordering::SeqCst); + let id = self.uid.fetch_add(1, atomic::Ordering::Relaxed); let sub_id = SubscriptionId::Number(id as u64); info!("program_subscribe: account={:?} id={:?}", pubkey, sub_id); let sink = subscriber.assign_id(sub_id.clone()).unwrap(); @@ -197,7 +197,7 @@ impl RpcSolPubSub for RpcSolPubSubImpl { info!("signature_subscribe"); match param::(&signature_str, "signature") { Ok(signature) => { - let id = self.uid.fetch_add(1, atomic::Ordering::SeqCst); + let id = self.uid.fetch_add(1, atomic::Ordering::Relaxed); let sub_id = SubscriptionId::Number(id as u64); info!( "signature_subscribe: signature={:?} id={:?}", diff --git a/metrics/src/metrics.rs b/metrics/src/metrics.rs index 3809d4f7c4..69ba6533b7 100644 --- a/metrics/src/metrics.rs +++ b/metrics/src/metrics.rs @@ -460,7 +460,7 @@ mod test { } fn points_written(&self) -> usize { - return self.points_written.load(Ordering::SeqCst); + return self.points_written.load(Ordering::Relaxed); } } @@ -469,12 +469,12 @@ mod test { assert!(!points.is_empty()); self.points_written - .fetch_add(points.len(), Ordering::SeqCst); + .fetch_add(points.len(), Ordering::Relaxed); info!( "Writing {} points ({} total)", points.len(), - self.points_written.load(Ordering::SeqCst) + self.points_written.load(Ordering::Relaxed) ); } } diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index adce088f58..525a7b04eb 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -294,8 +294,10 @@ impl Bank { bank.stakes = RwLock::new(parent.stakes.read().unwrap().clone()); bank.storage_accounts = RwLock::new(parent.storage_accounts.read().unwrap().clone()); - bank.tick_height - .store(parent.tick_height.load(Ordering::SeqCst), Ordering::SeqCst); + bank.tick_height.store( + parent.tick_height.load(Ordering::Relaxed), + Ordering::Relaxed, + ); bank.ticks_per_slot = parent.ticks_per_slot; bank.epoch_schedule = parent.epoch_schedule; @@ -391,7 +393,7 @@ impl Bank { let mut hash = self.hash.write().unwrap(); if *hash == Hash::default() { - let collector_fees = self.collector_fees.load(Ordering::SeqCst) as u64; + let collector_fees = self.collector_fees.load(Ordering::Relaxed) as u64; if collector_fees != 0 { self.deposit(&self.collector_id, collector_fees); } @@ -588,8 +590,8 @@ impl Bank { // assert!(!self.is_frozen()); let current_tick_height = { - self.tick_height.fetch_add(1, Ordering::SeqCst); - self.tick_height.load(Ordering::SeqCst) as u64 + self.tick_height.fetch_add(1, Ordering::Relaxed); + self.tick_height.load(Ordering::Relaxed) as u64 }; inc_new_counter_debug!("bank-register_tick-registered", 1); @@ -1120,7 +1122,7 @@ impl Bank { // tick_height is using an AtomicUSize because AtomicU64 is not yet a stable API. // Until we can switch to AtomicU64, fail if usize is not the same as u64 assert_eq!(std::usize::MAX, 0xFFFF_FFFF_FFFF_FFFF); - self.tick_height.load(Ordering::SeqCst) as u64 + self.tick_height.load(Ordering::Relaxed) as u64 } /// Return this bank's max_tick_height @@ -1225,12 +1227,12 @@ impl Bank { assert_eq!(self.ticks_per_slot, dbank.ticks_per_slot); assert_eq!(self.parent_hash, dbank.parent_hash); assert_eq!( - self.tick_height.load(Ordering::SeqCst), - dbank.tick_height.load(Ordering::SeqCst) + self.tick_height.load(Ordering::Relaxed), + dbank.tick_height.load(Ordering::Relaxed) ); assert_eq!( - self.is_delta.load(Ordering::SeqCst), - dbank.is_delta.load(Ordering::SeqCst) + self.is_delta.load(Ordering::Relaxed), + dbank.is_delta.load(Ordering::Relaxed) ); let st = self.stakes.read().unwrap(); diff --git a/runtime/src/serde_utils.rs b/runtime/src/serde_utils.rs index f4376d83b1..fdf00fd96d 100644 --- a/runtime/src/serde_utils.rs +++ b/runtime/src/serde_utils.rs @@ -28,7 +28,7 @@ pub fn serialize_atomicusize(x: &AtomicUsize, s: S) -> Result(x: &AtomicBool, s: S) -> Result where S: serde::Serializer, { - s.serialize_bool(x.load(Ordering::SeqCst)) + s.serialize_bool(x.load(Ordering::Relaxed)) }