Skip to content

Commit 89e9e11

Browse files
pfreixesdjc
authored andcommitted
Use Relaxed ordering mode
The Relaxed ordering mode is much more efficient than SeqCst and its good enough for the use case of either loading statistics or updating the current statistic with a delta.
1 parent 69382d6 commit 89e9e11

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

bb8/src/internals.rs

+16-16
Original file line numberDiff line numberDiff line change
@@ -282,15 +282,15 @@ pub(crate) struct AtomicStatistics {
282282
impl AtomicStatistics {
283283
pub(crate) fn record_get(&self, kind: StatsGetKind, wait_time_start: Option<Instant>) {
284284
match kind {
285-
StatsGetKind::Direct => self.get_direct.fetch_add(1, Ordering::SeqCst),
286-
StatsGetKind::Waited => self.get_waited.fetch_add(1, Ordering::SeqCst),
287-
StatsGetKind::TimedOut => self.get_timed_out.fetch_add(1, Ordering::SeqCst),
285+
StatsGetKind::Direct => self.get_direct.fetch_add(1, Ordering::Relaxed),
286+
StatsGetKind::Waited => self.get_waited.fetch_add(1, Ordering::Relaxed),
287+
StatsGetKind::TimedOut => self.get_timed_out.fetch_add(1, Ordering::Relaxed),
288288
};
289289

290290
if let Some(wait_time_start) = wait_time_start {
291291
let wait_time = Instant::now() - wait_time_start;
292292
self.get_wait_time_micros
293-
.fetch_add(wait_time.as_micros() as u64, Ordering::SeqCst);
293+
.fetch_add(wait_time.as_micros() as u64, Ordering::Relaxed);
294294
}
295295
}
296296

@@ -300,7 +300,7 @@ impl AtomicStatistics {
300300
StatsKind::ClosedBroken => &self.connections_closed_broken,
301301
StatsKind::ClosedInvalid => &self.connections_closed_invalid,
302302
}
303-
.fetch_add(1, Ordering::SeqCst);
303+
.fetch_add(1, Ordering::Relaxed);
304304
}
305305

306306
pub(crate) fn record_connections_reaped(
@@ -309,28 +309,28 @@ impl AtomicStatistics {
309309
closed_max_lifetime: u64,
310310
) {
311311
self.connections_closed_idle_timeout
312-
.fetch_add(closed_idle_timeout, Ordering::SeqCst);
312+
.fetch_add(closed_idle_timeout, Ordering::Relaxed);
313313
self.connections_closed_max_lifetime
314-
.fetch_add(closed_max_lifetime, Ordering::SeqCst);
314+
.fetch_add(closed_max_lifetime, Ordering::Relaxed);
315315
}
316316
}
317317

318318
impl From<&AtomicStatistics> for Statistics {
319319
fn from(item: &AtomicStatistics) -> Self {
320320
Self {
321-
get_direct: item.get_direct.load(Ordering::SeqCst),
322-
get_waited: item.get_waited.load(Ordering::SeqCst),
323-
get_timed_out: item.get_timed_out.load(Ordering::SeqCst),
324-
get_wait_time: Duration::from_micros(item.get_wait_time_micros.load(Ordering::SeqCst)),
325-
connections_created: item.connections_created.load(Ordering::SeqCst),
326-
connections_closed_broken: item.connections_closed_broken.load(Ordering::SeqCst),
327-
connections_closed_invalid: item.connections_closed_invalid.load(Ordering::SeqCst),
321+
get_direct: item.get_direct.load(Ordering::Relaxed),
322+
get_waited: item.get_waited.load(Ordering::Relaxed),
323+
get_timed_out: item.get_timed_out.load(Ordering::Relaxed),
324+
get_wait_time: Duration::from_micros(item.get_wait_time_micros.load(Ordering::Relaxed)),
325+
connections_created: item.connections_created.load(Ordering::Relaxed),
326+
connections_closed_broken: item.connections_closed_broken.load(Ordering::Relaxed),
327+
connections_closed_invalid: item.connections_closed_invalid.load(Ordering::Relaxed),
328328
connections_closed_max_lifetime: item
329329
.connections_closed_max_lifetime
330-
.load(Ordering::SeqCst),
330+
.load(Ordering::Relaxed),
331331
connections_closed_idle_timeout: item
332332
.connections_closed_idle_timeout
333-
.load(Ordering::SeqCst),
333+
.load(Ordering::Relaxed),
334334
}
335335
}
336336
}

0 commit comments

Comments
 (0)