Tem certeza de que você tem a mesma configuração no kernel?
Se eu executar o comando
time perl -e 'use threads; $T=12 ; foreach (1..$T) { $thr[$i++] = threads->create(sub { printf "I am thread %s\n", threads->tid(); foreach (1..9e6) { push(@a, sqrt(1234)/sin(1234)*cos(1234)) } ; printf "thread %s finished.\n", threads->tid(); }); } foreach (0..$T-1) { $thr[$_]->join(); }'
Eu vejo o 2.6.37 sendo 80% mais lento do que o 2.6.34. O comando apenas inicia 12 threads calculando sqrt (1234) / sin (1234) * cos (1234) 9.000.000 vezes e aguarda todos os threads terminarem.
Eu executei estes testes em um dual Xeon X5650 @ 2.67GHz (6 núcleos com HT) com 24 GB de memória, openSUSE 11.3, kernels 2.6.34.7-0.5-default e kernel-default-2.6.37-6.1 de link .
Esta desaceleração é esperada? Alguém pode confirmar esses resultados e testar o comando anterior em 2.6.34 e 2.6.37 em seu próprio hardware? Se você executar o comando acima, ajuste $ T para o seu número de núcleos. Se você ficar sem memória, diminua o loop interno (1..9e6) para (1..9e5) ou similar.
Obrigado Richard
Tem certeza de que você tem a mesma configuração no kernel?
Tags performance kernel memory linux threads