From: Paolo Bonzini <pbonzini@redhat.com>
To: Stefan Hajnoczi <stefanha@gmail.com>, Max Reitz <mreitz@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>, Fam Zheng <famz@redhat.com>,
qemu-devel@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [RFC 3/5] nbd: Use aio_set_fd_handler2()
Date: Wed, 04 Jun 2014 20:02:06 +0200 [thread overview]
Message-ID: <538F5F1E.4050706@redhat.com> (raw)
In-Reply-To: <20140604123748.GD11073@stefanha-thinkpad.redhat.com>
Il 04/06/2014 14:37, Stefan Hajnoczi ha scritto:
> Why is this design cleaner? Because NBD code doesn't have to worry
> about fd handlers. It uses straightforward coroutine send/recv for
> socket I/O inside nbd_read_req() and nbd_write_resp(). It's easy to see
> that only one coroutine receives from the socket and that only one
> coroutine writes to the socket.
I don't understand how this would work without managing fd handlers.
- If you don't want to receive anything (because you reached the maximum
queue depth), and the client sends something, the read handler will busy
wait. The current code solves it with can_read; you could do it by
enabling or disabling the read handler as you need, but the idea is the
same.
- If you're not sending anything, a socket that has a write handler will
have POLLOUT continuously signaled and again you'd busy wait. Since
there is no can_write, nbd.c instead enables/disables the write handler
around nbd_co_send_reply.
Removing can_read from the NBD server is simpler than Max's patch 2, so
that's what I suggest.
The NBD server code uses a coroutine per request. Using one coroutine
per direction is nice, but doesn't avert the need to manage fd handlers.
Basically, it boils down to select(2) being level-triggered. If it were
edge-triggered, of course you could have other bugs but you probably
could write network code without managing fd handlers.
Paolo
next prev parent reply other threads:[~2014-06-04 18:02 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1401561792-13410-1-git-send-email-mreitz@redhat.com>
2014-06-03 14:38 ` [Qemu-devel] [RFC 0/5] nbd: Adapt for dataplane Stefan Hajnoczi
2014-06-05 17:41 ` Max Reitz
[not found] ` <1401561792-13410-2-git-send-email-mreitz@redhat.com>
2014-06-04 11:52 ` [Qemu-devel] [RFC 1/5] nbd: Correct name comparison for export_set_name() Stefan Hajnoczi
2014-06-05 17:28 ` Max Reitz
[not found] ` <1401561792-13410-3-git-send-email-mreitz@redhat.com>
2014-06-03 17:55 ` [Qemu-devel] [RFC 2/5] aio: Add io_read_poll() callback Paolo Bonzini
2014-06-05 17:29 ` Max Reitz
2014-06-04 11:59 ` Stefan Hajnoczi
[not found] ` <1401561792-13410-4-git-send-email-mreitz@redhat.com>
2014-06-04 12:37 ` [Qemu-devel] [RFC 3/5] nbd: Use aio_set_fd_handler2() Stefan Hajnoczi
2014-06-04 18:02 ` Paolo Bonzini [this message]
2014-06-05 8:12 ` Stefan Hajnoczi
2014-06-05 9:27 ` Paolo Bonzini
2014-06-05 13:32 ` Stefan Hajnoczi
2014-06-05 18:18 ` Max Reitz
2014-06-06 7:44 ` Paolo Bonzini
2014-06-07 19:27 ` Max Reitz
2014-06-09 13:35 ` Stefan Hajnoczi
[not found] ` <1401561792-13410-5-git-send-email-mreitz@redhat.com>
2014-06-04 12:41 ` [Qemu-devel] [RFC 4/5] block: Add AIO followers Stefan Hajnoczi
2014-06-05 17:31 ` Max Reitz
[not found] ` <538A3A8F.3060508@redhat.com>
2014-06-04 12:47 ` [Qemu-devel] [RFC 0/5] nbd: Adapt for dataplane Stefan Hajnoczi
2014-06-04 12:50 ` Stefan Hajnoczi
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=538F5F1E.4050706@redhat.com \
--to=pbonzini@redhat.com \
--cc=famz@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.com \
--cc=stefanha@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).