Claro que parece um efeito NUMA quando vários sockets degradam drasticamente o desempenho.
perf
é muito útil. Já no relatório perf, você pode ver native_queued_spin_lock_slowpath
tendo 35%, o que parece ser uma grande quantidade de sobrecarga para seu código de simultaneidade. A parte complicada é visualizar o que está chamando, se você não conhece muito bem o código de simultaneidade.
Eu recomendaria a criação de gráficos de chama a partir da amostragem de CPU do sistema . Início rápido:
git clone https://github.com/brendangregg/FlameGraph # or download it from github
cd FlameGraph
perf record -F 99 -a -g -- sleep 60
perf script | ./stackcollapse-perf.pl > out.perf-folded
./flamegraph.pl out.perf-folded > perf-kernel.svg
No gráfico resultante, procure os "platôs" mais altos. Quais indicam funções com o tempo mais exclusivo.
Estou ansioso para saber quando o pacote bpfcc-tools
está no Debian estável, ele permitirá a coleta dessas pilhas "dobradas" diretamente com menos sobrecarga.
O que você faz com isso depende do que você encontra. Saiba qual seção crítica está sendo protegida por um bloqueio. Compare a pesquisa existente em sincronização escalável em hardware moderno. Por exemplo, uma apresentação do Kit de Concorrência observa que diferentes implementações de spinlock têm propriedades diferentes .