Vejam esse teste, de Andrew Doran, comparando o desempenho multithreaded do MySQL entre o Linux, NetBSD, FreeBSD e OpenBSD:
http://kerneltrap.org/mailarchive/netbsd-tech-kern/2007/9/28/327638
O Linux possui o melhor desempenho entre todos, mas tem uma queda acentuada de desempenho, quando o número de threads aumenta. Isso foi observado também neste teste:
http://jeffr-tech.livejournal.com/6268.html#cutid1
Anton Blanchard confirmou esse comportamento, mas notou que o problema não é do kernel Linux, mas da função malloc() da Glibc. Trocando essa função pela tcmalloc() desenvolvida pelo Google, o desempenho estabiliza:
http://ozlabs.org/~anton/linux/sysbench/
e isso foi confirmado por Andrew Doran:
http://kerneltrap.org/mailarchive/netbsd-tech-kern/2007/10/4/329788
Existem 2 modos para utilizar a tcmalloc(): (i) recompilar a aplicação (MySQL neste caso) ou (ii) definir o uso da biblioteca, usando a variável LD_PRELOAD:
$ LD_PRELOAD="/usr/lib/libtcmalloc.so"
A função tcmalloc() está contida nas ferramentas "Google performance tools", disponível em http://code.google.com/p/google-perftools/downloads/list
Use(m) com cautela, pois ainda está na versão 0.93 (nos testes acima, foi usada a versão 0.8, também disponível para download).
PS: parece que a tcmalloc() pode melhorar o desempenho do Squid também:
http://wiki.wikked.net/wiki/Squid_memory_fragmentation_problem