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

Re: [Xen-devel] libxl - API call to return sxpr of a domain?

On Tue, Jun 7, 2011 at 5:02 AM, Ian Campbell <Ian.Campbell@xxxxxxxxxx> wrote:
On Tue, 2011-06-07 at 04:30 +0100, Shriram Rajagopalan wrote:
> I am looking into adding Remus support for libxl. The easiest way is
> to obtain the domain's sxpr, so that the rest of Remus python code
> stays as is.
> Is there an api call in libxl to return a domain's sxpr ? a grep on
> the libxl code
> base returned nothing. Or am I missing something pretty obvious?

xl has some code to do this but libxl doesn't. An sxpr representation of
a domain is rather a xend specific concept which is the only reason xl
has it.
There are some plans to allow libxl to generate json for any of the IDL
defined datastructures, mostly as a convenient pretty-printer but being
machine parsable is a handy side-effect. Currently this would just be
for individual datastructures though.

Where/how does remus use sxp? tools/python/xen/remus/vm.py:domtosxpr()
seems to consume a xend datastructure and make a Remus sxp out of it --
can an xl equivalent not be written using the python bindings? (NB
bindings may be incomplete, we can fix up as you discover stuff). Are
all usages of sxp in Remus of that particular sxp format or are there

The only reason remus uses sxpr is because xend conveys info in that form.
Basically, it only needs the vif device name (vif1.0, etc), the disk device name and
the access format (tap/drbd) for proper operation.

 save.py:MigrationSocket - establish connection with remote machine's xend daemon
 vm.VM(domid): get sxpr (dominfo) from xend via xml rpc call.
 save.py:Saver - image.makeheader(dominfo) - serialize the sxpr and send to remote machine.

everything else in vm.py is to parse the sxpr to extract the vif and disk info.
 self.disks = getdisks(self.dom)
 self.vifs = getvifs(self.dom)

Are sxp's baked into the Remus wire-protocol?
Remus wire-protocol is whatever protocol xend requires.

The reason for bypassing the usual xend live migration code path is because of the
callbacks, the checkpoint interval based suspend/resume, etc. Now that I know that
xl/libxl doesnt use sxpr in its wire-protocol (dunce! :( ), the plan would have to be different.

(a) Follow the same implementation style like that with xend (bypass xl's live
migration mechanism) - involves some code duplication probably for communicating with
remote machine, in xl's wire protocol. The advantage is most of remus' python code (save.py,
 device.py, qdisc.py, code to install/parse IFB devices, tc rules, etc) stays as is.

(b) integrate the remus control flow into xl/libxl stack - I dont know how much work that would be
Personally I think moving
away from using SXPs internally towards using actual data structures
would be a good idea...

BTW, is tools/python/xen/remus part of xend or part of Remus? Or does it
straddle the boundary?

part of Remus stack.

Xen-devel mailing list



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