From 4f9c5c00bbf3219ed52f1ff812aa6d08ed0eefe3 Mon Sep 17 00:00:00 2001 From: Janis Date: Thu, 20 Feb 2025 21:51:16 +0100 Subject: [PATCH] cacheline aligned heartbeat atomics --- src/praetor/mod.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/praetor/mod.rs b/src/praetor/mod.rs index 32fdf8d..2ec47a6 100644 --- a/src/praetor/mod.rs +++ b/src/praetor/mod.rs @@ -752,6 +752,7 @@ use std::{ time::Duration, }; +use crossbeam::utils::CachePadded; use job::*; use parking_lot::{Condvar, Mutex}; use util::DropGuard; @@ -760,7 +761,7 @@ pub struct Scope { join_count: Cell, context: Arc, index: usize, - heartbeat: Arc, + heartbeat: Arc>, queue: UnsafeCell, } @@ -1058,7 +1059,7 @@ struct Context { struct SharedContext { jobs: BTreeMap>, - heartbeats: BTreeMap>, + heartbeats: BTreeMap>>, // monotonic increasing id heartbeats_id: usize, should_stop: bool, @@ -1067,11 +1068,11 @@ struct SharedContext { unsafe impl Send for SharedContext {} impl SharedContext { - fn new_heartbeat(&mut self) -> (Arc, usize) { + fn new_heartbeat(&mut self) -> (Arc>, usize) { let index = self.heartbeats_id; self.heartbeats_id.checked_add(1).unwrap(); - let is_set = Arc::new(AtomicBool::new(false)); + let is_set = Arc::new(CachePadded::new(AtomicBool::new(false))); let weak = Arc::downgrade(&is_set); self.heartbeats.insert(index, weak);