#!/bin/bash
#
# NOTE: this script is called on system start
#       automatically from /etc/rc.local
#
# "Chelsio Communications: 10-gigabit Network Adapter Performance Study"
# https://sitola.fi.muni.cz/igrid/images/8/80/Chelsio_10gbe_fujitsu.pdf
# and other sources
#

echo "Optimising TCP parameters..."

# Enable timestamps, window scaling
echo 1 > /proc/sys/net/ipv4/tcp_timestamps
echo 1 > /proc/sys/net/ipv4/tcp_window_scaling

# already enabled by default:
echo 1 > /proc/sys/net/ipv4/tcp_moderate_rcvbuf

# Core settings per socket
echo 16777216 > /proc/sys/net/core/wmem_max
echo 16777216 > /proc/sys/net/core/rmem_max
echo 4194304  > /proc/sys/net/core/rmem_default
echo 4194304  > /proc/sys/net/core/wmem_default
echo 300000   > /proc/sys/net/core/netdev_max_backlog

# TCP buffers 8k 16M 64M
# example: 1.0 Gbps/8 * 100ms delay = 125 MByte)
echo "8192 16777216 67108864" > /proc/sys/net/ipv4/tcp_rmem
echo "8192 16777216 67108864" > /proc/sys/net/ipv4/tcp_wmem
echo "8192"                   > /proc/sys/net/ipv4/tcp_max_syn_backlog

# Tune txqueues
/sbin/ifconfig cx4one txqueuelen 20000
/sbin/ifconfig cx4two txqueuelen 20000
/sbin/ifconfig myrisr txqueuelen 20000

# Discard metrics of old connections:
echo 1 > /proc/sys/net/ipv4/tcp_no_metrics_save

# Just in case:
echo 0 > /proc/sys/net/ipv4/ip_forward

# enable jumbo frames (9000 jumbo, 9600 chelsio mega jumbo)
/sbin/ifconfig cx4one mtu 9000
/sbin/ifconfig cx4two mtu 9000
/sbin/ifconfig myrisr mtu 9000

