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 :
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.
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é
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.
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 <knatschke@koenigsberg.fr> 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.
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.
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 :-)
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.
Le 09-06-2010, ? propos de
Re: Solaris, libmalloc et libmtmalloc,
Marc ?crivait dans fr.comp.os.unix :
On 4 mai, 23:34, JKB <knatsc...@koenigsberg.fr> 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 :-)
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.
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.