OVH Cloud OVH Cloud

Solaris, libmalloc et libmtmalloc

14 réponses
Avatar
JKB
Bonsoir à tous,

J'ai développé une grosse application de calcul utilisant de
nombreux threads parallèles (une histoire d'optimisation combinatoire).
Je fais actuellement tourner cette application sur des serveurs Sun à
base de T1 et de T2, tous ces serveurs tournant sous Solaris 10 Sparc.

Par habitude, lorsque je compile un programme utilisant les threads
sous Solaris, je lie avec mtmalloc. C'est une habitude depuis je ne sais
plus quelle version de Solaris où la libmalloc simple n'était pas 'thread
safe'.

Ce programme lance une bonne centaine de threads qui effectuent un
certain nombre de malloc()/free(), chaque thread durant à peu près deux
heures de temps CPU.

Je m'aperçois avec pstat qu'au fur et à mesure, certains threads (en
nombre croissant) perdent du temps de calcul effectif jusqu'à 10% de
USER et 90% de LOCK ! J'ai regardé mon code sans rien trouver. Un coup de
plockstat me donne :

root@tchaikovski # plockstat -e 5 -p 84
0
Mutex block

Count nsec Lock Caller
-------------------------------------------------------------------------------
780 31732607 libmtmalloc.so.1`oversize_lock libmtmalloc.so.1`free+0x80
791 25786631 libmtmalloc.so.1`oversize_lock libmtmalloc.so.1`oversize+0x48
1 10245664 0x1007b46c0 libmtmalloc.so.1`malloc_internal+0x44
4 22585 libmtmalloc.so.1`oversize_lock libmtmalloc.so.1`oversize+0x48
3 27280 libmtmalloc.so.1`oversize_lock libmtmalloc.so.1`free+0x80
root@tchaikovski #

Ce qui est surprenant... Les threads sont bloqués par mtmalloc() !
Je fais actuellement un test en virant la mtmalloc() et en utilisant le
malloc() standard de la libc. Je n'observe plus ces états LOCK.

Deux questions :
1/ est-ce un autre bug de Solaris ?
2/ si ce n'est pas un bug, quel est l'avantage de la libmtmalloc vu
qu'elle se comporte moins bien que le malloc de la libc dans un
programme multithreadé ?

Cordialement,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.

4 réponses

1 2
Avatar
xavier
JKB wrote:

J'ai essayé un ulimit -v sans que ce soit vraiment probant.



As-tu essayé de faire tourner ton programme sous root ?

Juste une idée qui me vient comme ça, je ne sais pas si ça a un rapport
avec ulimit...

--
XAv - recasé
Avatar
JKB
Le 08-05-2010, ? propos de
Re: [long] Solaris et mémoire virtuelle was Re: Solaris, libmalloc et libmtmalloc,
Xavier ?crivait dans fr.comp.os.unix :
JKB wrote:

J'ai essayé un ulimit -v sans que ce soit vraiment probant.



As-tu essayé de faire tourner ton programme sous root ?



Non.

Juste une idée qui me vient comme ça, je ne sais pas si ça a un rapport
avec ulimit...



Je ne vois pas en quoi la gestion du swap serait différente pour un
programme lancé en tant que root... En fait, je pensais avec ulimit
limiter le swap, mais en fait, on ne limite que la taille de la
mémoire virtuelle (qui comprend d'après mes essais la taille de la
mémoire maximale du processus). Ça n'empêche pas de swapper...
Et si je vire le swap, Solaris refuse de démarrer correctement !...

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
Marc
On 4 mai, 23:34, JKB wrote:
        Il y a un verrou dans libmtmalloc, même s'il est moins pénalisant
        que celui de la libmalloc.



Je ne sais pas si vous êtes le client dont il est fait mention, mais
ça a l'air de bouger :-)

http://mail.opensolaris.org/pipermail/opensolaris-arc/2010-June/021666.html
Avatar
JKB
Le 09-06-2010, ? propos de
Re: Solaris, libmalloc et libmtmalloc,
Marc ?crivait dans fr.comp.os.unix :
On 4 mai, 23:34, JKB wrote:
        Il y a un verrou dans libmtmalloc, même s'il est moins pénalisant
        que celui de la libmalloc.



Je ne sais pas si vous êtes le client dont il est fait mention, mais
ça a l'air de bouger :-)

http://mail.opensolaris.org/pipermail/opensolaris-arc/2010-June/021666.html



Je ne sais pas... J'ai fait un BR il y a pas mal de temps là-dessus
et rien n'a bougé jusqu'à présent...

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
1 2