* Paolo Bonzini (pbonz...@redhat.com) wrote: > > > On 02/07/2015 18:36, Jason J. Herne wrote: > > +static void cpu_throttle_thread(void *opaque) > > +{ > > + double pct = (double)throttle_percentage/100; > > + double throttle_ratio = pct / (1 - pct); > > + long sleeptime_ms = (long)(throttle_ratio * CPU_THROTTLE_TIMESLICE); > > + > > + if (!throttle_percentage) { > > + return; > > + } > > + > > + qemu_mutex_unlock_iothread(); > > + g_usleep(sleeptime_ms * 1000); /* Convert ms to us for usleep call */ > > + qemu_mutex_lock_iothread(); > > +} > > + > > +static void cpu_throttle_timer_tick(void *opaque) > > +{ > > + CPUState *cpu; > > + > > + /* Stop the timer if needed */ > > + if (!throttle_percentage) { > > + return; > > + } > > + CPU_FOREACH(cpu) { > > + async_run_on_cpu(cpu, cpu_throttle_thread, NULL); > > + } > > + > > + timer_mod(throttle_timer, qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL_RT) + > > + CPU_THROTTLE_TIMESLICE); > > +} > > This could cause callbacks to pile up I think. David, do you have any > idea how to fix it?
I don't know the timer code well enough. Dave > > Paolo -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK