a client-based congestion manager for TCP

Registered by LPC Submitter on 2012-05-16

This session is scheduled with "Linux Kernel implementation of Multipath TCP":
https://blueprints.launchpad.net/lpc/+spec/lpc2012-net-multipath-tcp

Abstract: Today, one of the most effective ways to improve the performance of chatty applications is to keep TCP connection open as long as possible to save the overhead of SYN exchange and slow start on later requests. However, due to Web domain sharing, NAT boxes often run out of ports or other resources and resort to dropping connections in ways that make later connections even slower to start.

A better solution would be to enable TCP to start a new connection as quickly as restarting an idle connection. The approach is to have a congestion manager (CM) on the client that constantly learns about the network and adds some signaling information to requests from the client, indicating how the server can reply most quickly, for example by providing TCP metrics similar to today's destination cache. Such a CM could even indicate to the server what type of congestion control to use, such as the relentless congestion control algorithm such that opening more connections does not gain advantage on aggregate throughput. It also allows receiver-based congestion control which opens new possibilities to control congestion. The Linux TCP metrics have similar concept but there is a lot of room for improvement.

Topic Lead: Yuchung Cheng <email address hidden>
Yuchung Cheng is a software engineer at Google working on the Make-The-Web-Faster project. He works on the TCP protocol and the Linux TCP stack focusing on latency. He has contributed Fast Open, Proportional Rate Reduction, Early Retransmit implementation in Linux kernel and wrote a few papers and IETF drafts of them. He has also contributed to rate-limiting Youtube streaming and the cwnd-persist feature of the SPDY protocol.

Blueprint information

Status:
Not started
Approver:
None
Priority:
Undefined
Drafter:
None
Direction:
Needs approval
Assignee:
None
Definition:
New
Series goal:
None
Implementation:
Unknown
Milestone target:
None

Related branches

Sprints

Whiteboard

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.