[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Minios-devel] Mini-OS Support for Suspend



Hey Bruno,

I am Simon from NEC Labs. A former colleague of mine did implement the suspend functionality on our mini-os tree a couple of years ago (please do not blame me for design decisions ;-) and it was working fine for us).
In order to get our suspend/resume working, you need to provide a 
function that has to have the following name and signature:
void app_shutdown(unsigned reason)

This function will be called from a newly introduced thread (called shutdown) which listens for suspend or shutdown requests. Since Mini-OS has a cooperative scheduler, your main() should either block, sleep, or call schedule() from time to time; so that this schedule can do its work. The reasons are defined in <mini-os/shutdown.h>.
As soon as you catch one of the requests, you can call kernel_suspend() 
or kernel_shutdown(action).
I remember that VIFs and block devices should be supported by our 
implementation - not sure about the consoles.
Thanks,

Simon


On 07.12.2017 00:53, Bruno Alvisio wrote:
Hi all,

I wanted to be able to save and suspend mini-os but found that mini-os doesn't handle "suspend" requests. I also found that the mini-os repository from NEC Labs Systems and Machine Learning (sysml) has some support to handle suspends: There is a kernel_suspend() function that does the suspend operations such as unmapping the shared info page and suspending Xenstore. I have tried to port the suspend functions from the sysml mini-os repository to the current xenbits mini-os repository but I was not able to make suspend work. Also looked at what the mirage OS does for suspend and replicate it without luck. The branch can be found in:
https://github.com/balvisio/mini-os/tree/feature/mini-os-suspend-support


Currently the "xl save" command fails with the following messages:

root@debianxen:/home/balvisio# xl -vvv save minios minios.chkpt

libxl: debug: libxl_domain.c:1687:libxl_retrieve_domain_configuration: Domain 58:No disk from xenstore
libxl: debug: libxl_domain.c:1687:libxl_retrieve_domain_configuration: 
Domain 58:No nic from xenstore
libxl: debug: libxl_domain.c:1687:libxl_retrieve_domain_configuration: 
Domain 58:No vtpm from xenstore
libxl: debug: libxl_domain.c:1687:libxl_retrieve_domain_configuration: 
Domain 58:No usbctrl from xenstore
libxl: debug: libxl_domain.c:1687:libxl_retrieve_domain_configuration: 
Domain 58:No usbdev from xenstore
libxl: debug: libxl_domain.c:1687:libxl_retrieve_domain_configuration: 
Domain 58:No pci from xenstore
libxl: debug: libxl_domain.c:1687:libxl_retrieve_domain_configuration: 
Domain 58:No vdispl from xenstore
Saving to minios.chkpt new xl format (info 0x3/0x0/705)

libxl: debug: libxl_domain.c:492:libxl_domain_suspend: Domain 58:ao 0x560af0252d40: create: how=(nil) callback=(nil) poller=0x560af024fb30
libxl: debug: libxl.c:719:libxl__fd_flags_modify_save: fnctl F_GETFL 
flags for fd 9 are 0x8001
libxl: debug: libxl.c:727:libxl__fd_flags_modify_save: fnctl F_SETFL of 
fd 9 to 0x8001
libxl: debug: libxl_domain.c:520:libxl_domain_suspend: Domain 58:ao 
0x560af0252d40: inprogress: poller=0x560af024fb30, flags=i
libxl-save-helper: debug: starting save: Success

xc: detail: fd 9, dom 58, flags 0, hvm 0

xc: info: Saving domain 58, type x86 PV

xc: detail: 64 bits, 4 levels

xc: detail: max_mfn 0x440000

xc: detail: max_pfn 0x3fff, p2m_frames 32

libxl: debug: libxl_dom_suspend.c:191:domain_suspend_callback_common: Domain 58:issuing PV suspend request via XenBus control node
libxl: debug: libxl_event.c:636:libxl__ev_xswatch_register: watch 
w=0x560af02502d8 wpath=/local/domain/58/control/shutdown token=3/0: 
register slotnum=3
libxl: debug: libxl_event.c:573:watchfd_callback: watch w=0x560af02502d8 
wpath=/local/domain/58/control/shutdown token=3/0: event 
epath=/local/domain/58/control/shutdown
libxl: debug: libxl_event.c:673:libxl__ev_xswatch_deregister: watch 
w=0x560af02502d8 wpath=/local/domain/58/control/shutdown token=3/0: 
deregister slotnum=3
libxl: debug: 
libxl_dom_suspend.c:273:domain_suspend_common_pvcontrol_suspending: 
Domain 58:guest acknowledged suspend request
libxl: debug: libxl_dom_suspend.c:292:domain_suspend_common_wait_guest: 
Domain 58:wait for the guest to suspend
libxl: debug: libxl_event.c:636:libxl__ev_xswatch_register: watch 
w=0x560af02502f0 wpath=@releaseDomain token=3/1: register slotnum=3
libxl: debug: libxl_event.c:573:watchfd_callback: watch w=0x560af02502f0 
wpath=@releaseDomain token=3/1: event epath=@releaseDomain
libxl: debug: libxl_dom_suspend.c:346:suspend_common_wait_guest_check: 
Domain 58:guest we were suspending has shut down with unexpected reason 
code 0
libxl: debug: libxl_event.c:673:libxl__ev_xswatch_deregister: watch 
w=0x560af02502f0 wpath=@releaseDomain token=3/1: deregister slotnum=3
xc: error: save callback suspend() failed: 0: Internal error

xc: error: Save failed (22 = Invalid argument): Internal error

libxl-save-helper: debug: complete r=-1: Invalid argument

libxl: error: libxl_stream_write.c:350:libxl__xc_domain_save_done: Domain 58:saving domain: domain responded to suspend request: Invalid argument
libxl: debug: libxl.c:746:libxl__fd_flags_restore: fnctl F_SETFL of fd 9 
to 0x8001
libxl: debug: libxl_event.c:1869:libxl__ao_complete: ao 0x560af0252d40: 
complete, rc=-3
libxl: debug: libxl_event.c:1838:libxl__ao__destroy: ao 0x560af0252d40: 
destroy
Failed to save domain, resuming domain

libxl: debug: libxl_domain.c:180:libxl_domain_resume: Domain 58:ao 0x560af0253550: create: how=(nil) callback=(nil) poller=0x560af024fb30
libxl: error: libxl_dom.c:38:libxl__domain_type: unable to get domain 
type for domid=58
libxl: debug: libxl_event.c:1869:libxl__ao_complete: ao 0x560af0253550: 
complete, rc=-3
libxl: debug: libxl_domain.c:183:libxl_domain_resume: Domain 58:ao 
0x560af0253550: inprogress: poller=0x560af024fb30, flags=ic
libxl: debug: libxl_event.c:1838:libxl__ao__destroy: ao 0x560af0253550: 
destroy
xencall:buffer: debug: total allocations:47 total releases:47

xencall:buffer: debug: current allocations:0 maximum allocations:2

xencall:buffer: debug: cache current size:2

xencall:buffer: debug: cache hits:36 misses:2 toobig:9

xencall:buffer: debug: total allocations:0 total releases:0

xencall:buffer: debug: current allocations:0 maximum allocations:0

xencall:buffer: debug: cache current size:0

xencall:buffer: debug: cache hits:0 misses:0 toobig:0



I also tried to compile the mini-OS from the NEC repository but I was not able to.
Any help/pointers to make suspend work in mini-OS or on how to build 
mini-OS from the NEC-sysml repository would be greatly appreciated.
Cheers,

Bruno






_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

--
============================================================
Simon Kuenzer
シモン クゥンツァー
Research Scientist,
Networked Systems and Data Analytics Group
NEC Laboratories Europe, Network Research Division
Kurfuerstenanlage 36, D-69115 Heidelberg
Tel.     +49 (0)6221 4342-264
Fax:     +49 (0)6221 4342-5264
e-mail:  simon.kuenzer@xxxxxxxxx
============================================================
NEC Europe Ltd | Registered Office: Athene, Odyssey
Business Park, West End Road, London, HA4 6QE, GB
Registered in England 2832014

_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.