[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: |
Juan Quintela |
Subject: |
Re: [Qemu-devel] [PATCH 07/18] migration: make writes blocking |
Date: |
Tue, 30 Oct 2012 09:23:56 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux) |
Markus Armbruster <address@hidden> wrote:
> 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?
connect: not blocking (done on the iothread)
writes: blocking, done in the migration thread.
I think thet socket_set_block() that paolo says is the right solution.
>
> 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.
Thanks, Juan.
- [Qemu-devel] [PATCH 05/18] migration: make qemu_fopen_ops_buffered() return void, (continued)
- [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, 2012/10/30
- Re: [Qemu-devel] [PATCH 07/18] migration: make writes blocking,
Juan Quintela <=
- 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
[Qemu-devel] [PATCH 16/18] memory: introduce memory_region_test_and_clear_dirty, Juan Quintela, 2012/10/29