Category Archives: TCP

Alexander Leidinger

I just updated to a recent -current and tried the new nullfs. Sockets (e.g. the MySQL one) work now with nullfs. No need to have e.g. jails on the same FS and hardlink the socket to not need to use TCP in MySQL (or an IP at all for the jail).

Great work!

Share

Updated TCP Proposals and FreeBSD

There are a number of proposals for improving TCP performance coming out of Google that have some implications for FreeBSD. These proposals have taken the form of a group of IETF proposals, RFCs, patches to the Linux kernel, and research publications. A nice summary of the different initiatives is available from Lets Make TCP Faster on the Google Code Blog.

TCP Fast Open by Radhakrishnan, Cheng, Chu, Jain, and Raghavan is based on the observation that modern web services are dominated by TCP flows so short that they terminate a few round trips after handshaking. This means that the 3-way TCP handshake is a signi

Summary of Five New TCP Congestion Control Algorithms Project

Grenville Armitage has provided a summary of the completed TCP Congestion Control Algorithms project:

Background

TCP is a crucial part of any modern operating system. FreeBSD's standard "NewReno" congestion control (CC) is not able to fully utilize the high capacity links available today. A range of newer CC algorithms have emerged (and continue to emerge) from the networking research community over the past 15+ years. These include traditional loss-based algorithms (where packet losses indicate network congestion) and delay-based algorithms (where changes in Round Trip Time, RTT, are used to infer network congestion).

However, to date FreeBSD's TCP stack has not had an easy-to-use mechanism for introducing new CC algorithms. In recent years the Centre for Advanced Internet Architectures (CAIA) at Swinburne University of Technology has (with the support of the Cisco University Research Program Fund at Community Foundation Silicon Valley) been developing a range of extensions to the FreeBSD TCP stack. These included a modular framework for adding new CC algorithms and new modular implementations of the existing NewReno algorithm, four other algorithms from the literature (H-TCP, CUBIC, Vegas and HD) and a novel algorithm developed at CAIA (CHD). In mid-2010 the FreeBSD Foundation funded CAIA to complete, tidy up and commit a number of these key enhancements to the FreeBSD TCP stack.

Delivered

Our project, "Five New TCP Congestion Control Algorithms for FreeBSD", has delivered
the following enhancements to FreeBSD's TCP stack:
  • Modular congestion control framework.
  • Khelp (Kernel Helper) and Hhook (Helper Hook) frameworks.
  • Basic Khelp/Hhook (Kernel help/hook) integration with the TCP stack.
  • ERTT (Enhanced Round Trip Time) Khelp module for delay-based TCP algorithms.
  • Modularised implementations of NewReno, CUBIC and HTCP loss-based TCP CC algorithms.
  • Modularised implementations of Vegas, "HD" and "CHD" delay-based TCP CC algorithms.
  • Technical report comparing the computational overhead associated with TCP before and after integrating the new frameworks and modularised NewReno algorithm

Benefits

Each congestion control algorithm is implemented as a loadable kernel module. Algorithms can be selected to suit the application/network characteristics and requirements of the host's installation. The modular CC framework also makes it much easier for developers to implement new algorithms, allowing FreeBSD's TCP to be at the forefront of advancements in this area, while still maintaining the stability of its network stack.

CUBIC and HTCP are variants of TCP that provide significant performance improvements (relative to NewReno) over high bandwidth, high latency paths. Vegas, HD, and CHD utilise RTT fluctuations to provide a more timely indication of network congestion -- by not forcing network queues to overflow, delay-based CC algorithms can help to keep queuing delays low along a network path. CHD is also tolerant of packet losses that are unrelated to congestion (such as can occur over wireless links).

In addition, the Khelp/Hhook frameworks provide useful kernel infrastructure which are not specific to the TCP stack and we anticipate they will be used elsewhere in the kernel in the future to provide other unrelated enhancements to FreeBSD.

Participants

Code development, testing, and documentation: David Hayes and Lawrence Stewart

Editorial review of code and documentation: Rui Paulo and Bjoern Zeeb

Project supervision: Grenville Armitage

Project URL: http://caia.swin.edu.au/freebsd/5cc/

Summary of Five New TCP Congestion Control Algorithms Project

Grenville Armitage has provided a summary of the completed TCP Congestion Control Algorithms project:

Background

TCP is a crucial part of any modern operating system. FreeBSD's standard "NewReno" congestion control (CC) is not able to fully utilize the high capacity links available today. A range of newer CC algorithms have emerged (and continue to emerge) from the networking research community over the past 15+ years. These include traditional loss-based algorithms (where packet losses indicate network congestion) and delay-based algorithms (where changes in Round Trip Time, RTT, are used to infer network congestion).

However, to date FreeBSD's TCP stack has not had an easy-to-use mechanism for introducing new CC algorithms. In recent years the Centre for Advanced Internet Architectures (CAIA) at Swinburne University of Technology has (with the support of the Cisco University Research Program Fund at Community Foundation Silicon Valley) been developing a range of extensions to the FreeBSD TCP stack. These included a modular framework for adding new CC algorithms and new modular implementations of the existing NewReno algorithm, four other algorithms from the literature (H-TCP, CUBIC, Vegas and HD) and a novel algorithm developed at CAIA (CHD). In mid-2010 the FreeBSD Foundation funded CAIA to complete, tidy up and commit a number of these key enhancements to the FreeBSD TCP stack.

Delivered

Our project, "Five New TCP Congestion Control Algorithms for FreeBSD", has delivered
the following enhancements to FreeBSD's TCP stack:
  • Modular congestion control framework.
  • Khelp (Kernel Helper) and Hhook (Helper Hook) frameworks.
  • Basic Khelp/Hhook (Kernel help/hook) integration with the TCP stack.
  • ERTT (Enhanced Round Trip Time) Khelp module for delay-based TCP algorithms.
  • Modularised implementations of NewReno, CUBIC and HTCP loss-based TCP CC algorithms.
  • Modularised implementations of Vegas, "HD" and "CHD" delay-based TCP CC algorithms.
  • Technical report comparing the computational overhead associated with TCP before and after integrating the new frameworks and modularised NewReno algorithm

Benefits

Each congestion control algorithm is implemented as a loadable kernel module. Algorithms can be selected to suit the application/network characteristics and requirements of the host's installation. The modular CC framework also makes it much easier for developers to implement new algorithms, allowing FreeBSD's TCP to be at the forefront of advancements in this area, while still maintaining the stability of its network stack.

CUBIC and HTCP are variants of TCP that provide significant performance improvements (relative to NewReno) over high bandwidth, high latency paths. Vegas, HD, and CHD utilise RTT fluctuations to provide a more timely indication of network congestion -- by not forcing network queues to overflow, delay-based CC algorithms can help to keep queuing delays low along a network path. CHD is also tolerant of packet losses that are unrelated to congestion (such as can occur over wireless links).

In addition, the Khelp/Hhook frameworks provide useful kernel infrastructure which are not specific to the TCP stack and we anticipate they will be used elsewhere in the kernel in the future to provide other unrelated enhancements to FreeBSD.

Participants

Code development, testing, and documentation: David Hayes and Lawrence Stewart

Editorial review of code and documentation: Rui Paulo and Bjoern Zeeb

Project supervision: Grenville Armitage

Project URL: http://caia.swin.edu.au/freebsd/5cc/

Five new TCP Congestion Control Algorithms Project

The FreeBSD Foundation is pleased to announce that Swinburne University's Technology's Centre for Advanced Internet Architectures has been awarded a grant to implement five new TCP congestion control algorithms in FreeBSD.

Correctly functioning congestion control (CC) is crucial to the efficient operation of the Internet and IP networks in general. CC dynamically balances a flow's throughput against the inferred impact on the network, lowering throughput to protect the network as required.

The FreeBSD operating system's TCP stack currently utilizes the defacto standard NewReno loss-based CC algorithm, which has known problems coping with many aspects of modern data networks like lossy or large bandwidth/delay paths. There is significant and ongoing work both in the research community and industry to address CC related problems, with a particular focus on TCP because of its ubiquitous deployment and use.

Swinburne University of Technology's ongoing work with FreeBSD's TCP stack and congestion control implementation has progressively matured. This project aims to refine their prototypes and integrate them into FreeBSD.

The project will conclude in January 2011.

Addendum:

The five protocols are: