100 likes | 183 Views
Data Plane: Per Hop Design. 09/14/05. currentNode. currentNode. playerPtr. playerPtr. newPacketPtr. newPacketPtr. stalePacketPtr. stalePacketPtr. Buffer Structure (old slide 1). parentChildLink. A. B. playerPtr. playerPtr. newPacketPtr. newPacketPtr. stalePacketPtr.
E N D
Data Plane: Per Hop Design 09/14/05
currentNode currentNode playerPtr playerPtr newPacketPtr newPacketPtr stalePacketPtr stalePacketPtr Buffer Structure (old slide 1) parentChildLink
A B playerPtr playerPtr newPacketPtr newPacketPtr stalePacketPtr stalePacketPtr Buffer Structure (old slide 2) D E c The closer to the playerPtr The solid the buffer should be. The closer to the newPacketPtr The more potential skipped packets F G
Per Hop Details P2 P1 P3 newPktPtr P playerPtr app buf Kernel buf C playerPtr newPktPtr
TCP Options (1) • Avoid retransmission timeout of TCP, relay on dup ACKs to detect loss and activate fast retransmission and recovery. • Timeout is long, also will force TCP to go back to slow start phase (cwin=1) • Need 3 Dup ACKs to use fast retrans./recovery. Need enough packet in fly constantly. • Default TCP has Nagel algorithm enabled, kernel will accumulate data to MSS before sending out most of time. Packet count may be low for low stream rate. • TCP_NODELAY option disables that
TCP Options (2) • Keep enough packet in flight: • TCP_NODELAY option allows small packets to be sent immediately (as long as cwin, rwin allows) • If we don’t have enough packet for low bw streams, small keep-alive packets can be sent so we can keep packet count per sec >= C (to be determined) • We tested on various combination of Windows and Linux, and TCP_NODELAY works (50k stream rates, 256bytes per packet, we see every packets sent out immediately with NODELAY, and without this option, packets are sent in MSS)
Keep Alive and Congestion Detection • Keep Alive message can be used to detect various conditions faster: • Now we know lower bound of expected packet count per sec, if receiver side get “much less” than that, something is wrong. • Can be used to detect both “liveness” of the TCP connection and “congestion” (dead can be thought of worst congestion.)
Tp1 Tp2 Tp3 Tp4 Tp5 Tp6 Packet Tran P Inserted keep-alive msg C Tc1 Tc2 Tc3 Tc4
Other Indications of Congestion (1) • From parent side, if the application buff is building up, we know we have congestion. Some simple accounting can calculate the throughput trying to push vs real throughput • But can not see Kernel buffer, when it is big (comparing to stream rate) it takes long to detect that
Other Indications of Congestion (2) • Packet buffer (before sending to player) is shrinking: • This is also a good indication of we have congestion and need to catch up • But it’s harder to pin point where is the problem. (It could be caused by up streams, other parents)