dropping UDP packets on send

Paul Flinders (P.Flinders@ftel.co.uk)
Mon, 12 Feb 2001 15:54:05 +0000


I'm trying to get some rough figures for the sort of performance
I could expect from a load-balancing application whose job would
be to re-direct incomming UDP packets to a set of target systems
(and handle fail-over etc).

To test this I wrote a very simple application that sends UDP packets
out as fast as possible, one which reads them as fast as possible but
does noting except the copy to user space and one which distributes
them reading a packet then sending it on to a destination, doing a round-
robin allocation of destinations.

The sender is as follows

memset(buf, '\0', blocksize);
while (--count >= 0) {
*(unsigned short *)buf = ++seq;
*(unsigned short *)(buf+2) = (unsigned short)lrand48();

if ((r = write(sock, buf, blocksize)) != blocksize)
++write_errs;
}

blocksize is 64

Up to about 1-2,000,000 packets I get about 100,000 packets per second
sent, the reader can keep up, the fowarding application can't - it tops
out at 34,000 packets per second or so (but it's simplistic as I only
want approximate figures - I can think of a couple of ways to improve
it).

If I try to send more than 2,000,000 packets something odd happens
the sender competes faster than expected but it doesn't send all of
the packets as seen by looking at the TX packet count. I don't see
any write failures (i.e write always returns 64 and write_errs is
always zero after the run).

Is this "expected" behaviour or is there a problem?

sender/distributer are running 2.4.1-pre7 on dual-processor PIII 866s
with 1G of PC-133 SDRAM and 3c905b/c ethernet cards (sender has
the "b" but if I swap over and send using the "c" I get the same result).

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://vger.kernel.org/lkml/