Go to main content

Administering TCP/IP Networks, IPMP, and IP Tunnels in Oracle® Solaris 11.3

Exit Print View

Updated: March 2019
 
 

Implementing Traffic Congestion Control

Network congestion typically occurs in the form of router buffer overflows, when nodes send more packets than the network can accommodate. Various algorithms prevent traffic congestion through establishing controls on the sending systems. These algorithms are supported in Oracle Solaris and can be easily added or directly plugged into the OS, as shown in the following table that describes the supported built-in algorithms.

Algorithm
Oracle Solaris Name
Description
NewReno
newreno
Default algorithm in Oracle Solaris. This control mechanism includes a sender's congestion window, slow start, and congestion avoidance.
HighSpeed
highspeed
One of the best known and simplest modifications of NewReno for high-speed networks.
CUBIC
cubic
Currently the default algorithm in Linux 2.6. Changes the congestion avoidance phase from linear window increase to a cubic function.
Vegas
vegas
A classic delay-based algorithm that attempts to predict congestion without triggering actual packet loss.

Congestion control is enabled by setting the following control-related TCP properties. Although these properties are listed for TCP, the control mechanism that is enabled by these properties also applies to SCTP traffic.

cong_enabled

Contains a list of algorithms, separated by commas, that are currently operational on the system. You can add or remove algorithms to enable only those algorithms that you want to use. This property can have multiple values. Therefore you must use either the += qualifier or the -= qualifier, depending on the change that you want to make.

cong_default

Used by default when applications do not specify the algorithms explicitly in socket options. The value of the cong_default property applies to both global and non-global zones.

The following example shows how you would add an algorithm for congestion control to the protocol:

# ipadm set-prop -p cong_enabled+=algorithm tcp

Remove an algorithm as follows:

# ipadm set-prop -p cong_enabled-=algorithm tcp

Replace the default algorithm as follows:

# ipadm set-prop -p cong_default=algorithm tcp

Note -  No sequence rules are followed when you add or remove algorithms. You can remove an algorithm before adding other algorithms to a property. However, the cong_default property must always have a defined algorithm.

The following example shows how you might implement congestion control. In this example, the default algorithm for the TCP protocol is changed from newreno to cubic Then, the vegas algorithm is removed from the list of enabled algorithms.

# ipadm show-prop -p extra_priv_ports tcp
PROTO PROPERTY              PERM CURRENT      PERSISTENT   DEFAULT      POSSIBLE
tcp   extra_priv_ports      rw   2049,4045    --           2049,4045    1-65535

# ipadm show-prop -p cong_default,cong_enabled tcp
PROTO PROPERTY              PERM CURRENT      PERSISTENT   DEFAULT      POSSIBLE
tcp   cong_default          rw   newreno      --           newreno      newreno,cubic,
                                                                        highspeed,vegas
tcp   cong_enabled          rw   newreno,cubic, newreno,cubic, newreno  newreno,cubic,
                                 highspeed,   highspeed,                highspeed,vegas
                                 vegas        vegas

# ipadm set-prop -p cong_enabled-=vegas tcp
# ipadm set-prop -p cong_default=cubic tcp

# ipadm show-prop -p cong_default,cong_enabled tcp
PROTO PROPERTY              PERM CURRENT      PERSISTENT   DEFAULT      POSSIBLE
tcp   cong_default          rw   cubic        cubic        newreno      newreno,cubic,
                                                                        highspeed
tcp   cong_enabled          rw   newreno,cubic, newreno,cubic, newreno  newreno,cubic,
                                 highspeed    highspeed                 highspeed,vegas