How are PHP FPM's dynamic children settings applied?

There's the following settings

  1. pm.start_servers
  2. pm.min_spare_servers
  3. pm.max_children
  4. pm.max_spare_servers
  5. pm.process_idle_timeout

I think these are implemented as shown here: graph showing my understanding

i.e. - after the idle timeout, any servers beyond min_spare_servers get killed. - as servers get busy, it maintains min_spare_servers idle children - until it hits the max - then as load decreases, processes that have been idle longer than the timeout are killed off, but only down to the max_spare_servers number?

Is that how it works, or does it only create spare servers when it runs out? The max_spare seems odd - can't really see the value in having that different to the min_spare as surely it just leaves a load of idle processes there forever after a peak?