Hello.
I'm studying at the University of Karlsruhe and I'm doing some network
measurements. In conjunction with network drivers for Linux, I'm
experiencing very strange effects.
In my setup I have two PCs each with a EEPro-100 network card in it
connected via an X-link cable. mii-tools says they auto-negotiated a
speed of 100baseTx-FD. Furthermore I have a program which generates UDP
packets at the highest possible speed, simply by looping a
sendto(socket, ...), which should block until a packet is out. What I
want to measure is the maximum output the network card can do. So I'm
sending n packets and divide the time needed for that by n.
This works perfectly for larger packets (>500 bytes). All of them are
being sent out. I'm able to verify this by invoking "ifconfig eth0|grep
TX" and watch the transmitted packets grow by the number of packets I
intended to send (in fact it grows a bit more, because of some
ARP-packets, but that doesn't matter).
But when I set the packet size to say 50 bytes (only data size without
any headers, so on ethernet this would be 102 bytes), something strange
is going on. Now not all of the packets I send to the other network card
are being received. There are leaks of tens of packets at the receiver,
I'm verifying this with tcpdump. Ok, the receiver was just overtaxed, in
the syslog I got "eth0: Abnormal interrupt, status 00000002.". So it
couldn't handle the flood of packets, ok.
BUT: The sender didn't even send all of the packets! "ifconfig eth0|grep
TX" grew only about 40-50% of the value it should! e.g. I sent 10.000
packets, and the TX-counter grew only by 4586, not more. Sometimes I got
even worse results, especially when decreasing the packet size.
I tried several setups on different PCs, sometimes with X-linked network
cards, sometimes with a switch between them. None of them worked. Except
one thing: I tested the same setup described above with other network
card, two noname products with a realtek 8139 chipset (driver module
8139too). And you would have guessed it: That worked! The TX-counter
grew by the correct value, so all packets have been sent out.
And to make the confusion perfect: With forcing the cards to work with
10 MBit/s-FD (with mii-tool), the same strange "packet drops" as with
the EEPro-cards appeared.
Is there anybody out there, who can explain what is going on in network
drivers? What causes these strange effects?
Regards, Elu
--- Eckehardt Luhm, eMail: [email protected]
Try to modify the value of max_interrupt_work , like
-static int max_interrupt_work = 20
+static int max_interrupt_work = 200
maybe helpful :-)
Eckehardt Luhm wrote:
>Hello.
>
>I'm studying at the University of Karlsruhe and I'm doing some network
>measurements. In conjunction with network drivers for Linux, I'm
>experiencing very strange effects.
>
>In my setup I have two PCs each with a EEPro-100 network card in it
>connected via an X-link cable. mii-tools says they auto-negotiated a
>speed of 100baseTx-FD. Furthermore I have a program which generates UDP
>packets at the highest possible speed, simply by looping a
>sendto(socket, ...), which should block until a packet is out. What I
>want to measure is the maximum output the network card can do. So I'm
>sending n packets and divide the time needed for that by n.
>
>This works perfectly for larger packets (>500 bytes). All of them are
>being sent out. I'm able to verify this by invoking "ifconfig eth0|grep
>TX" and watch the transmitted packets grow by the number of packets I
>intended to send (in fact it grows a bit more, because of some
>ARP-packets, but that doesn't matter).
>
>But when I set the packet size to say 50 bytes (only data size without
>any headers, so on ethernet this would be 102 bytes), something strange
>is going on. Now not all of the packets I send to the other network card
>are being received. There are leaks of tens of packets at the receiver,
>I'm verifying this with tcpdump. Ok, the receiver was just overtaxed, in
>the syslog I got "eth0: Abnormal interrupt, status 00000002.". So it
>couldn't handle the flood of packets, ok.
>BUT: The sender didn't even send all of the packets! "ifconfig eth0|grep
>TX" grew only about 40-50% of the value it should! e.g. I sent 10.000
>packets, and the TX-counter grew only by 4586, not more. Sometimes I got
>even worse results, especially when decreasing the packet size.
>
>I tried several setups on different PCs, sometimes with X-linked network
>cards, sometimes with a switch between them. None of them worked. Except
>one thing: I tested the same setup described above with other network
>card, two noname products with a realtek 8139 chipset (driver module
>8139too). And you would have guessed it: That worked! The TX-counter
>grew by the correct value, so all packets have been sent out.
>
>And to make the confusion perfect: With forcing the cards to work with
>10 MBit/s-FD (with mii-tool), the same strange "packet drops" as with
>the EEPro-cards appeared.
>
>Is there anybody out there, who can explain what is going on in network
>drivers? What causes these strange effects?
>
>
>Regards, Elu
>--- Eckehardt Luhm, eMail: [email protected]
>
>-
>To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>the body of a message to [email protected]
>More majordomo info at http://vger.kernel.org/majordomo-info.html
>Please read the FAQ at http://www.tux.org/lkml/
>
_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com
> packets at the highest possible speed, simply by looping a
> sendto(socket, ...), which should block until a packet is out. What I
No. UDP is unreliable. The kernel will discard sender side, receive side and
anywhere else it feels like
Alan