android_kernel_samsung_msm8976/Documentation
Eric Dumazet 5e25ba5003 tcp: TSO packets automatic sizing
[ Upstream commits 6d36824e730f247b602c90e8715a792003e3c5a7,
  02cf4ebd82ff0ac7254b88e466820a290ed8289a, and parts of
  7eec4174ff29cd42f2acfae8112f51c228545d40 ]

After hearing many people over past years complaining against TSO being
bursty or even buggy, we are proud to present automatic sizing of TSO
packets.

One part of the problem is that tcp_tso_should_defer() uses an heuristic
relying on upcoming ACKS instead of a timer, but more generally, having
big TSO packets makes little sense for low rates, as it tends to create
micro bursts on the network, and general consensus is to reduce the
buffering amount.

This patch introduces a per socket sk_pacing_rate, that approximates
the current sending rate, and allows us to size the TSO packets so
that we try to send one packet every ms.

This field could be set by other transports.

Patch has no impact for high speed flows, where having large TSO packets
makes sense to reach line rate.

For other flows, this helps better packet scheduling and ACK clocking.

This patch increases performance of TCP flows in lossy environments.

A new sysctl (tcp_min_tso_segs) is added, to specify the
minimal size of a TSO packet (default being 2).

A follow-up patch will provide a new packet scheduler (FQ), using
sk_pacing_rate as an input to perform optional per flow pacing.

This explains why we chose to set sk_pacing_rate to twice the current
rate, allowing 'slow start' ramp up.

sk_pacing_rate = 2 * cwnd * mss / srtt

v2: Neal Cardwell reported a suspect deferring of last two segments on
initial write of 10 MSS, I had to change tcp_tso_should_defer() to take
into account tp->xmit_size_goal_segs

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Neal Cardwell <ncardwell@google.com>
Cc: Yuchung Cheng <ycheng@google.com>
Cc: Van Jacobson <vanj@google.com>
Cc: Tom Herbert <therbert@google.com>
Acked-by: Yuchung Cheng <ycheng@google.com>
Acked-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-11-04 04:30:59 -08:00
..
ABI - Lots of cleanups from Artem, including deletion of some obsolete drivers 2013-05-09 10:15:46 -07:00
DocBook media: DocBook: upgrade media_api DocBook version to 4.2 2013-09-26 17:18:20 -07:00
EDID drm: Add 1600x1200 (UXGA) screen resolution to the built-in EDIDs 2013-04-12 14:06:16 +10:00
PCI
RCU Merge commit '8700c95adb03' into timers/nohz 2013-05-02 17:54:19 +02:00
accounting
acpi Merge branch 'for-linus' of git://git.infradead.org/users/vkoul/slave-dma 2013-05-09 09:46:45 -07:00
aoe
arm ARM: platform specific firmware interfaces for 3.10 2013-05-04 12:33:36 -07:00
arm64
auxdisplay
backlight backlight: lp855x: remove duplicate platform data 2013-04-29 18:28:19 -07:00
blackfin
block Documentation: cfq-iosched: update documentation help for cfq tunables 2013-04-09 14:57:06 +02:00
blockdev nbd: update documentation and link to mailinglist 2013-02-27 19:10:22 -08:00
bus-devices
cdrom
cgroups mm, memcg: add rss_huge stat to memory.stat 2013-05-07 18:38:26 -07:00
connector
console
cpu-freq Merge branch 'timers-nohz-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2013-05-05 13:23:27 -07:00
cpuidle cpuidle: make a single register function for all 2013-04-23 13:45:22 +02:00
cris
crypto
development-process
device-mapper DM RAID: Add message/status support for changing sync action 2013-04-24 11:42:43 +10:00
devicetree Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media 2013-06-18 06:25:08 -10:00
driver-model
dvb
early-userspace
extcon
fault-injection
fb
filesystems xfs: disable noattr2/attr2 mount options for CRC enabled filesystems 2013-06-06 10:51:34 -05:00
firmware_class
frv
hid
hwmon hwmon: (k10temp) Add support for Fam16h (Kabini) 2013-09-07 22:09:59 -07:00
i2c i2c-piix4: Add AMD CZ SMBus device ID 2013-07-25 14:07:28 -07:00
i2o
ia64 Fix example error_injection_tool 2013-04-02 09:39:55 -07:00
ide
infiniband
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2013-03-11 07:49:37 -07:00
ioctl USB: cdc-wdm: implement IOCTL_WDM_MAX_COMMAND 2013-03-25 13:32:20 -07:00
isdn
ja_JP
kbuild Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2013-05-07 07:59:19 -07:00
kdump Add size restriction to the kdump documentation 2013-04-02 09:40:03 -07:00
ko_KR
laptops
leds leds: lp55xx: configure the clock detection 2013-04-01 11:04:53 -07:00
m68k block: remove refs to XD disks from documentation 2013-05-17 15:17:12 +02:00
make
memory-devices
metag metag: Basic documentation 2013-03-02 20:09:50 +00:00
mips
misc-devices mei: bus: Add device enabling and disabling API 2013-04-08 16:57:15 -07:00
mmc mmc: core: Add in support to expose PRV for v4 MMCs 2013-03-22 12:10:42 -04:00
mn10300
mtd
namespaces
netlabel
networking tcp: TSO packets automatic sizing 2013-11-04 04:30:59 -08:00
nfc
parisc parisc: document the shadow registers 2013-07-21 18:21:26 -07:00
pcmcia
power PM / hibernate: Correct documentation 2013-05-14 01:58:43 +02:00
powerpc powerpc/tm: Fix userspace stack corruption on signal delivery for active transactions 2013-06-01 08:29:23 +10:00
pps
prctl
pti
ptp
rapidio rapidio: documentation update for enumeration changes 2013-05-24 16:22:50 -07:00
s390 s390/cio: add condev keyword to cio_ignore 2013-05-02 15:50:20 +02:00
scheduler
scsi [SCSI] qla2xxx: Update copyright dates information in LICENSE.qla2xxx file. 2013-04-06 11:31:30 +01:00
security Smack: add support for modification of existing rules 2013-03-19 14:16:42 -07:00
serial
sh
sound ALSA: hda - Add models for Dell headset jacks 2013-06-17 11:15:56 +02:00
spi
sysctl mm: replace hardcoded 3% with admin_reserve_pages knob 2013-04-29 15:54:36 -07:00
target
thermal Thermal: update documentation for thermal_zone_device_register 2013-04-27 09:16:04 +08:00
timers nohz_full: Add documentation. 2013-04-27 16:41:43 -07:00
trace Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2013-04-30 09:36:50 -07:00
usb USB: remove CONFIG_USB_SUSPEND from Documentation 2013-03-28 14:45:56 -07:00
vDSO
video4linux [media] v4l2: Add a V4L2 driver for SI476X MFD 2013-04-18 21:20:34 -03:00
virtual Merge tag 'kvm-3.10-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm 2013-05-05 14:47:31 -07:00
vm mm: limit growth of 3% hardcoded other user reserve 2013-04-29 15:54:36 -07:00
w1 w1: w1_therm: Add force-pullup option for "broken" sensors 2013-02-18 13:55:24 -08:00
watchdog watchdog: core: dt: add support for the timeout-sec dt property 2013-03-01 12:48:36 +01:00
wimax
x86 Merge branch 'x86-debug-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2013-04-30 08:35:20 -07:00
xtensa xtensa: document MMUv3 setup sequence 2013-05-09 01:07:09 -07:00
zh_CN gpio: update gpio Chinese documentation 2013-04-16 18:47:22 +09:00
.gitignore
00-INDEX ImgTec Meta architecture changes for v3.9-rc1 2013-03-03 12:06:09 -08:00
BUG-HUNTING
Changes
CodingStyle
DMA-API-HOWTO.txt Documentation/DMA-API-HOWTO.txt: fix typo 2013-02-27 19:10:23 -08:00
DMA-API.txt
DMA-ISA-LPC.txt
DMA-attributes.txt
HOWTO
IPMI.txt ipmi: add options to disable openfirmware and PCI scanning 2013-02-27 19:10:21 -08:00
IRQ-affinity.txt
IRQ-domain.txt
IRQ.txt
Intel-IOMMU.txt
Makefile
ManagementStyle
SAK.txt
SM501.txt
SecurityBugs
SubmitChecklist
SubmittingDrivers
SubmittingPatches checkpatch: add Suggested-by as a standard signature 2013-04-29 18:28:20 -07:00
VGA-softcursor.txt
applying-patches.txt
atomic_ops.txt
bad_memory.txt
basic_profiling.txt
bcache.txt bcache: clarify free/available/unused space 2013-05-15 00:42:52 -07:00
binfmt_misc.txt
braille-console.txt
bt8xxgpio.txt
btmrvl.txt
bus-virt-phys-mapping.txt
cachetlb.txt
circular-buffers.txt
clk.txt clk: add clk_ignore_unused option to keep boot clocks on 2013-04-27 23:03:43 -07:00
coccinelle.txt Coccinelle: Add support to the SPFLAGS variable 2013-04-08 15:42:03 +02:00
cpu-hotplug.txt
cpu-load.txt
cputopology.txt
crc32.txt
dcdbas.txt
debugging-modules.txt
debugging-via-ohci1394.txt
dell_rbu.txt
devices.txt block: remove refs to XD disks from documentation 2013-05-17 15:17:12 +02:00
digsig.txt
dma-buf-sharing.txt dma-buf: replace dma_buf_export() with dma_buf_export_named() 2013-05-01 16:35:36 +05:30
dmaengine.txt
dmatest.txt dmatest: do not allow to interrupt ongoing tests 2013-06-08 02:13:44 +05:30
dontdiff
dynamic-debug-howto.txt
edac.txt
eisa.txt
email-clients.txt
flexible-arrays.txt
futex-requeue-pi.txt
gcov.txt
gpio.txt Remove GENERIC_GPIO config option 2013-04-16 18:47:19 +09:00
highuid.txt
hw_random.txt hwrng: Fix a wrong comment in Documentation/hw_random.txt 2013-03-10 18:16:36 +08:00
hwspinlock.txt
init.txt
initrd.txt
intel_txt.txt
io-mapping.txt
io_ordering.txt
iostats.txt iostats.txt: add easy-to-find description for field 6 2013-04-29 15:18:50 +02:00
irqflags-tracing.txt
isapnp.txt
java.txt
kernel-doc-nano-HOWTO.txt
kernel-docs.txt
kernel-parameters.txt Merge branch 'for-linus' of git://git.kernel.dk/linux-block 2013-06-12 16:42:39 -07:00
kernel-per-CPU-kthreads.txt kthread: Document ways of reducing OS jitter due to per-CPU kthreads 2013-04-27 16:52:47 -07:00
kmemcheck.txt
kmemleak.txt
kobject.txt
kprobes.txt
kref.txt
ldm.txt
local_ops.txt
lockdep-design.txt
lockstat.txt locking/stat: Fix a typo 2013-02-19 08:42:37 +01:00
lockup-watchdogs.txt
logo.gif
logo.txt
magic-number.txt wanrouter: completely decouple obsolete code from kernel. 2013-01-31 19:20:33 -05:00
md.txt MD: Fix typos in MD documentation 2013-04-24 11:42:42 +10:00
media-framework.txt [media] Documentation/media-framework.txt: fix a sentence 2013-02-08 13:27:13 -02:00
memory-barriers.txt
memory-hotplug.txt
mono.txt
mutex-design.txt
nommu-mmap.txt
numastat.txt
oops-tracing.txt
padata.txt
parport-lowlevel.txt
parport.txt
percpu-rw-semaphore.txt
pi-futex.txt
pinctrl.txt pinctrl: document the "GPIO mode" pitfall 2013-03-18 11:03:29 +01:00
pnp.txt
preempt-locking.txt
printk-formats.txt Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2013-04-30 13:47:37 -07:00
pwm.txt
ramoops.txt
rbtree.txt
remoteproc.txt
rfkill.txt
robust-futex-ABI.txt
robust-futexes.txt
rpmsg.txt
rt-mutex-design.txt
rt-mutex.txt
rtc.txt
serial-console.txt
sgi-ioc4.txt
sgi-visws.txt
smsc_ece1099.txt
sparse.txt
spinlocks.txt
stable_api_nonsense.txt
stable_kernel_rules.txt
static-keys.txt
svga.txt
sysfs-rules.txt
sysrq.txt Documentation/sysrq: fix inconstistent help message of sysrq key 2013-04-30 17:04:10 -07:00
this_cpu_ops.txt percpu: add documentation on this_cpu operations 2013-04-04 10:24:53 -07:00
unaligned-memory-access.txt
unicode.txt
unshare.txt
vfio.txt
vgaarbiter.txt
video-output.txt
vme_api.txt
volatile-considered-harmful.txt
workqueue.txt
xz.txt
zorro.txt