[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 07/18] migration: make writes blocking
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH 07/18] migration: make writes blocking |
Date: |
Tue, 30 Oct 2012 08:36:11 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux) |
Juan Quintela <address@hidden> writes:
> Markus Armbruster <address@hidden> wrote:
>> Juan Quintela <address@hidden> writes:
>>
>>> Move all the writes to the migration_thread, and make writings
>>> blocking. Notice that are still using the iothread for everything
>>> that we do.
>> [...]
>>> diff --git a/qemu-sockets.c b/qemu-sockets.c
>>> index cfed9c5..61b6e95 100644
>>> --- a/qemu-sockets.c
>>> +++ b/qemu-sockets.c
>>> @@ -276,9 +276,6 @@ static int inet_connect_addr(struct addrinfo *addr,
>>> bool *in_progress,
>>> return -1;
>>> }
>>> qemu_setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
>>> - if (connect_state != NULL) {
>>> - socket_set_nonblock(sock);
>>> - }
>>> /* connect to peer */
>>> do {
>>> rc = 0;
>>> @@ -732,7 +729,6 @@ int unix_connect_opts(QemuOpts *opts, Error **errp,
>>> connect_state = g_malloc0(sizeof(*connect_state));
>>> connect_state->callback = callback;
>>> connect_state->opaque = opaque;
>>> - socket_set_nonblock(sock);
>>> }
>>>
>>> memset(&un, 0, sizeof(un));
>>
>> Doesn't this break inet_nonblocking_connect() and
>> unix_nonblocking_connect()?
>>
>> In your cover letter, you wrote:
>>
>> Note: Writes has become blocking, and I have to change the "remove"
>> the feature now in qemu-sockets.c. Checked that migration was the
>> only user of that feature. If new users appear, they just need to add
>> the socket_set_nonblock() by hand.
>>
>> Yes, migration-{tcp,unix} are their only users, but if they want a
>> blocking socket now, why not use inet_connect() and unix_connect()?
>>
>> New users can't "just add socket_set_nonblock()". They'd have to add it
>> right where you deleted it: between qemu_socket() and connect(). Else
>> the connect() is blocking.
>
> Grrr.
>
> So, is there any way to make a connection that is non-blocking, but then
> writes are blocking?
Which operations on the migration socket do you need to block, and which
ones do you need not to block?
If connect() should block, use inet_connect() / unix_connect(). The
returned socket will be blocking. You can then switch to non-blocking
mode (and possibly back) at appropriate times.
If connect() should not block, use inet_nonblocking_connect() and so
forth.
- [Qemu-devel] [PATCH 04/18] buffered_file: Move from using a timer to use a thread, (continued)
- [Qemu-devel] [PATCH 04/18] buffered_file: Move from using a timer to use a thread, Juan Quintela, 2012/10/29
- [Qemu-devel] [PATCH 05/18] migration: make qemu_fopen_ops_buffered() return void, Juan Quintela, 2012/10/29
- [Qemu-devel] [PATCH 06/18] migration: stop all cpus correctly, Juan Quintela, 2012/10/29
- [Qemu-devel] [PATCH 02/18] add a version number to ram_list, Juan Quintela, 2012/10/29
- [Qemu-devel] [PATCH 03/18] protect the ramlist with a separate mutex, Juan Quintela, 2012/10/29
- [Qemu-devel] [PATCH 09/18] migration: take finer locking, Juan Quintela, 2012/10/29
- [Qemu-devel] [PATCH 07/18] migration: make writes blocking, Juan Quintela, 2012/10/29
- Re: [Qemu-devel] [PATCH 07/18] migration: make writes blocking, Markus Armbruster, 2012/10/29
- Re: [Qemu-devel] [PATCH 07/18] migration: make writes blocking, Juan Quintela, 2012/10/29
- Re: [Qemu-devel] [PATCH 07/18] migration: make writes blocking, Paolo Bonzini, 2012/10/29
- Re: [Qemu-devel] [PATCH 07/18] migration: make writes blocking,
Markus Armbruster <=
- Re: [Qemu-devel] [PATCH 07/18] migration: make writes blocking, Juan Quintela, 2012/10/30
- Re: [Qemu-devel] [PATCH 07/18] migration: make writes blocking, Markus Armbruster, 2012/10/30
- Re: [Qemu-devel] [PATCH 07/18] migration: make writes blocking, Juan Quintela, 2012/10/30
[Qemu-devel] [PATCH 08/18] migration: remove unfreeze logic, Juan Quintela, 2012/10/29
[Qemu-devel] [PATCH 10/18] buffered_file: Unfold the trick to restart generating migration data, Juan Quintela, 2012/10/29
[Qemu-devel] [PATCH 12/18] buffered_file: unfold buffered_append in buffered_put_buffer, Juan Quintela, 2012/10/29
[Qemu-devel] [PATCH 11/18] buffered_file: don't flush on put buffer, Juan Quintela, 2012/10/29
[Qemu-devel] [PATCH 18/18] ram: optimize migration bitmap walking, Juan Quintela, 2012/10/29
[Qemu-devel] [PATCH 15/18] migration-fd: remove duplicate include, Juan Quintela, 2012/10/29
[Qemu-devel] [PATCH 13/18] savevm: New save live migration method: pending, Juan Quintela, 2012/10/29