У нас есть сигнал тревоги Netdata
system.softnet_stat, сколько раз за последние 10 минут ksoftirq исчерпал sysctl net.core.netdev_budget или net.core.netdev_budget_usecs, при этом оставшаяся работа (это может быть причиной отбрасывания пакетов)
Я искал информацию о том, как решить эту проблему. Все предлагают увеличить netdev_budget и / или netdev_budget_usecs, но многие источники противоречат друг другу в том, как следует устанавливать лимиты. Некоторые предлагают увеличить netdev_budget около 30К мероприятий, некоторые до 600 мероприятий. Наш конфиг /etc/sysctl.conf все закомментировано, я думаю, все значения по умолчанию?
Наше среднее количество событий в день составляет 10-20 тысяч. В system.softnet_stat На диаграмме мы видим, что сжатые события существуют, даже если количество обработанных событий составляет всего 2К.
Короче говоря, как рассчитать, какие значения мы должны присвоить netdev_budget и / или netdev_budget_usecs?
На эту проблему нет универсального решения. В общем, вы должны устанавливать более высокие значения в sysctl.conf, пока не найдете что-то, что работает; однако также возможно, что машина получает больше пакетов, чем может обработать, поэтому не может быть никаких значений, которые будут работать. На основе https://github.com/netdata/netdata/issues/1076 и https://nateware.com/2013/04/06/linux-network-tuning-for-2013/ вот пример конфигурации, которую пользователи сообщили о работе:
# /etc/sysctl.d/99-network-tuning.conf
# http://www.nateware.com/linux-network-tuning-for-2013.html
# Increase Linux autotuning TCP buffer limits
# Set max to 16MB for 1GE and 32M (33554432) or 54M (56623104) for 10GE
# Don't set tcp_mem itself! Let the kernel scale it based on RAM.
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
net.core.optmem_max = 40960
# cloudflare uses this for balancing latency and throughput
# https://blog.cloudflare.com/the-story-of-one-latency-spike/
## net.ipv4.tcp_rmem = 4096 1048576 2097152
net.ipv4.tcp_rmem = 4096 5242880 33554432
net.ipv4.tcp_wmem = 4096 65536 16777216
# Also increase the max packet backlog
net.core.netdev_max_backlog = 100000
## net.core.netdev_budget = 50000
net.core.netdev_budget = 60000
net.core.netdev_budget_usecs = 6000
# Make room for more TIME_WAIT sockets due to more clients,
# and allow them to be reused if we run out of sockets
net.ipv4.tcp_max_syn_backlog = 30000
net.ipv4.tcp_max_tw_buckets = 2000000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 10
# Disable TCP slow start on idle connections
net.ipv4.tcp_slow_start_after_idle = 0
# If your servers talk UDP, also up these limits
net.ipv4.udp_rmem_min = 8192
net.ipv4.udp_wmem_min = 8192