Re: Massive SendTo

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux 802.1Q VLAN]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Git]     [Bugtraq]     [Yosemite News and Information]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux PCI]     [Linux Admin]     [Samba]

  Powered by Linux