sysctl net.core.rmem_default
sysctl net.core.rmem_max
sysctl net.core.rmem_default
sysctl net.core.rmem_max
sysctl net.core.rmem_default
sysctl net.core.rmem_max
ethtool -S eth0 | grep -i drop
netstat -su | grep "packet receive errors"
ethtool -S eth0 | grep -i drop
netstat -su | grep "packet receive errors"
ethtool -S eth0 | grep -i drop
netstat -su | grep "packet receive errors"
# Don't do this
while True: data = sock.recvfrom(65535) process(data) # If this is slow, packets pile up # Do this instead
import queue, threading packet_queue = queue.Queue(maxsize=10000) def receiver(): while True: data = sock.recvfrom(65535) packet_queue.put(data) def processor(): while True: data = packet_queue.get() process(data)
# Don't do this
while True: data = sock.recvfrom(65535) process(data) # If this is slow, packets pile up # Do this instead
import queue, threading packet_queue = queue.Queue(maxsize=10000) def receiver(): while True: data = sock.recvfrom(65535) packet_queue.put(data) def processor(): while True: data = packet_queue.get() process(data)
# Don't do this
while True: data = sock.recvfrom(65535) process(data) # If this is slow, packets pile up # Do this instead
import queue, threading packet_queue = queue.Queue(maxsize=10000) def receiver(): while True: data = sock.recvfrom(65535) packet_queue.put(data) def processor(): while True: data = packet_queue.get() process(data) - UDP gives you speed but zero safety net. If you choose UDP, you own reliability.
- Always instrument your packet counts. Send-side count vs. receive-side count should be your first dashboard.
- Kernel defaults are conservative. Tune rmem_max and SO_RCVBUF for your workload.
- Decouple I/O from processing. This pattern prevents backpressure-induced drops. - Checksum Everything: Corruption Caught Before Catastrophe
- Binary Protocols: Designing Messages For Cache Lines