diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-04 23:28:48 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-04 23:28:48 +0300 |
| commit | d0a5493e9710f4b515ad5825aeee3c0102d03ee7 (patch) | |
| tree | 8f8ddcbf96beb517252ce525060382f22b83fa6a /internal/cpu/worker.go | |
| parent | 2f09915d3da7a23574e1a90fa70eb1af1cdf830a (diff) | |
renamemain
Diffstat (limited to 'internal/cpu/worker.go')
| -rw-r--r-- | internal/cpu/worker.go | 34 |
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) } } |
