From: Tim Brecht <brecht@cs.uwaterloo.ca>
To: Andi Kleen <andi@firstfloor.org>
Cc: Elad Lahav <elahav@cs.uwaterloo.ca>,
Elad Lahav <elahav@uwaterloo.ca>,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org
Subject: Re: [PATCH] Implementation of the sendgroup() system call
Date: Wed, 6 May 2009 07:25:34 -0400 (EDT) [thread overview]
Message-ID: <Pine.GSO.4.64.0905060714020.880@services108.cs.uwaterloo.ca> (raw)
In-Reply-To: <20090504145046.GI23223@one.firstfloor.org>
On Mon, 4 May 2009, Andi Kleen wrote:
> On Mon, May 04, 2009 at 09:44:31AM -0400, Elad Lahav wrote:
>>> My guess it's more the copies than the calls?
>> It's a factor of both. This is why we also created the sendgroup()
>> implementation that uses a tight loop of in-kernel calls to sendmsg()
>> as a means for evaluating the cost of mode switches. It is definitely
>> not negligible (exact numbers depend on the size of the group and the
>> size of the payload, of course).
>
> How much is non negligible in your case?
As you can see from Elad's posting it can be pretty
significant.
>>
>>> It sounds like you want sendfile() for UDP.
>> Do you mean by having a per-recipient sendfile() call for the same
>> file? Leaving the cost of the system call aside, this solution does
>> not work well with the kind of real-time data that we've been working
>> with (live streaming, online games). You would have to write the
>> payload to the file as it is being generated and call sendfile() after
>> each such write.
>
> You can mmap the file.
There are a few problem with using mmap and sendfile:
1) One would really want something like sendfilev where
one could specify multiple recipients in one syscall
(in order to save on the mode switches).
2) I don't know what it would be like for UDP but for
TCP one of the big problems with mmap/sendfile
for zero copy is that the application
doesn't know when the kernel has finished sending
the data. As a result one can only reuse the mmapped buffer
if there is some way for the application to deduce
that the kernel is finished sending the data.
Even if the application can deduce this it can
often be long after the kernel has sent the data
and as a result memory buffers can accumulate
unnecessarily. We've had this problem trying to use
this approach in a high-performance web server.
3) I think that including recipient specific data
would be cumbersome and would probably require extra
system calls. Possibly
write(for prepend)
sendfile(for common)
write(for append)
Unless one copies the common data into prestaged
areas in user space ... which results in the copying
we are trying to avoid.
Perhaps if writev was able to
write from an mmapped file with zero copies,
a single recipient could be sent recipient
specific and common data with one system call.
However, this approach would still require one system
call per recipient.
next prev parent reply other threads:[~2009-05-06 12:08 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-04 1:40 Elad Lahav
2009-05-04 7:13 ` Andi Kleen
2009-05-04 7:30 ` Avi Kivity
2009-05-04 9:53 ` Andi Kleen
2009-05-04 9:56 ` Eric Dumazet
2009-05-04 10:18 ` Andi Kleen
2009-05-04 9:58 ` Avi Kivity
2009-05-04 7:42 ` Rémi Denis-Courmont
2009-05-04 13:44 ` Elad Lahav
2009-05-04 14:50 ` Andi Kleen
2009-05-05 0:24 ` Elad Lahav
2009-05-06 11:25 ` Tim Brecht [this message]
2009-05-04 7:43 ` Eric Dumazet
2009-05-04 9:03 ` Eric Dumazet
2009-05-04 13:32 ` Elad Lahav
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=Pine.GSO.4.64.0905060714020.880@services108.cs.uwaterloo.ca \
--to=brecht@cs.uwaterloo.ca \
--cc=andi@firstfloor.org \
--cc=elahav@cs.uwaterloo.ca \
--cc=elahav@uwaterloo.ca \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
/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
all inboxes | Powered by JetHome®