UDP packets over Gbe

Goi

Diamond Member
Oct 10, 1999
6,771
7
91
Hi,

I'm wondering what are the rates of dropped packets for high bandwidth UDP data transfer between a point to point Gbe link, i.e. 2 machines joined by a direct Gbe connection with no routers/etc.

Is it high enough that some sort of timeout/window size/ack/nak protocol needs to be implemented?

Thanks.
 

V00D00

Golden Member
May 25, 2003
1,834
0
0
depends on the connection and the systems. If it's a straight computer to computer connection there should be very little packet loss. You never know until you try it though.
 

Garion

Platinum Member
Apr 23, 2001
2,331
7
81
It's really not about packet loss, it's about the performance of the two machines exchanging the data. Since UDP is connectionless, there's no acknowledgement of the packets being received by the remote computer (unlike TCP where there are acks for packets that are received). With UDP, you just hope things get there and that the receiving computer can keep up.

With 100BaseT, it wasn't that big of a deal, but now that you can blast packets across at 1Gb/s, you could be putting more of a strain on your receiving computer, unless it's slower than the sending one. UDP is more sensitive to this than other protocols as there's no built in wait for an ack packet ("Hey, wait a second and let me catch up here!")

With UDP, there ARE no window sizes acks/nacks, etc. to tune. It's just dump-and-run. You usually see UDP in places where the application itself can handle error correction and retransmission of data that might have gotten hosed during transit. UDP can be quite fast if your program is well-written and your network is VERY CLEAN. You get any network problems (out of order packets, dropped packets. long latency, etc.) and TCP is better.

Good thoughts:

Use Jumbo frames if you can - They will transfer faster and generate less CPU load due to the decreased number of interrupts.

If you run into problems, start small and work your way up to see how hard you can push it. If things seem to slow down on larger files, watch the network monitor and CPU monitors in the task manager to see how your systems are performing.

Hope that the guy who wrote the app knew what he was doing.

- G

 

Goi

Diamond Member
Oct 10, 1999
6,771
7
91
Well, this is going to be a couple of really fast(typically quad operons, or at least dual P4s) multi-processor client connected to an equally fast(quad opteron) server, each with a dedicated Gbe link to the server(direct, no routers) to PCI-X Gbe cards. The data on the clients will be generated at over 100Mbps(basically uncompressed video frames), and these will be directly piped to the server via the Gbe link. No disk writes will happen, and the memory bandwidth should be sufficient for all simultaneous transactions.

I know that UDP has no window sizes/etc, which is why I'm wondering if the application has to implement that for error correction if UDP was used. If not, any packets that the clients send but don't make it to the server won't be recoverable right?

Correct me if I'm wrong, but if we have a point to point connection with no routing at all, then are the following statements true?
1) There will never be packet collisions since one packet is sent at a time, from point A to point B directly
2) There will never be duplicate packets
3) There will never be out of order packets(i.e. a jump from packet with sequence number n to say n+2 will mean 1 dropped packet exactly, and packet n+1 will never arrive later than packet n+2)

I'm trying to see if I can take advantage of these assumptions to implement a simpler, faster kind of error recovery mechanism.
 

V00D00

Golden Member
May 25, 2003
1,834
0
0
If you have gigabit hardware that is all up to gigabit specification, and the computers have a lot of ram to store all the incoming data you should be fine.
 

spidey07

No Lifer
Aug 4, 2000
65,469
5
76
Originally posted by: V00D00
If you have gigabit hardware that is all up to gigabit specification, and the computers have a lot of ram to store all the incoming data you should be fine.

well yes and no.

At that point it is a question of buffers and can the receiver "keep up". Looks like a fast enought bus.

It would be an interesting test.

I believe it was brought up that UDP from a transport layer doesn't do windowing/acks. But most times the application layer does. So if packets are lost they are retransmitted.
 

Goi

Diamond Member
Oct 10, 1999
6,771
7
91
Yes I understand that. I'm developing the application layer, which is why I asked. If I just do sequential sendto() and recvfrom() calls I'm afraid I'll lose some packets, I just wanna find out what kinda data loss I should be expecting, so I know what kind of error recovery I'll need to implement.
 

Haden

Senior member
Nov 21, 2001
578
0
0
Are you sure you don't want to use TCP?
I've reached ~900mbps with more modest hardware than one you will use.