Если вы идете по пути высокой производительности, обычно вам нужно запускать как можно меньше других (запланированных) процессов, поскольку они будут мешать вашему приложению.
Linux, как и классические операционные системы UNIX, предназначен для одновременной справедливой работы нескольких приложений и пытается предотвратить нехватку ресурсов, и вы будете стремиться к обратному, истощать все остальное, кроме вашего приложения. Простые шаги на уровне ОС меняют хороший уровень и приоритет вашего приложения в реальном времени, меняют планировщик или переходят на ядро реального времени .
TCP / IP обычно настраивается для предотвращения разрыва соединения и эффективного использования доступной пропускной способности. Чтобы получить наименьшую возможную задержку на очень быстром канале, а не на максимально возможной полосе пропускания для соединения, где некоторые промежуточные каналы более ограничены, вам нужно настроить параметры сетевого стека.
sysctl -a
покажет вам множество настроек ядра, которые вы можете настроить. Настройки зависят от того, используете ли вы IPv4 или IPv6 и что именно вы уже делаете в своем приложении, но может представлять интерес:
net.ipv4.tcp_window_scaling=1
RFC 1323 - поддержка размеров окна TCP IPV4 больше 64 КБ - обычно требуется в сетях с высокой пропускной способностью
net.ipv4.tcp_reordering=3
Максимальное количество раз, когда пакет IPV4 может быть переупорядочен в потоке пакетов TCP без TCP при условии потери пакетов и медленного старта.
net.ipv4.tcp_low_latency=1
намеревался отдавать предпочтение низкой задержке по сравнению с более высокой пропускной способностью; Параметр = 1 отключает обработку пре-очереди IPC4 tcp
net.ipv4.tcp_sack=0
значение 1 включает выборочное подтверждение для IPV4, которое требует включения tcp_timestamps и добавляет некоторые издержки пакета, которые вам не нужны, если вы не испытываете потери пакетов
net.ipv4.tcp_timestamps=0
Рекомендуется только в тех случаях, когда требуется мешок.
net.ipv4.tcp_fastopen=1
Включить отправку данных в открывающем пакете SYN.
Большинство, если не все, лучше документированы в исходном коде ядра .
Конечно, вы можете кодировать необработанные TCP-сокеты и в целом обходить стек TCP / IP ядра.
Часто хорошо настроенные системы работают в доверенной сети и их локальные (iptables) брандмауэры отключаются.