All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <aliguori@us.ibm.com>
To: Glauber Costa <glommer@gmail.com>
Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org,
	Uri Lublin <uri.lublin@qumranet.com>,
	Chris Wright <chrisw@redhat.com>
Subject: Re: [PATCH 1/10] Refactor QEMUFile for live migration
Date: Wed, 10 Sep 2008 10:16:55 -0500	[thread overview]
Message-ID: <48C7E4E7.7060003@us.ibm.com> (raw)
In-Reply-To: <5d6222a80809100738i3e3ed54fs666ca6c3225a7c63@mail.gmail.com>


>> +static int fd_put_buffer(void *opaque, const uint8_t *buf,
>> +                         int64_t pos, int size)
>> +{
>> +    QEMUFileFD *s = opaque;
>> +    ssize_t len;
>> +
>> +    do {
>> +        len = write(s->fd, buf, size);
>> +    } while (len == -1 && errno == EINTR);
>>     
>
> What about the len == size case ?
>   

I don't follow what your concern is.

>> +
>> +static int fd_close(void *opaque)
>> +{
>> +    QEMUFileFD *s = opaque;
>> +    qemu_free(s);
>> +    return 0;
>> +}
>>     
> Why don't we need to do any specific callback for closing the file descriptor?
> In the case of a socket, I imagine we may want to shut the socket down, for ex.
>   

Since qemu_fopen_fd takes a previously open file descriptor, the 
expectation is that you're going to be able to close it yourself at some 
point.  This worked out fine for the migration code and I think it'll 
also work out okay for other code.  Plus, you would have to add 
callbacks to qemu_fopen_fd() which gets pretty nasty.

>> +
>> +QEMUFile *qemu_fopen_fd(int fd)
>> +{
>> +    QEMUFileFD *s = qemu_mallocz(sizeof(QEMUFileFD));
>>     
>
> can't it fail?
>   

Yeah, I should add error checking.

>> -static QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int64_t offset, int is_writable)
>> +typedef struct QEMUFileBdrv
>> +{
>> +    BlockDriverState *bs;
>> +    int64_t base_offset;
>> +} QEMUFileBdrv;
>>     
>
> Isn't it possible to abstract the differences between bdrv and file so
> to have a common implementation
> between them? Do you think it's worthwhile ?
>   

It's a lot of work.  QEMUFile is optimized to batch short read/write 
operations whereas BlockDriverState is meant to be sector based.  
QEMUFile is also evolving into a stream mechanism where BlockDriver will 
always be random access.

It's certainly possible, but I don't think it's worth it at this stage.

Thanks for the review!

Regards,

Anthony Liguori


WARNING: multiple messages have this Message-ID (diff)
From: Anthony Liguori <aliguori@us.ibm.com>
To: Glauber Costa <glommer@gmail.com>
Cc: Chris Wright <chrisw@redhat.com>,
	Uri Lublin <uri.lublin@qumranet.com>,
	qemu-devel@nongnu.org, kvm@vger.kernel.org
Subject: [Qemu-devel] Re: [PATCH 1/10] Refactor QEMUFile for live migration
Date: Wed, 10 Sep 2008 10:16:55 -0500	[thread overview]
Message-ID: <48C7E4E7.7060003@us.ibm.com> (raw)
In-Reply-To: <5d6222a80809100738i3e3ed54fs666ca6c3225a7c63@mail.gmail.com>


>> +static int fd_put_buffer(void *opaque, const uint8_t *buf,
>> +                         int64_t pos, int size)
>> +{
>> +    QEMUFileFD *s = opaque;
>> +    ssize_t len;
>> +
>> +    do {
>> +        len = write(s->fd, buf, size);
>> +    } while (len == -1 && errno == EINTR);
>>     
>
> What about the len == size case ?
>   

I don't follow what your concern is.

>> +
>> +static int fd_close(void *opaque)
>> +{
>> +    QEMUFileFD *s = opaque;
>> +    qemu_free(s);
>> +    return 0;
>> +}
>>     
> Why don't we need to do any specific callback for closing the file descriptor?
> In the case of a socket, I imagine we may want to shut the socket down, for ex.
>   

Since qemu_fopen_fd takes a previously open file descriptor, the 
expectation is that you're going to be able to close it yourself at some 
point.  This worked out fine for the migration code and I think it'll 
also work out okay for other code.  Plus, you would have to add 
callbacks to qemu_fopen_fd() which gets pretty nasty.

>> +
>> +QEMUFile *qemu_fopen_fd(int fd)
>> +{
>> +    QEMUFileFD *s = qemu_mallocz(sizeof(QEMUFileFD));
>>     
>
> can't it fail?
>   

Yeah, I should add error checking.

>> -static QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int64_t offset, int is_writable)
>> +typedef struct QEMUFileBdrv
>> +{
>> +    BlockDriverState *bs;
>> +    int64_t base_offset;
>> +} QEMUFileBdrv;
>>     
>
> Isn't it possible to abstract the differences between bdrv and file so
> to have a common implementation
> between them? Do you think it's worthwhile ?
>   

It's a lot of work.  QEMUFile is optimized to batch short read/write 
operations whereas BlockDriverState is meant to be sector based.  
QEMUFile is also evolving into a stream mechanism where BlockDriver will 
always be random access.

It's certainly possible, but I don't think it's worth it at this stage.

Thanks for the review!

Regards,

Anthony Liguori

  parent reply	other threads:[~2008-09-10 15:17 UTC|newest]

Thread overview: 95+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-09-09 19:49 [PATCH 0/10] Live migration for QEMU Anthony Liguori
2008-09-09 19:49 ` [Qemu-devel] " Anthony Liguori
2008-09-09 19:49 ` [PATCH 1/10] Refactor QEMUFile for live migration Anthony Liguori
2008-09-09 19:49   ` [Qemu-devel] " Anthony Liguori
2008-09-10 13:25   ` Chris Lalancette
2008-09-10 14:38   ` Glauber Costa
2008-09-10 14:38     ` [Qemu-devel] " Glauber Costa
2008-09-10 15:05     ` Avi Kivity
2008-09-10 15:05       ` Avi Kivity
2008-09-10 15:16     ` Anthony Liguori [this message]
2008-09-10 15:16       ` Anthony Liguori
2008-09-12 15:40   ` [Qemu-devel] " Blue Swirl
2008-09-09 19:49 ` [PATCH 2/10] Allow the monitor to be suspended during non-blocking op Anthony Liguori
2008-09-09 19:49   ` [Qemu-devel] " Anthony Liguori
2008-09-10  6:52   ` Avi Kivity
2008-09-10 10:05     ` Daniel P. Berrange
2008-09-10 10:05       ` Daniel P. Berrange
2008-09-10 11:11       ` Avi Kivity
2008-09-10 11:11         ` Avi Kivity
2008-09-10 11:14         ` Daniel P. Berrange
2008-09-10 11:14           ` Daniel P. Berrange
2008-09-10 15:36           ` Avi Kivity
2008-09-10 15:36             ` Avi Kivity
2008-09-10 15:40             ` Anthony Liguori
2008-09-10 15:40               ` Anthony Liguori
2008-09-10 15:58         ` Jamie Lokier
2008-09-10 15:58           ` Jamie Lokier
2008-09-11 10:16           ` Avi Kivity
2008-09-11 11:59             ` Jamie Lokier
2008-09-10 13:07     ` Anthony Liguori
2008-09-10 13:07       ` Anthony Liguori
2008-09-10 13:26     ` Chris Lalancette
2008-09-10 13:26       ` Chris Lalancette
2008-09-10 10:01   ` Daniel P. Berrange
2008-09-10 13:11     ` Anthony Liguori
2008-09-10 13:11       ` Anthony Liguori
2008-09-09 19:49 ` [PATCH 3/10] Add bdrv_flush_all() Anthony Liguori
2008-09-09 19:49   ` [Qemu-devel] " Anthony Liguori
2008-09-10 13:26   ` Chris Lalancette
2008-09-10 13:26     ` [Qemu-devel] " Chris Lalancette
2008-09-10 14:46     ` Glauber Costa
2008-09-10 15:19       ` Anthony Liguori
2008-09-10 15:19         ` Anthony Liguori
2008-09-10 15:32         ` Glauber Costa
2008-09-10 15:32           ` Glauber Costa
2008-09-10 15:39         ` Avi Kivity
2008-09-10 15:39           ` Avi Kivity
2008-09-10 16:37         ` Paul Brook
2008-09-10 16:37           ` Paul Brook
2008-09-12 15:43   ` Blue Swirl
2008-09-09 19:49 ` [PATCH 4/10] Add dirty tracking for live migration Anthony Liguori
2008-09-09 19:49   ` [Qemu-devel] " Anthony Liguori
2008-09-10 14:52   ` Glauber Costa
2008-09-10 14:56     ` Anthony Liguori
2008-09-10 14:56       ` Anthony Liguori
2008-09-10 15:01       ` Glauber Costa
2008-09-10 15:01         ` Glauber Costa
2008-09-09 19:49 ` [PATCH 5/10] Add network announce function Anthony Liguori
2008-09-09 19:49   ` [Qemu-devel] " Anthony Liguori
2008-09-10 13:27   ` Chris Lalancette
2008-09-10 13:54     ` Anthony Liguori
2008-09-10 13:54       ` Anthony Liguori
2008-09-10 14:00     ` Avi Kivity
2008-09-09 19:49 ` [PATCH 6/10] Introduce v3 of savevm protocol Anthony Liguori
2008-09-09 19:49   ` [Qemu-devel] " Anthony Liguori
2008-09-10  7:09   ` Avi Kivity
2008-09-09 19:49 ` [PATCH 7/10] Switch the memory savevm handler to be "live" Anthony Liguori
2008-09-09 19:49   ` [Qemu-devel] " Anthony Liguori
2008-09-09 22:25   ` Jamie Lokier
2008-09-09 22:49     ` Anthony Liguori
2008-09-09 22:49       ` Anthony Liguori
2008-09-10  7:17   ` Avi Kivity
2008-09-10 13:10     ` Anthony Liguori
2008-09-10 13:10       ` Anthony Liguori
2008-09-09 19:50 ` [PATCH 8/10] Introduce a buffered QEMUFile wrapper Anthony Liguori
2008-09-09 19:50   ` [Qemu-devel] " Anthony Liguori
2008-09-12 15:16   ` Blue Swirl
2008-09-09 19:50 ` [PATCH 9/10] Introduce the UI components for live migration Anthony Liguori
2008-09-09 19:50   ` [Qemu-devel] " Anthony Liguori
2008-09-09 19:50 ` [PATCH 10/10] TCP based " Anthony Liguori
2008-09-09 19:50   ` [Qemu-devel] " Anthony Liguori
2008-09-10 16:46   ` Blue Swirl
2008-09-10 16:51     ` Anthony Liguori
2008-09-10 16:51       ` Anthony Liguori
2008-09-11 12:13 ` [Qemu-devel] [PATCH 0/10] Live migration for QEMU Atsushi SAKAI
2008-09-11 13:06   ` Anthony Liguori
2008-09-11 13:30     ` Jamie Lokier
2008-09-11 14:12       ` Anthony Liguori
2008-09-11 14:12         ` Anthony Liguori
2008-09-11 15:32         ` Avi Kivity
2008-09-11 15:32           ` Avi Kivity
2008-09-11 16:22           ` Anthony Liguori
2008-09-11 16:22             ` Anthony Liguori
2008-09-11 16:32             ` Avi Kivity
2008-09-11 16:32               ` Avi Kivity

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=48C7E4E7.7060003@us.ibm.com \
    --to=aliguori@us.ibm.com \
    --cc=chrisw@redhat.com \
    --cc=glommer@gmail.com \
    --cc=kvm@vger.kernel.org \
    --cc=qemu-devel@nongnu.org \
    --cc=uri.lublin@qumranet.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.