Вчера в 03:17 кластер начал терять трафик при пике в 100k pps. Все дашборды зеленые: фаервол «активен», conntrack в норме, CPU не зашкаливает. Но netstat -s показал рост packet receive errors, а nft list ruleset молчал о внутренних дропах. На деле: nftables использует глобальный rwsem (nf_tables_trans_lock) при коммите транзакций. Под высокой частотой обновлений правил (даже read-only) возникает contention. Проверить можно через perf record -g -a sleep 30 + perf report --symbol-filter nf_tables. В логах ядра — задержки в nf_tables_commit до 12 мс. FreeBSD pf? Нет глобальных блокировок на match. Его state table масштабируется per-CPU, а правила компилируются в jump-table. При тех же 100k pps — ноль packet loss, latency <50µs. Диагностика: sysctl net.netfilter.nf_conntrack_count, cat /proc/net/softnet_stat, bpftrace -e 'kprobe:nf_tables_commit { @start[tid] = nsecs; } kretprobe:nf_tables_commit /@start[tid]/ { @lat = hist(nsecs - @start[tid]); delete(@start[tid]); }' Подробный разбор: ht...