summaryrefslogtreecommitdiff
path: root/internal/cpu/worker.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-04 23:28:48 +0300
committerPaul Buetow <paul@buetow.org>2026-05-04 23:28:48 +0300
commitd0a5493e9710f4b515ad5825aeee3c0102d03ee7 (patch)
tree8f8ddcbf96beb517252ce525060382f22b83fa6a /internal/cpu/worker.go
parent2f09915d3da7a23574e1a90fa70eb1af1cdf830a (diff)
renamemain
Diffstat (limited to 'internal/cpu/worker.go')
-rw-r--r--internal/cpu/worker.go34
1 files changed, 23 insertions, 11 deletions
diff --git a/internal/cpu/worker.go b/internal/cpu/worker.go
index 06f6812..b11dc9a 100644
--- a/internal/cpu/worker.go
+++ b/internal/cpu/worker.go
@@ -12,10 +12,6 @@ func (s *Stresser) worker(ctx context.Context, id int) {
defer s.wg.Done()
mode := s.config.Mode
- if s.config.ChaosEnabled {
- mode = s.getRandomMode()
- }
-
intensity := s.randomIntensity()
ticker := time.NewTicker(10 * time.Millisecond)
@@ -31,13 +27,10 @@ func (s *Stresser) worker(ctx context.Context, id int) {
mode = s.current
s.mu.Unlock()
intensity = s.randomIntensity()
+ s.sleepWithJitter(1, 50)
}
s.executeStress(ctx, mode, intensity)
-
- if s.config.ChaosEnabled {
- s.sleepWithJitter(1, 50)
- }
}
}
}
@@ -53,11 +46,33 @@ func (s *Stresser) chaosController(ctx context.Context) {
case <-ticker.C:
s.mu.Lock()
s.current = s.getRandomMode()
+ newCPUCount := s.determineCPUCount()
+ if newCPUCount != s.currentCPUs {
+ s.adjustWorkers(ctx, newCPUCount)
+ }
s.mu.Unlock()
}
}
}
+func (s *Stresser) adjustWorkers(ctx context.Context, newCount int) {
+ if newCount > s.currentCPUs {
+ for i := s.currentCPUs; i < newCount; i++ {
+ s.wg.Add(1)
+ go s.worker(ctx, i)
+ }
+ } else if newCount < s.currentCPUs {
+ s.cancel()
+ s.wg.Wait()
+ ctx, s.cancel = context.WithCancel(context.Background())
+ for i := 0; i < newCount; i++ {
+ s.wg.Add(1)
+ go s.worker(ctx, i)
+ }
+ }
+ s.currentCPUs = newCount
+}
+
func (s *Stresser) executeStress(ctx context.Context, mode Mode, intensity int) {
switch mode {
case ModePrime:
@@ -80,8 +95,5 @@ func (s *Stresser) executeStress(ctx context.Context, mode Mode, intensity int)
s.stressSort(ctx, intensity)
case ModeBusy:
s.stressBusy(ctx, intensity)
- case ModeRandom:
- randomMode := allModes[s.rand.Intn(len(allModes))]
- s.executeStress(ctx, randomMode, intensity)
}
}