# /etc/network/interfaces - Optimized for Maximum Throughput on a VMXNET3 Adapter source /etc/network/interfaces.d/* auto lo iface lo inet loopback allow-hotplug ADAPTERNAME iface ADAPTERNAME inet static address PUTADDRESSHERE/32 gateway PUTGATEWAYHERE dns-nameservers PUTGATEWAYHERE mtu 9000 # === Hardware-Level Performance Enhancements === # 1. Max out NIC Ring Buffers post-up ethtool -G $IFACE rx 4096 tx 4096 # 2. Enable All Hardware Offloads post-up ethtool -K $IFACE tx on rx on sg on tso on gso on gro on post-up ethtool -K $IFACE ufo on 2>/dev/null || true post-up ethtool -K $IFACE lro on 2>/dev/null || true # 3. RSS (Receive Side Scaling) - Spread across multiple cores post-up ethtool -L $IFACE combined 16 2>/dev/null || ethtool -L $IFACE rx 16 tx 16 2>/dev/null || true # 4. Interrupt Coalescing - Balance between latency and throughput post-up ethtool -C $IFACE adaptive-rx off adaptive-tx off 2>/dev/null || true post-up ethtool -C $IFACE rx-usecs 50 tx-usecs 50 2>/dev/null || true # 5. Enable flow control to prevent drops post-up ethtool -A $IFACE rx on tx on 2>/dev/null || true # 6. Spread NIC IRQs across available CPUs post-up for IRQ in $(grep $IFACE /proc/interrupts | awk -F: '{print $1}' | sed 's/ //g'); do CPU_IDX=$((${CPU_IDX:-0})); CPU_MASK=$(printf "%x" $((1 << CPU_IDX))); echo $CPU_MASK > /proc/irq/$IRQ/smp_affinity 2>/dev/null; CPU_IDX=$(((CPU_IDX + 1) % $(nproc))); done # 7. Enable RPS (Receive Packet Steering) - all CPUs post-up RPS_MASK=$(printf "%x" $(((1 << $(nproc)) - 1))); for RX in /sys/class/net/$IFACE/queues/rx-*/rps_cpus; do echo $RPS_MASK > $RX 2>/dev/null; done # 8. Enable RFS (Receive Flow Steering) post-up echo 32768 > /proc/sys/net/core/rps_sock_flow_entries 2>/dev/null post-up RX_COUNT=$(ls -d /sys/class/net/$IFACE/queues/rx-* 2>/dev/null | wc -l); for RX in /sys/class/net/$IFACE/queues/rx-*/rps_flow_cnt; do echo $((32768 / RX_COUNT)) > $RX 2>/dev/null; done # 9. Disable irqbalance for manual IRQ control post-up systemctl stop irqbalance 2>/dev/null || true post-up systemctl disable irqbalance 2>/dev/null || true # 10. Increase TX queue length post-up ip link set $IFACE txqueuelen 10000