summaryrefslogtreecommitdiff
path: root/src/core_selector.rs
diff options
context:
space:
mode:
authorLennard Kittner <lennardkittner@icloud.com>2025-04-15 16:45:11 +0200
committerLennard Kittner <lennardkittner@icloud.com>2025-04-15 16:45:11 +0200
commitbe9d8527821e8999799930e922d79afd2ef998e9 (patch)
treea6de07b413202543eb28ad1dbb403be594307e2c /src/core_selector.rs
parent1e05cd3bf6896ad4da7420c6914c1381714cdf43 (diff)
Change CLI args
Add p core selector Fix socket argument parsing Better budget calculation
Diffstat (limited to 'src/core_selector.rs')
-rw-r--r--src/core_selector.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/core_selector.rs b/src/core_selector.rs
new file mode 100644
index 0000000..f70b252
--- /dev/null
+++ b/src/core_selector.rs
@@ -0,0 +1,31 @@
+use std::ops::Range;
+
+pub trait CoreSelector {
+ fn next_core(&mut self, previous_cpu: i32) -> i32;
+}
+
+pub struct RoundRobinSelector {
+ offset: u32,
+ num_cores: u32,
+ last_used: u32,
+}
+
+impl RoundRobinSelector {
+ pub fn new(cores: &Range<i32>) -> RoundRobinSelector {
+ Self {
+ offset: cores.start as u32,
+ num_cores: cores.len() as u32,
+ last_used: 0,
+ }
+ }
+}
+
+impl CoreSelector for RoundRobinSelector {
+ fn next_core(&mut self, previous_cpu: i32) -> i32 {
+ if (self.offset..(self.offset + self.num_cores)).contains(&(previous_cpu as u32)) {
+ return previous_cpu;
+ }
+ self.last_used += 1;
+ (self.offset + (self.last_used % self.num_cores.max(1))) as i32
+ }
+}