Date: Mon, 22 Apr 2019 20:06:54 -0700 From: Paul Vixie <paul@redbarn.org> To: Victor Sudakov <vas@mpeks.tomsk.su> Cc: freebsd-virtualization@freebsd.org Subject: Re: [vm-bhyve] Windows 2012 and 2016 servers guests would not stop Message-ID: <d33ea04e-4f4f-253a-b658-e6ecfd2308a6@redbarn.org> In-Reply-To: <20190423024301.GA940@admin.sibptus.ru> References: <20190421154616.GA59283@admin.sibptus.ru> <201904211708.x3LH8DiK028282@gndrsh.dnsmgr.net> <20190423024301.GA940@admin.sibptus.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
Victor Sudakov wrote on 2019-04-22 19:43:
...
>> And the implementation is pretty brutal:
>> # 'vm stopall'
>> # stop all bhyve instances
>> # note this will also stop instances not started by vm-bhyve
>> #
>> core::stopall(){
>> local _pids=$(pgrep -f 'bhyve:')
>>
>> echo "Shutting down all bhyve virtual machines"
>> killall bhyve
>> sleep 1
>> killall bhyve
>> wait_for_pids ${_pids}
>> }
yow.
>>
>> I wonder what the effect of the second kill is,
>> that seems odd.
>
> Indeed.
the first killall will cause each client OS to see a soft shutdown
signal. the sleep 1 gives them some time to flush their buffers. the
second killall says, time's up, just stop.
i think this is worse than brutal, it's wrong. consider freebsd's own
work flow when trying to comply with the first soft shutdown it got:
https://github.com/freebsd/freebsd/blob/master/sbin/reboot/reboot.c#L220
this has bitten me more than once, because using "pageins" as a proxy
for "my server processes are busy trying to synchronize their user mode
state" is inaccurate. i think _any_ continuing I/O should be reason to
wait the full 60 seconds.
and so i think the "sleep 1" above should be a "sleep 65".
> What is needed in vm-bhyve is the feature that if ACPI does not stop the
> guest for a predefined period of time, the guest is powered off.
i agree with this.
--
P Vixie
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?d33ea04e-4f4f-253a-b658-e6ecfd2308a6>
