Check out my first novel, midnight's simulacra!

TCP: Difference between revisions

From dankwiki
No edit summary
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
i;i'* http://articles.techrepublic.com.com/5100-10878_11-1050878.html -- "TCP/IP options for high-performance data transmission"
* http://articles.techrepublic.com.com/5100-10878_11-1050878.html -- "TCP/IP options for high-performance data transmission"
* http://www.ussg.iu.edu/hypermail/linux/kernel/0102.0/0943.html -- [[LKML]] thread, "TCP_NOPUSH on FreeBSD, TCP_CORK on Linux"
* http://www.ussg.iu.edu/hypermail/linux/kernel/0102.0/0943.html -- [[LKML]] thread, "TCP_NOPUSH on FreeBSD, TCP_CORK on Linux"
* http://www.irbs.net/internet/postfix/0707/1097.html -- postfix thread, "dkim-milter signing terribly slow with Postfix, but not with sendmail"
* http://www.irbs.net/internet/postfix/0707/1097.html -- postfix thread, "dkim-milter signing terribly slow with Postfix, but not with sendmail"
Line 6: Line 6:
== Portable APIs ==
== Portable APIs ==
* TCP_NODELAY: Disable [[Nagle's algorithm]] (coalescing of small packets until an ACK is received or a retransmission triggered). See the [[Linux APIs#IPPROTO_TCP|Linux APIs]] page for interactions with TCP_CORK on that platform.
* TCP_NODELAY: Disable [[Nagle's algorithm]] (coalescing of small packets until an ACK is received or a retransmission triggered). See the [[Linux APIs#IPPROTO_TCP|Linux APIs]] page for interactions with TCP_CORK on that platform.
 
==Offloading/Coalescing==
LRO/TSO are safe to use on routers and bridges so long as all interfaces involved support the technique.
===LRO===
Large receive offload. Cannot guarantee refragmentation, and thus ought not generally be used on bridges or routers.
===GRO===
Generic receive offload. Generalizes LRO to guarantee possibility of refragmentation, but coalesces a proper subset of packets suitable for LRO.
===TSO===
TCP segmentation offload, also known as TCP Large Send.
===GSO===
Generic segmentation offload, introduced in Linux 2.6.18. Generalizes TSO to guarantee possibility of refragmentation.
==Tuning==
==Tuning==
===TCP auto-tuning on Linux===
===TCP auto-tuning on Linux===
Line 18: Line 27:
* [[FreeBSD APIs#IPPROTO_TCP|FreeBSD's]] TCP socket options
* [[FreeBSD APIs#IPPROTO_TCP|FreeBSD's]] TCP socket options
* [http://linuxgazette.net/135/pfeiffer.html TCP and Linux' Pluggable Congestion Control Algorithms], a 2007 Linux Gazette article by René Pfeiffer
* [http://linuxgazette.net/135/pfeiffer.html TCP and Linux' Pluggable Congestion Control Algorithms], a 2007 Linux Gazette article by René Pfeiffer
* [http://thread.gmane.org/gmane.linux.network/114003 'net: Generic Receive Offload], Herbert Xu 2008-12-12 linux-net post
* [http://www.linuxfoundation.org/collaborate/workgroups/networking/gso GSO], The Linux Foundation
* [http://kerneltrap.org/node/397 Linux: TCP Segmentation Offload], KernelTrap 2002-09-03
[[CATEGORY: Networking]]

Latest revision as of 10:01, 12 July 2011

Portable APIs

  • TCP_NODELAY: Disable Nagle's algorithm (coalescing of small packets until an ACK is received or a retransmission triggered). See the Linux APIs page for interactions with TCP_CORK on that platform.

Offloading/Coalescing

LRO/TSO are safe to use on routers and bridges so long as all interfaces involved support the technique.

LRO

Large receive offload. Cannot guarantee refragmentation, and thus ought not generally be used on bridges or routers.

GRO

Generic receive offload. Generalizes LRO to guarantee possibility of refragmentation, but coalesces a proper subset of packets suitable for LRO.

TSO

TCP segmentation offload, also known as TCP Large Send.

GSO

Generic segmentation offload, introduced in Linux 2.6.18. Generalizes TSO to guarantee possibility of refragmentation.

Tuning

TCP auto-tuning on Linux

TCP auto-tuning on FreeBSD

With TCP send buffer auto scaling and the default values below it supports 20Mbit/s at 100ms and 10Mbit/s at 200ms. Both read and write buffer are auto-sized.

See also