|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH COLO v5 02/29] Refactor domain_suspend_callback_common()
On 04/09/2015 02:11 AM, Wei Liu wrote:
> On Wed, Apr 01, 2015 at 02:41:38PM +0800, Yang Hongyang wrote:
>> From: Wen Congyang <wency@xxxxxxxxxxxxxx>
>>
>> libxl__domain_suspend() is to save the guest. I think
>> we should call it libxl__domain_save(), but I don't
>> rename it.
>>
>
> FWIW this is not public API so we have certain degree of liberty to
> rename it if the new name is deemed more appropriate.
OK
>
>> Secondary vm is running in colo mode. So we will do
>> the following things again and again:
>> 1. suspend both primay vm and secondary vm
>> 2. sync the state
>> 3. resume both primary vm and secondary vm
>> To suspend secondary vm, we need an independent API to
>> suspend vm.
>>
> [...]
>>
>> +/*
>> + * libxl__domain_suspend_state is for saving guest, not
>> + * for suspending guest. We need to an independent API
>> + * to suspend guest only.
>> + */
>> +struct libxl__domain_suspend_state2 {
>> + /* set by caller of libxl__domain_suspend2 */
>> + libxl__ao *ao;
>> +
>> + uint32_t domid;
>> + libxl__ev_evtchn guest_evtchn;;
>> + int guest_evtchn_lockfd;
>> + int hvm;
>> + const char *dm_savefile;
>> + void (*callback_common_done)(libxl__egc*,
>> + libxl__domain_suspend_state2*, int ok);
>> + int save_dm;
>> + int guest_responded;
>> + libxl__xswait_state pvcontrol;
>> + libxl__ev_xswatch guest_watch;
>> + libxl__ev_time guest_timeout;
>> +};
>> +
>> struct libxl__domain_suspend_state {
>> /* set by caller of libxl__domain_suspend */
>> libxl__ao *ao;
>> @@ -2827,22 +2851,14 @@ struct libxl__domain_suspend_state {
>> int debug;
>> const libxl_domain_remus_info *remus;
>> /* private */
>> - libxl__ev_evtchn guest_evtchn;
>> - int guest_evtchn_lockfd;
>> + libxl__domain_suspend_state2 dss2;
>> int hvm;
>> int xcflags;
>> - int guest_responded;
>> - libxl__xswait_state pvcontrol;
>> - libxl__ev_xswatch guest_watch;
>> - libxl__ev_time guest_timeout;
>> - const char *dm_savefile;
>> libxl__remus_devices_state rds;
>> libxl__ev_time checkpoint_timeout; /* used for Remus checkpoint */
>> int interval; /* checkpoint interval (for Remus) */
>> libxl__save_helper_state shs;
>> libxl__logdirty_switch logdirty;
>> - void (*callback_common_done)(libxl__egc*,
>> - struct libxl__domain_suspend_state*, int
>> ok);
>> /* private for libxl__domain_save_device_model */
>> libxl__save_device_model_cb *save_dm_callback;
>> libxl__datacopier_state save_dm_datacopier;
>
> You moved dm_savefile to new struct but not these two fields, why?
> Since your suspend2 function is just a wrapper around
> domain_suspend_callback_common, it doesn't seem to need access to
> dm_savefile.
Hmm, there are two operations:
1. save qemu state to dm_savefile
2. transfer qemu state to dm_savefile
The function libxl__domain_suspend_device_model() does operation 1, and
the function libxl__domain_save_device_model() does operation 2.
The function libxl__domain_suspend_device_model() is called when we suspend
the guest, and it only uses the filed dm_savefile.
I think we should split it out: save qemu state to dm_savefile if the caller
needs to do it.
Thanks
Wen Congyang
>
> Wei.
>
>> @@ -3116,6 +3132,9 @@ struct libxl__domain_create_state {
>>
>> /*----- Domain suspend (save) functions -----*/
>>
>> +/* calls dss2->callback_common_done when done */
>> +_hidden void libxl__domain_suspend2(libxl__egc *egc,
>> + libxl__domain_suspend_state2 *dss2);
>> /* calls dss->callback when done */
>> _hidden void libxl__domain_suspend(libxl__egc *egc,
>> libxl__domain_suspend_state *dss);
>> @@ -3155,7 +3174,7 @@ _hidden void libxl__xc_domain_restore_done(libxl__egc
>> *egc, void *dcs_void,
>>
>> /* Each time the dm needs to be saved, we must call suspend and then save */
>> _hidden int libxl__domain_suspend_device_model(libxl__gc *gc,
>> - libxl__domain_suspend_state
>> *dss);
>> + libxl__domain_suspend_state2
>> *dss2);
>> _hidden void libxl__domain_save_device_model(libxl__egc *egc,
>> libxl__domain_suspend_state *dss,
>> libxl__save_device_model_cb *callback);
>> --
>> 1.9.1
>>
>>
>> _______________________________________________
>> Xen-devel mailing list
>> Xen-devel@xxxxxxxxxxxxx
>> http://lists.xen.org/xen-devel
> .
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |