Nir Dremer wrote:
thanks for bringing me the bad news :)
what i described is actually half of the problem.
a small history lesson:
i had a sending application that send to multiple destinations udp
packets.
due to timing accuracy request I've added packet timing sending based
on /dev/rtc.
now what happens is that I'm sending small packets (1.5k) very
frequently to each destination and i have many destinations with
different content to send.
1.5k isn't exactly small. 1500 bytes is the largest ethernet frame you
can have without enabling jumbo frames. That rules out user space
coalescing.
The long term solution is moving to kernel space almost completely.
for now i need a solution to do one of the following:
- batch sendto that performs sendto to different destinations different
contents.
- sendto that receives big data chunk and cut it to pieces and send it
with the accuracy i need.
- somehow using sendfile and somehow have accuracy in sending.
what do you say?
Well I suppose that you could create a new protocol family in a module
that accepts as its data pointer a huge buffer that contained metadata
which deliniated all of the individual packets. You protocol would
actually just at that point be a wrapper around the udp protocol which
did nothing but split up the large buffer into sendable buffers based on
the metadata. Its horribly ugly, but I imagine it would work.
On Mon, 2004-12-20 at 14:50 -0500, Neil Horman wrote:
Nir Dremer wrote:
Due to the fact that the sending content is not static i can't use sendfile.
Is there a way to merge differenent sendto with different targets to one
system call?
Different targets, as in different ip destinations for each datagram?
That puts you out of luck in my mind I'm afraid.
if there's no ready-made solution, I would be glad for design
suggestions of such a wrapper kernel module.
if you can pick off data bound for the same destination, you can
coalesce them in userspace from within your app, and only call sendto
after a certain data threshold is reached. That would reduce your
sendto overhead somewhat. Other than that, I think you're out of luck.
Neil
thanks
On Mon, 2004-12-20 at 13:07 -0500, Neil Horman wrote:
Nir Dremer wrote:
I'm looking for a way to perform several SendTo command from user-space
in one system call.. is there any way to do so?
The purpose is to avoid the system call overhead due to the massive use
of SendTo in my code.
any help will be appreciated...
(copy of the message sent to c-programming mailing list)
Cheers,
Nir Dremer
----------------------------------------------------------------------------------------
"Real leaders are ordinary people with extraordinary determinations."
-- John Seaman Garns
-
: send the line "unsubscribe linux-net" in
the body of a message to majordomo@xxxxxxxxxxxxxxx <mailto:majordomo@xxxxxxxxxxxxxxx>
More majordomo info at http://vger.kernel.org/majordomo-info.html
Dependent on your needs and flexibility in writing your application, the
sendfile() call might help you out some.
Neil
--
/***************************************************
*Neil Horman
*Software Engineer
*Red Hat, Inc.
*nhorman@xxxxxxxxxx
*gpg keyid: 1024D / 0x92A74FA1
*http://pgp.mit.edu
***************************************************/
-
: send the line "unsubscribe linux-net" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html