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 :
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 :
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 :
JKB wrote: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 :
Que penses tu de ceci:
http://ekschi.com/technology/2009/06/26/mtmalloc-vs-umem/
JKB <knatschke@koenigsberg.fr> wrote:
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 :
Que penses tu de ceci:
http://ekschi.com/technology/2009/06/26/mtmalloc-vs-umem/
JKB wrote: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 :
Que penses tu de ceci:
http://ekschi.com/technology/2009/06/26/mtmalloc-vs-umem/
JKB wrote: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 :
Que penses tu de ceci:
http://ekschi.com/technology/2009/06/26/mtmalloc-vs-umem/
JKB <knatschke@koenigsberg.fr> wrote:
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 :
Que penses tu de ceci:
http://ekschi.com/technology/2009/06/26/mtmalloc-vs-umem/
JKB wrote: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 :
Que penses tu de ceci:
http://ekschi.com/technology/2009/06/26/mtmalloc-vs-umem/
Le 03-05-2010, ? propos de
Re: Solaris, libmalloc et libmtmalloc,
Michel Talon ?crivait dans fr.comp.os.unix :
> JKB wrote:
>> 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 :
>>>
>
>
> Que penses tu de ceci:
> http://ekschi.com/technology/2009/06/26/mtmalloc-vs-umem/
Bon... libmalloc et libumem donnent grosso-modo le même résultat. Je
pense que le problème provient de la fragmentation de la mémoire.
Comment limiter cette fragmentation ? Est-ce qu'un outil comme
jemalloc est efficace ? Ce qui est amusant (enfin, si on peut dire),
Le 03-05-2010, ? propos de
Re: Solaris, libmalloc et libmtmalloc,
Michel Talon ?crivait dans fr.comp.os.unix :
> JKB <knatschke@koenigsberg.fr> wrote:
>> 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 :
>>>
>
>
> Que penses tu de ceci:
> http://ekschi.com/technology/2009/06/26/mtmalloc-vs-umem/
Bon... libmalloc et libumem donnent grosso-modo le même résultat. Je
pense que le problème provient de la fragmentation de la mémoire.
Comment limiter cette fragmentation ? Est-ce qu'un outil comme
jemalloc est efficace ? Ce qui est amusant (enfin, si on peut dire),
Le 03-05-2010, ? propos de
Re: Solaris, libmalloc et libmtmalloc,
Michel Talon ?crivait dans fr.comp.os.unix :
> JKB wrote:
>> 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 :
>>>
>
>
> Que penses tu de ceci:
> http://ekschi.com/technology/2009/06/26/mtmalloc-vs-umem/
Bon... libmalloc et libumem donnent grosso-modo le même résultat. Je
pense que le problème provient de la fragmentation de la mémoire.
Comment limiter cette fragmentation ? Est-ce qu'un outil comme
jemalloc est efficace ? Ce qui est amusant (enfin, si on peut dire),
JKB wrote:Le 03-05-2010, ? propos de
Re: Solaris, libmalloc et libmtmalloc,
Michel Talon ?crivait dans fr.comp.os.unix :
> JKB wrote:
>> 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 :
>>>
>
>
> Que penses tu de ceci:
> http://ekschi.com/technology/2009/06/26/mtmalloc-vs-umem/
Bon... libmalloc et libumem donnent grosso-modo le même résultat. Je
pense que le problème provient de la fragmentation de la mémoire.
Comment limiter cette fragmentation ? Est-ce qu'un outil comme
jemalloc est efficace ? Ce qui est amusant (enfin, si on peut dire),
Tu as essayé de faire tourner ton programme sur FreeBSD? si ça passe
bien, c'est que jemalloc est efficace ...
Il me semblait que tous les malloc allouent de la mémoire à un
processus, et que le free la rend au processus et non pas au système.
Eventuellement le système récupère de la mémoire plus tard quand il
trouve des pages non utilisées. Donc la performance dépend aussi de
celle du système de mémoire virtuelle. Maintenant les truc comme
jemalloc qui sont conçus pour des programmes multithreadés avec des
allocations indépendantes pour chaque thread de façon à ne pas avoir à
poser des verrous, fonctionnent en utilisant plusieurs pools de mémoire
(par exemple un par thread) et donc vont être plus consommateurs de
mémoire que des allocateurs avec un seul pool. Si ton programme utilise
en réalité peu de concurrence, il est possible que l'utilisation d'un
malloc à l'ancienne soit préférable en dépit des coûts de
synchronisation. Clairement les allocateurs modernes ont été conçus pour
des programmes fortement multithreadés avec une forte concurrence dans
l'allocation de mémoire. Dans ce cas diviser les coûts de verrouillage
est important.
Ceci peut t'intéresser:
http://benjamin.smedbergs.us/blog/tag/jemalloc/
JKB <knatschke@koenigsberg.fr> wrote:
Le 03-05-2010, ? propos de
Re: Solaris, libmalloc et libmtmalloc,
Michel Talon ?crivait dans fr.comp.os.unix :
> JKB <knatschke@koenigsberg.fr> wrote:
>> 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 :
>>>
>
>
> Que penses tu de ceci:
> http://ekschi.com/technology/2009/06/26/mtmalloc-vs-umem/
Bon... libmalloc et libumem donnent grosso-modo le même résultat. Je
pense que le problème provient de la fragmentation de la mémoire.
Comment limiter cette fragmentation ? Est-ce qu'un outil comme
jemalloc est efficace ? Ce qui est amusant (enfin, si on peut dire),
Tu as essayé de faire tourner ton programme sur FreeBSD? si ça passe
bien, c'est que jemalloc est efficace ...
Il me semblait que tous les malloc allouent de la mémoire à un
processus, et que le free la rend au processus et non pas au système.
Eventuellement le système récupère de la mémoire plus tard quand il
trouve des pages non utilisées. Donc la performance dépend aussi de
celle du système de mémoire virtuelle. Maintenant les truc comme
jemalloc qui sont conçus pour des programmes multithreadés avec des
allocations indépendantes pour chaque thread de façon à ne pas avoir à
poser des verrous, fonctionnent en utilisant plusieurs pools de mémoire
(par exemple un par thread) et donc vont être plus consommateurs de
mémoire que des allocateurs avec un seul pool. Si ton programme utilise
en réalité peu de concurrence, il est possible que l'utilisation d'un
malloc à l'ancienne soit préférable en dépit des coûts de
synchronisation. Clairement les allocateurs modernes ont été conçus pour
des programmes fortement multithreadés avec une forte concurrence dans
l'allocation de mémoire. Dans ce cas diviser les coûts de verrouillage
est important.
Ceci peut t'intéresser:
http://benjamin.smedbergs.us/blog/tag/jemalloc/
JKB wrote:Le 03-05-2010, ? propos de
Re: Solaris, libmalloc et libmtmalloc,
Michel Talon ?crivait dans fr.comp.os.unix :
> JKB wrote:
>> 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 :
>>>
>
>
> Que penses tu de ceci:
> http://ekschi.com/technology/2009/06/26/mtmalloc-vs-umem/
Bon... libmalloc et libumem donnent grosso-modo le même résultat. Je
pense que le problème provient de la fragmentation de la mémoire.
Comment limiter cette fragmentation ? Est-ce qu'un outil comme
jemalloc est efficace ? Ce qui est amusant (enfin, si on peut dire),
Tu as essayé de faire tourner ton programme sur FreeBSD? si ça passe
bien, c'est que jemalloc est efficace ...
Il me semblait que tous les malloc allouent de la mémoire à un
processus, et que le free la rend au processus et non pas au système.
Eventuellement le système récupère de la mémoire plus tard quand il
trouve des pages non utilisées. Donc la performance dépend aussi de
celle du système de mémoire virtuelle. Maintenant les truc comme
jemalloc qui sont conçus pour des programmes multithreadés avec des
allocations indépendantes pour chaque thread de façon à ne pas avoir à
poser des verrous, fonctionnent en utilisant plusieurs pools de mémoire
(par exemple un par thread) et donc vont être plus consommateurs de
mémoire que des allocateurs avec un seul pool. Si ton programme utilise
en réalité peu de concurrence, il est possible que l'utilisation d'un
malloc à l'ancienne soit préférable en dépit des coûts de
synchronisation. Clairement les allocateurs modernes ont été conçus pour
des programmes fortement multithreadés avec une forte concurrence dans
l'allocation de mémoire. Dans ce cas diviser les coûts de verrouillage
est important.
Ceci peut t'intéresser:
http://benjamin.smedbergs.us/blog/tag/jemalloc/
J'ai fait des tests. Sous Linux, la mémoire est renvoyée au système
Sous Solaris, j'ai déjà testé libmalloc, libbsdmalloc, libumem et
libmtmalloc.
Tous se comportent de manières différentes, mais aucun
ne donne satisfaction. libmtmalloc n'utilise pas de swap mais pose
des verrous qui grèvent les performances, libmalloc et libumem se
mettent à swapper...
J'ai fait des tests. Sous Linux, la mémoire est renvoyée au système
Sous Solaris, j'ai déjà testé libmalloc, libbsdmalloc, libumem et
libmtmalloc.
Tous se comportent de manières différentes, mais aucun
ne donne satisfaction. libmtmalloc n'utilise pas de swap mais pose
des verrous qui grèvent les performances, libmalloc et libumem se
mettent à swapper...
J'ai fait des tests. Sous Linux, la mémoire est renvoyée au système
Sous Solaris, j'ai déjà testé libmalloc, libbsdmalloc, libumem et
libmtmalloc.
Tous se comportent de manières différentes, mais aucun
ne donne satisfaction. libmtmalloc n'utilise pas de swap mais pose
des verrous qui grèvent les performances, libmalloc et libumem se
mettent à swapper...
JKB wrote:J'ai fait des tests. Sous Linux, la mémoire est renvoyée au système
J'ai déjà eu le gag d'un programme qui faisait une boucle contenant
essentiellement free(malloc(taille)); et sous linux passait son temps en
appel système à demander et rendre la mémoire. Il faut quand même des
patterns d'allocation rares pour que la fragmentation cause une
occupation mémoire qui augmente ainsi.
Sous Solaris, j'ai déjà testé libmalloc, libbsdmalloc, libumem et
libmtmalloc.
umem et mtmalloc ont des options qui peuvent jouer. umem a quelque chose
comme UMEM_OPTIONSºckend=mmap, et mtmalloc MTCHUNKSIZEP. Aucune idée
de si ça aurait un effet dans ce cas particulier.Tous se comportent de manières différentes, mais aucun
ne donne satisfaction. libmtmalloc n'utilise pas de swap mais pose
des verrous qui grèvent les performances, libmalloc et libumem se
mettent à swapper...
Ça sent le bug quelque part, mtmalloc est précisément censé ne pas
locker, et malloc (et umem) utiliser moins de mémoire...
JKB wrote:
J'ai fait des tests. Sous Linux, la mémoire est renvoyée au système
J'ai déjà eu le gag d'un programme qui faisait une boucle contenant
essentiellement free(malloc(taille)); et sous linux passait son temps en
appel système à demander et rendre la mémoire. Il faut quand même des
patterns d'allocation rares pour que la fragmentation cause une
occupation mémoire qui augmente ainsi.
Sous Solaris, j'ai déjà testé libmalloc, libbsdmalloc, libumem et
libmtmalloc.
umem et mtmalloc ont des options qui peuvent jouer. umem a quelque chose
comme UMEM_OPTIONSºckend=mmap, et mtmalloc MTCHUNKSIZEP. Aucune idée
de si ça aurait un effet dans ce cas particulier.
Tous se comportent de manières différentes, mais aucun
ne donne satisfaction. libmtmalloc n'utilise pas de swap mais pose
des verrous qui grèvent les performances, libmalloc et libumem se
mettent à swapper...
Ça sent le bug quelque part, mtmalloc est précisément censé ne pas
locker, et malloc (et umem) utiliser moins de mémoire...
JKB wrote:J'ai fait des tests. Sous Linux, la mémoire est renvoyée au système
J'ai déjà eu le gag d'un programme qui faisait une boucle contenant
essentiellement free(malloc(taille)); et sous linux passait son temps en
appel système à demander et rendre la mémoire. Il faut quand même des
patterns d'allocation rares pour que la fragmentation cause une
occupation mémoire qui augmente ainsi.
Sous Solaris, j'ai déjà testé libmalloc, libbsdmalloc, libumem et
libmtmalloc.
umem et mtmalloc ont des options qui peuvent jouer. umem a quelque chose
comme UMEM_OPTIONSºckend=mmap, et mtmalloc MTCHUNKSIZEP. Aucune idée
de si ça aurait un effet dans ce cas particulier.Tous se comportent de manières différentes, mais aucun
ne donne satisfaction. libmtmalloc n'utilise pas de swap mais pose
des verrous qui grèvent les performances, libmalloc et libumem se
mettent à swapper...
Ça sent le bug quelque part, mtmalloc est précisément censé ne pas
locker, et malloc (et umem) utiliser moins de mémoire...
La libjemalloc est assez mal écrite pour ne pas être portable.
Avec les autres, la solution est de lier
avec la libptmalloc3 ou quelque chose d'équivalent.
Je ne vois donc pas ce que je peux faire de plus
La libjemalloc est assez mal écrite pour ne pas être portable.
Avec les autres, la solution est de lier
avec la libptmalloc3 ou quelque chose d'équivalent.
Je ne vois donc pas ce que je peux faire de plus
La libjemalloc est assez mal écrite pour ne pas être portable.
Avec les autres, la solution est de lier
avec la libptmalloc3 ou quelque chose d'équivalent.
Je ne vois donc pas ce que je peux faire de plus
JKB wrote:La libjemalloc est assez mal écrite pour ne pas être portable.
Il me semble que firefox 3.0 venait avec une libjemalloc.so. Maintenant
c'est inclus directement dans l'executable, mais c'est quand même du côté
de firefox que je chercherais des sources portables de jemalloc. (dans
mes tests c'était toujours l'implémentation de malloc la plus lente, mais
visiblement on n'a pas les mêmes conditions d'utilisation)
Avec les autres, la solution est de lier
avec la libptmalloc3 ou quelque chose d'équivalent.
C'est un peu pénible parce qu'à ma connaissance elle n'est pas livrée
avec l'OS, et ça serait bien de pouvoir se contenter de celles qui sont
là par défaut...
Je ne vois donc pas ce que je peux faire de plus
Bon courage.
JKB wrote:
La libjemalloc est assez mal écrite pour ne pas être portable.
Il me semble que firefox 3.0 venait avec une libjemalloc.so. Maintenant
c'est inclus directement dans l'executable, mais c'est quand même du côté
de firefox que je chercherais des sources portables de jemalloc. (dans
mes tests c'était toujours l'implémentation de malloc la plus lente, mais
visiblement on n'a pas les mêmes conditions d'utilisation)
Avec les autres, la solution est de lier
avec la libptmalloc3 ou quelque chose d'équivalent.
C'est un peu pénible parce qu'à ma connaissance elle n'est pas livrée
avec l'OS, et ça serait bien de pouvoir se contenter de celles qui sont
là par défaut...
Je ne vois donc pas ce que je peux faire de plus
Bon courage.
JKB wrote:La libjemalloc est assez mal écrite pour ne pas être portable.
Il me semble que firefox 3.0 venait avec une libjemalloc.so. Maintenant
c'est inclus directement dans l'executable, mais c'est quand même du côté
de firefox que je chercherais des sources portables de jemalloc. (dans
mes tests c'était toujours l'implémentation de malloc la plus lente, mais
visiblement on n'a pas les mêmes conditions d'utilisation)
Avec les autres, la solution est de lier
avec la libptmalloc3 ou quelque chose d'équivalent.
C'est un peu pénible parce qu'à ma connaissance elle n'est pas livrée
avec l'OS, et ça serait bien de pouvoir se contenter de celles qui sont
là par défaut...
Je ne vois donc pas ce que je peux faire de plus
Bon courage.