On 2018 Feb 26 (Mon) at 18:52:34 -0800 (-0800), Pratik Vyas wrote: :* Dave Voutila <d...@sisu.io> [2018-02-22 23:40:21 -0500]: : :> > Synopsis: VMD consumes 100% cpu after unpausing guest :> > Category: amd64 :> > Environment: :> System : OpenBSD 6.2 :> Details : OpenBSD 6.2-current (GENERIC.MP) #10: Wed Feb 21 21:26:27 MST 2018 :> dera...@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC.MP :> :> Architecture: OpenBSD.amd64 :> Machine : amd64 :> :> > Description: :> :> Not sure if this is a known issue, but I couldn't find anything :> searching the lists. :> :> Using an Alpine Linux guest vm, I can successfully pause the guest using :> `vmctl pause 1` and some time later resume it using `vmctl unpause 1`. :> :> Unpausing works as the guest comes back to life, I can SSH back in, and :> it's fine. However, on the host the vmd process representing that guest :> sits at 100% CPU utilization with 1 thread constantly queueing onto a :> cpu and running. The guest reports normal load so it must be one of the :> 2 threads. : :This should fix it. : :Use rtc_reschedule_per in mc146818_start instead of re arming the :periodic interrupt without checking if it's enabled in REGB. : :ok? : :-- :Pratik : :Index: usr.sbin/vmd/mc146818.c :=================================================================== :RCS file: /home/pdvyas/cvs/src/usr.sbin/vmd/mc146818.c,v :retrieving revision 1.15 :diff -u -p -a -u -r1.15 mc146818.c :--- usr.sbin/vmd/mc146818.c 9 Jul 2017 00:51:40 -0000 1.15 :+++ usr.sbin/vmd/mc146818.c 27 Feb 2018 02:47:18 -0000 :@@ -354,6 +354,6 @@ mc146818_stop() :void :mc146818_start() :{ :- evtimer_add(&rtc.per, &rtc.per_tv); : evtimer_add(&rtc.sec, &rtc.sec_tv); :+ rtc_reschedule_per(); :} :
This helps a lot with the CPU load on a vmd host. Drops my single guest from ~50% CPU to ~9% CPU on the host. OK (btw, should rtc_fireper() receive a similar change?) -- The right half of the brain controls the left half of the body. This means that only left handed people are in their right mind.