From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Nikolay Borisov <nborisov@suse.com>, berrange@redhat.com
Cc: qemu-devel@nongnu.org, Claudio Fontana <Claudio.Fontana@suse.com>,
Jim Fehlig <jfehlig@suse.com>,
quintela@redhat.com
Subject: Re: towards a workable O_DIRECT outmigration to a file
Date: Thu, 18 Aug 2022 13:38:11 +0100 [thread overview]
Message-ID: <Yv4ys6e0kK/2BMFk@work-vm> (raw)
In-Reply-To: <6f8a6a33-5a68-0eeb-d278-9397b1fd0015@suse.com>
* Nikolay Borisov (nborisov@suse.com) wrote:
> [adding Juan and David to cc as I had missed them. ]
Hi Nikolay,
> On 11.08.22 г. 16:47 ч., Nikolay Borisov wrote:
> > Hello,
> >
> > I'm currently looking into implementing a 'file:' uri for migration save
> > in qemu. Ideally the solution will be O_DIRECT compatible. I'm aware of
> > the branch https://gitlab.com/berrange/qemu/-/tree/mig-file. In the
> > process of brainstorming how a solution would like the a couple of
> > questions transpired that I think warrant wider discussion in the
> > community.
OK, so this seems to be a continuation with Claudio and Daniel and co as
of a few months back. I'd definitely be leaving libvirt sides of the
question here to Dan, and so that also means definitely looking at that
tree above.
> > First, implementing a solution which is self-contained within qemu would
> > be easy enough( famous last words) but the gist is one has to only care
> > about the format within qemu. However, I'm being told that what libvirt
> > does is prepend its own custom header to the resulting saved file, then
> > slipstreams the migration stream from qemu. Now with the solution that I
> > envision I intend to keep all write-related logic inside qemu, this
> > means there's no way to incorporate the logic of libvirt. The reason I'd
> > like to keep the write process within qemu is to avoid an extra copy of
> > data between the two processes (qemu outging migration and libvirt),
> > with the current fd approach qemu is passed an fd, data is copied
> > between qemu/libvirt and finally the libvirt_iohelper writes the data.
> > So the question which remains to be answered is how would libvirt make
> > use of this new functionality in qemu? I was thinking something along
> > the lines of :
> >
> > 1. Qemu writes its migration stream to a file, ideally on a filesystem
> > which supports reflink - xfs/btrfs
> >
> > 2. Libvirt writes it's header to a separate file
> > 2.1 Reflinks the qemu's stream right after its header
> > 2.2 Writes its trailer
> >
> > 3. Unlink() qemu's file, now only libvirt's file remains on-disk.
> >
> > I wouldn't call this solution hacky though it definitely leaves some
> > bitter aftertaste.
Wouldn't it be simpler to tell libvirt to write it's header, then tell
qemu to append everything?
> > Another solution would be to extend the 'fd:' protocol to allow multiple
> > descriptors (for multifd) support to be passed in. The reason dup()
> > can't be used is because in order for multifd to be supported it's
> > required to be able to write to multiple, non-overlapping regions of the
> > file. And duplicated fd's share their offsets etc. But that really seems
> > more or less hacky. Alternatively it's possible that pwrite() are used
> > to write to non-overlapping regions in the file. Any feedback is
> > welcomed.
I do like the idea of letting fd: take multiple fd's.
Dave
> >
> >
> > Regards,
> > Nikolay
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2022-08-18 12:42 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-11 13:47 towards a workable O_DIRECT outmigration to a file Nikolay Borisov
2022-08-11 14:10 ` Nikolay Borisov
2022-08-18 12:38 ` Dr. David Alan Gilbert [this message]
2022-08-18 12:52 ` Claudio Fontana
2022-08-18 16:31 ` Dr. David Alan Gilbert
2022-08-18 18:09 ` Claudio Fontana
2022-08-18 18:45 ` Claudio Fontana
2022-08-18 18:49 ` Dr. David Alan Gilbert
2022-08-18 19:14 ` Claudio Fontana
2022-08-18 18:13 ` Claudio Fontana
2022-09-08 10:26 ` [PATCH] migration: support file: uri for source migration Nikolay Borisov
2022-09-12 15:41 ` Daniel P. Berrangé
2022-09-12 16:30 ` Nikolay Borisov
2022-09-12 16:43 ` Daniel P. Berrangé
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Yv4ys6e0kK/2BMFk@work-vm \
--to=dgilbert@redhat.com \
--cc=Claudio.Fontana@suse.com \
--cc=berrange@redhat.com \
--cc=jfehlig@suse.com \
--cc=nborisov@suse.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).