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

Re: [Xen-devel] [RFC v2] vm snapshot documents



Hi, david

 >>>David kiarie <davidkiarie4@xxxxxxxxx> wrote: 
> On Wed, Apr 23, 2014 at 1:18 PM, Bamvor Jian Zhang <bjzhang@xxxxxxxx> wrote: 
> > Hi, 
> > 
> >  >>>Jim Fehlig <jfehlig@xxxxxxxx> wrote: 
> >> Bamvor Jian Zhang wrote: 
> >> > Hi, 
> >> > here is the second version about vm snapshot documents, the first 
> >> > version  
> is 
> >> > here[1] 
> >> Hi Bamvor, 
> >> 
> >> Thanks for being adventurous and starting this work :-). 
> > thanks for your reply. 
...
> >> > 2, new struct and new api 
> >> > 1), new struct 
> >> > (1), libxl_snapshot struct store a disk snapshot information, which get  
> from 
> >> > qcow2 image through "query-block" qmp command. 
> >> > 
> >> > libxl_snapshot = Struct("snapshot",[ 
> >> >     ("device",        string), 
> >> > 
> >> 
> >> Should this be libxl_device_disk instead of a string? And should 
> >> multiple be supported, allowing control over which of a domain's disks 
> >> are included in the snapshot? 
> > one libxl_snapshot represent one disk. see my comment below. 
> >> 
> >> "description" would be helpful. 
> >> 
> >> >     ("id",            string), 
> >> >     ("vm_state_size", uint64), 
> >> >     ("date_sec",      uint64), 
> >> >     ("date_nsec",     uint64), 
> >> >     ("vm_clock_sec",  uint64), 
> >> >     ("vm_clock_nsec", uint64), 
> >> > 
> >> 
> >> A lot of these are read-only and wouldn't be provided when calling 
> >> libxl_snapshot_create(). I think adding the domain state at time of 
> >> snapshot would be useful. 
> > do you mean the stopped or running state for a domain? 
> >> There are probably other items I'm not 
> >> considering atm, which makes me nervous about future extensibility. 
> > so, how about this? 
> >  libxl_vm_snapshot = Struct("vm_snapshot",[ 
> >      ("name",          string), 
> >      ("creation_time", uint64), 
> >      ("save",          string), 
> > +    ("state",         string), 
> > +    ("disks", Array(libxl_snapshot, "num_disks")), 
> >      ]) 
> > 
> > BTW: maybe i should rename libxl_snapshot to libxl_disk_snapshot? 
> > 
> >> 
> >> > (2), libxl_vm_snapshot store vm snapshot information which store in the  
> path 
> >> > shown above. i add some api for create, delete and list these 
> >> > information. 
> >> > at first, i want to add these information to xenstore, but it will lose  
> when 
> >> > xenstore reboot or dom0 reboot. 
> >> > 
> >> > libxl_vm_snapshot = Struct("vm_snapshot",[ 
> >> >     ("name",          string), 
> >> >     ("creation_time", uint64), 
> >> >     ("save",          string), 
> >> >     ]) 
> >> > 
> >> > 2), new api 
> >> > (1), in libxl/libxl.h 
> >> > /* disk snapshot api 
> >> >  * support create, delete and list for internal snapshot of a single 
> >> > disk 
> >> >  * only support internal snapshot rigt now. 
> >> >  */ 
> >> > /* create disk snapshot according to the device name in snapshot array. 
> >> > nb  
> is 
> >> >  * the number of snapshot array. 
> >> >  * use the qmp transaction to ensure all snapshot of disk is coherence. 
> >> >  */ 
> >> > int libxl_disk_snapshot_create(libxl_ctx *ctx, int domid, 
> >> >                                libxl_snapshot *snapshot, int nb); 
> >> > /* delete number of nb disk snapshot describe in snapshot array 
> >> >  */ 
> >> > int libxl_disk_snapshot_delete(libxl_ctx *ctx, int domid, 
> >> >                                libxl_snapshot *snapshot, int nb); 
> >> > int libxl__disk_snapshot_delete(libxl_ctx *ctx, int domid, 
> >> >                                 libxl_snapshot *snapshot); 
> >> > /* apply the disk snapshot by qemu-img command 
> >> >  */ 
> >> > int libxl_disk_snapshot_apply(libxl_ctx *ctx, int domid, 
> >> >                               libxl_snapshot *snapshot, int nb); 
> >> > /* list disk snapshot by qmp query-block command 
> >> >  */ 
> >> > int libxl__disk_snapshot_list(libxl_ctx *ctx, int domid, 
> >> >                               libxl_snapshot **snapshotp); 
> >> > 
> >> > /* vm snapshot api 
> >> >  */ 
> >> > /* write vm snapshot information to file 
> >> >  */ 
> >> > int libxl_vm_snapshot_add(libxl_ctx *ctx, uint32_t domid, 
> >> >                           libxl_vm_snapshot *snapshot, 
> >> >                           const libxl_asyncop_how *ao_how) 
> >> >                           LIBXL_EXTERNAL_CALLERS_ONLY; 
> >> > /* delete vm snapshot information file 
> >> >  */ 
> >> > int libxl_vm_snapshot_remove(libxl_ctx *ctx, uint32_t domid, 
> >> >                              libxl_vm_snapshot *snapshot, 
> >> >                              const libxl_asyncop_how *ao_how) 
> >> >                              LIBXL_EXTERNAL_CALLERS_ONLY; 
> >> > /* list vm snapshot from file 
> >> >  */ 
> >> > libxl_vm_snapshot *libxl_vm_snapshot_list(libxl_ctx *ctx, uint32_t 
> >> > domid, 
> >> >                                           int *num) 
> >> >                                           LIBXL_EXTERNAL_CALLERS_ONLY; 
> >> > /* read vm snapshot information from dedicated file 
> >> >  */ 
> >> > int libxl_vm_snapshot_getinfo(libxl_ctx *ctx, uint32_t domid, 
> >> >                               libxl_vm_snapshot *snapshot); 
> >> > /* delete vm save image */ 
> >> > int libxl_vm_snapshot_delete_save_image(libxl_ctx *ctx, 
> >> >                                         libxl_vm_snapshot *snapshot); 
> >> > 
> >> 
> >> IMO, these too should be combined into libxl_snapshot_*(), with disk vs 
> >> domain snapshot controlled via a flags argument. 
>  
> Yes, I also think so. 
> I was also thinking that one struct could be used to represent all 
> snapshot(vm and disk) information. 
> We should have some flags in the struct indicating the contents of the 
> structure whether disk_snapshot,vm_snapshot, or system checkpoint.This 
> can be implemented using enums or a bit mask. 
>  
> That done,we can libxl_snapshot_*() functions controlled by a flags 
> argument for creation,deletion,listing,reverting and deleting 
except the id/name in vm, disk, there is no common information for vm and disk.
i am not sure how do you want to do, maybe you could give a example?

regardsa

bamvor
 
> > maybe the function name is not clear. i will call the above function in the 
> > libxl_snapshot_create(), like this: 
> > libxl_snapshot_create() 
> > { 
> >     //save memory 
> >     save_domain 
> >     //get disk list 
> >     get_disk 
> >     //create disk snapshot according to disk list 
> >     libxl__disk_snapshot_create 
> >     //store snapshot information to file, maybe libxl_snapshot_store is  
> more 
> >     //clear? 
> >     libxl_snapshot_add 
> >     //unpause 
> >     libxl_domain_unpause 
> > } 
> > 
> > but i have some problems while i write libxl_snapshot_* apis. 
> > firstly, there are different routines about vm save/restore because in  
> libvirt 
> > the driver need to interact between libvirtd. 
> > secondly, i want to reuse the save_domain, create_domain in xl_cmdimpl.c. 
> > so, it is hard to me to provided the domain snapshot api directly. if i  
> only 
> > provide some sub-command for domain snapshot, it just like 
> > libxl_domain_suspend in save_doman or libxl_domain_new in create_domain, it 
> > might be easier for libvirt driver to implement snapshot. 
> > is it make sense? or is there a better way to provide the domain snapshot  
> api? 
> > 
> >> 


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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