Ian Campbell writes ("Re: [PATCH 4 of 5 V3] tools/libxl: Control network buffering in remus callbacks [and 1 more messages]"):
> Regardless of the answer here, would it make sense to do some/all of theIt might do. Mind you, the code in libxc is tangled enough as it is
> checkpoint processing in the helper subprocess anyway and only signal
> the eventual failover up to the libxl process?
and is due for a rewrite. Perhaps this could be done in the helper
executable, although there isn't currently any way to easily
intersperse code in there.
> This async op is potentially quite long running I think compared to a
> normal one i.e. if the guest doesn't die it is expected that the ao
> lives "forever". Since the associated gc's persist until the ao ends
> this might end up accumulating lots of allocations? Ian had a similar
> concern about Roger's hotplug daemon series and suggested creating a per
> iteration gc or something.
Yes, this is indeed a problem. Well spotted.
Which of the xc_domain_save (and _restore) callbacks are called each
remus iteration ?
I think introducing a per-iteration gc here is going to involve taking
some care, since we need to be sure not to put
per-iteraton-gc-allocated objects into data structures which are used
by subsequent iterations.
Shriram writes:The ultimate cost of going back into the event loop to wait for a
> Fair enough. My question is what is the overhead of setting up, firing
> and tearing down a timeout event using the event gen framework, if I
> wish to checkpoint the VM, say every 20ms ?
timeout will depend on what else the process is doing. If the process
is doing nothing else, it's about two calls to gettimeofday and one to
poll. Plus a bit of in-process computation, but that's going to be
swamped by system call overhead.
Having said that, libxl is not performance-optimised. Indeed the
callback mechanism involves context switching, and IPC, between the
save/restore helper and libxl proper. Probably not too much to be
doing every 20ms for a single domain, but if you have a lot of these
it's going to end up taking a lot of dom0 cpu etc.
I assume you're not doing this for HVM domains, which involve saving
the qemu state each time too.