Ça bloque parce que ça fait un malloc() dans asprintf() pour tenter de gérer un assert() qui a raté mais évidemment ça bloque puisqu'on est déjà dans malloc() et qu'on a choppé le [fm]utex.
Je suspecte deux bugs :
- dans ton code qui a peté le heap bien avant ce malloc() ;
- dans malloc() parce qu'il ne devrait pas se réappeler sans tenir compte du futex qu'il a déjà.
Je crois que mon pic de Ballmer est à 8 bières.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
Ben on voit clairement qu'il y a un deadlock quelque part dans malloc() et si l'application n'a qu'un thread ça ressemble quand même fort à un problème dans malloc() lui même. Pour voir plus loin, un backtrace complet serait effectivement utile.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
> (Pour la petite histoire, ils ont pu tracer le problème en bricolant leur suite de
> benchmark pour recompiler chaque révision du git, rebooter sur le noyau et
> relancer le test, je trouve ça magnifique dans le genre « je suis obstiné mais
> flemmard, je vais écrire quelques centaines de lignes de code histoire que ma
> machine bosse sans moi »).
Et quelques unes que j'ai du boulot :
/*
* Initially, we populate the island with all the rifraff peers
* that happen to be lying around. Those with seriously
* defective clocks are immediately booted off the island. Then,
* the falsetickers are culled and put to sea. The truechimers
* remaining are subject to repeated rounds where the most
* unpopular at each round is kicked off. When the population
* has dwindled to sys_minclock, the survivors split a million
* bucks and collectively crank the chimes.
*/
-- ntp-4.2.2p1/ntpd/ntp_proto.c:clock_select()
%
select(0, NULL, NULL, NULL, &tv); // ought to loop until done
-- top.c
%
ret = setsockopt(sockfd, TC_IPPROTO, SO_SET_REPLACE, repl,
sizeof(*repl) + repl->size);
if (ret < 0) {
errno = ret;
-- iptables/libiptc/libiptc.c:TC_COMMIT()
%
<XXX> kernel: Badness in __writeback_single_inode -- does that telle something to anyone ?
<YYY> XXX, it means __writeback_single_inode was coded by samuel l. jackson
%
if (pn->inode==inode) {
/* Some warning should be appropriate here
as we got multiple processes for one i-node */
return;
}
-- netstat.c
%
#define PRG_HASHIT(x) ((x) % PRG_HASH_SIZE)
-- netstat.c
%
* XXX is trying to understand how coreutils' get_date() works
* XXX feels pathetic
%
J'en ai aussi sur TDWTF.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
Quand je parle de stocker tout l'état à chaque instruction je pense effectivement plutôt à stocker les différences entre les états entre deux instructions. Une peu à la façon dont les vidéo sont compressées : on a une image de base et l'image suivante, c'est la même avec un delta (c'est sans doute super simplifié, j'y connais rien en encodage vidéo).
C'est juste qu'au final ça revient au même qu'à stocker tout l'état à chaque instruction, la manière dont c'est « compressé » ne sont que des « détails » d'optimisation.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
Sinon, les présentations de la salle « Agora » ont été diffusées en presque direct sur internet. J'ose espérer qu'elles ont été enregistrées mais si c'est le cas je ne sais pas quand elles seront mises à disposition.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
Effectivement c'est pas magique et ça sait pas tout défaire mais il n'est quand même pas nécessaire de single-stepper explicitement. Il suffit de passer en mode « target record » et on peut reserve debugger à loisir ou presque à partir de ce moment.
Par contre il me semble que ODB garde bien une trace de tout l'état du programme à chaque instruction (comme s'il était en mode « target record » en permanence donc).
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
C'était surtout pour rendre le titre « intéressant » :) Après dans l'article j'ai utilisé debugging pour mitiger la répetition parce que je vois pas beaucoup de synonymes possibles. Mais il est vrai que les italiques ou guillemets auraient pu être utilisées de manière plus cohérente.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
Au cas où tu déciderais d'établir une communication constructive.
Malgré le manque de documentation et le peu d'explication, je pense avoir plus ou moins compris ce qu'est censé faire Clownix-Spy. Cependant, je m'interroge sur les choix techniques qui ont été réalisés.
Notamment, je crois comprendre que l'idée est de permettre l'observation de certains éléments interne au noyau. Cela nécessite cependant l'écriture de modules avec tous les risques et complications que cela comporte. Or, le projet SystemTap aborde déjà cette problèmatique et est relativement mature et intégré à plusieurs distributions. Ma question est donc : pourquoi ne pas se baser sur SystemTap ? Cela a-t-il été envisagé et rejeté ? Pourquoi ?
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
> J'y ai pensé, mais quand c'est freeze du système, il n'y a plus de sortie à la console.
Si. Mais pas dans les logs. Si t'as pas la possibilité de monter une console série, tu peux essayer netconsole. Mais bon, après, k(g)db redevient peut-être plus pratique aussi.
> Pour les while, c'est juste pour être sûr que j'obtient le lock.
J'ai pas regardé le code mais ça pue assez bien ton truc là, que ça soit lié au problème ou non.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
Bien sûr qu'il a le choix pour débugger. Sans avoir à se mettre à k(g)db, il peut faire un sysrq-{w,t} quand le système est freezé et voir à quel endroit ça coince.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
Je n'ai jamais utilisé DTrace ni (Open)Solaris. J'utilise SystemTap et OProfile assez régulièrement mais pas forcément de manière très avancée.
De ce que j'en ai compris, DTrace a plus de fonctionnalités que SystemTap mais les développeurs stap travaillent à rattraper le retard. La version 1.0 est juste une continuité mais ne marque pas vraiment une avancée soudaine et importante.
OProfile n'est pas vraiment comparable à DTrace ou SystemTap. OProfile permet « juste » de se faire une idée de ce à quoi les CPUs passent leur temps de manière efficace tandis que DTrace et SystemTap permettent d'instrumenter à peu près tout et n'importe quoi de manière très fine.
En pratique, pour du profiling sur un truc CPU-bound, on va utiliser OProfile pour se faire une idée de la zone à instrumenter puis SystemTap pour observer plus précisement le code qui pose problème. Quand on perd son temps dans les I/O, OProfile est a peu près inutile. Par contre on peut utiliser blktrace et toujours SystemTap une fois qu'on sait ce qu'on veut instrumenter.
SystemTap est cependant bien plus qu'un outil de mesure de performance. L'exemple typique étant sigkill.stp qui permet de répondre à la question « Qui est-ce qui envoi un SIGKILL à mon process ? » http://sourceware.org/systemtap/examples/process/sigkill.stp
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
> SystemTap est un projet encore jeune (stable depuis qq. jours seulement),
> et rarement installé
Le passage à la version 1.0 ne marque pas le passage à une version stable. SystemTap est stable et utilisable et utilisé en production depuis un bon moment. Par contre, il est vrai qu'il manque encore pas mal de visibilité et les versions stables en 0.x n'ont sans doute pas aidé.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: mtrace, ltrace, stracej
Posté par Krunch (site web personnel) . En réponse au message lowlevellock. Évalué à 2.
Je suspecte deux bugs :
- dans ton code qui a peté le heap bien avant ce malloc() ;
- dans malloc() parce qu'il ne devrait pas se réappeler sans tenir compte du futex qu'il a déjà.
Je crois que mon pic de Ballmer est à 8 bières.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: mtrace, ltrace, strace
Posté par Krunch (site web personnel) . En réponse au message lowlevellock. Évalué à 2.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
# mtrace, ltrace, strace
Posté par Krunch (site web personnel) . En réponse au message lowlevellock. Évalué à 2.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: plus de précisions seraient pas mal
Posté par Krunch (site web personnel) . En réponse au message Gawk / pb de mémoire ?. Évalué à 2.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
# s/RedHat/Red Hat/
Posté par Krunch (site web personnel) . En réponse à la dépêche Sortie de la version bêta de Fedora 12. Évalué à 2.
Et en fait, si on se réfère à la distribution, c'est Red Hat Enterprise Linux.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: Fedora 11 était toujours en beta, non ?
Posté par Krunch (site web personnel) . En réponse à la dépêche Sortie de la version bêta de Fedora 12. Évalué à 2.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: A propos du 2.6.32
Posté par Krunch (site web personnel) . En réponse à la dépêche Des nouvelles du noyau Debian. Évalué à 3.
> benchmark pour recompiler chaque révision du git, rebooter sur le noyau et
> relancer le test, je trouve ça magnifique dans le genre « je suis obstiné mais
> flemmard, je vais écrire quelques centaines de lignes de code histoire que ma
> machine bosse sans moi »).
Cette technique est décrite dans la documentation Linux depuis au moins 1996 : http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6(...)
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: Microcodes
Posté par Krunch (site web personnel) . En réponse à la dépêche Des nouvelles du noyau Debian. Évalué à 1.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: Alors moi j'ai des fortunes.
Posté par Krunch (site web personnel) . En réponse au journal ha le php et ses élites. Évalué à 1.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: Petit joueur....j
Posté par Krunch (site web personnel) . En réponse au journal ha le php et ses élites. Évalué à 6.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Alors moi j'ai des fortunes.
Posté par Krunch (site web personnel) . En réponse au journal ha le php et ses élites. Évalué à 3.
Et quelques unes que j'ai du boulot :
/*
* Initially, we populate the island with all the rifraff peers
* that happen to be lying around. Those with seriously
* defective clocks are immediately booted off the island. Then,
* the falsetickers are culled and put to sea. The truechimers
* remaining are subject to repeated rounds where the most
* unpopular at each round is kicked off. When the population
* has dwindled to sys_minclock, the survivors split a million
* bucks and collectively crank the chimes.
*/
-- ntp-4.2.2p1/ntpd/ntp_proto.c:clock_select()
%
select(0, NULL, NULL, NULL, &tv); // ought to loop until done
-- top.c
%
ret = setsockopt(sockfd, TC_IPPROTO, SO_SET_REPLACE, repl,
sizeof(*repl) + repl->size);
if (ret < 0) {
errno = ret;
-- iptables/libiptc/libiptc.c:TC_COMMIT()
%
<XXX> kernel: Badness in __writeback_single_inode -- does that telle something to anyone ?
<YYY> XXX, it means __writeback_single_inode was coded by samuel l. jackson
%
if (pn->inode==inode) {
/* Some warning should be appropriate here
as we got multiple processes for one i-node */
return;
}
-- netstat.c
%
#define PRG_HASHIT(x) ((x) % PRG_HASH_SIZE)
-- netstat.c
%
* XXX is trying to understand how coreutils' get_date() works
* XXX feels pathetic
%
J'en ai aussi sur TDWTF.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: Ton dédié mutualisé?
Posté par Krunch (site web personnel) . En réponse au journal Hébergement mutualisé, petit état des lieux. Évalué à 4.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: À rebours?
Posté par Krunch (site web personnel) . En réponse à la dépêche GDB 7.0 et le déverminage concurrentiel à rebours. Évalué à 3.
C'est juste qu'au final ça revient au même qu'à stocker tout l'état à chaque instruction, la manière dont c'est « compressé » ne sont que des « détails » d'optimisation.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: Et il y aurait des vidéos ?
Posté par Krunch (site web personnel) . En réponse au journal mes présentations: à l'OSDC, et jeudi prochain. Évalué à 4.
Ouch. PHAIL.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: Et il y aurait des vidéos ?
Posté par Krunch (site web personnel) . En réponse au journal mes présentations: à l'OSDC, et jeudi prochain. Évalué à 2.
Sinon, les présentations de la salle « Agora » ont été diffusées en presque direct sur internet. J'ose espérer qu'elles ont été enregistrées mais si c'est le cas je ne sais pas quand elles seront mises à disposition.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: À rebours?
Posté par Krunch (site web personnel) . En réponse à la dépêche GDB 7.0 et le déverminage concurrentiel à rebours. Évalué à 5.
Par contre il me semble que ODB garde bien une trace de tout l'état du programme à chaque instruction (comme s'il était en mode « target record » en permanence donc).
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: hein ?
Posté par Krunch (site web personnel) . En réponse à la dépêche GDB 7.0 et le déverminage concurrentiel à rebours. Évalué à 7.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: séparationj
Posté par Krunch (site web personnel) . En réponse au journal Passage du noyau Debian 2.6.30-2 au noyau Vanilla 2.6.31-2. Évalué à 5.
> J'ai justement un petit disque dur super rapide, et un CPU super lent
> (1,6Ghz, c'est peu par rapport au DD qui peut fournir 110Mio/s).
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: Retour d'experience?
Posté par Krunch (site web personnel) . En réponse à la dépêche SystemTap 1.0 et Valgrind 3.5. Évalué à 2.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: Espion qdisc et/ou Courbe temps-réel d'historique de variable kerne
Posté par Krunch (site web personnel) . En réponse au journal Espion qdisc et/ou Courbe temps-réel d'historique de variable kernel. Évalué à 10.
Malgré le manque de documentation et le peu d'explication, je pense avoir plus ou moins compris ce qu'est censé faire Clownix-Spy. Cependant, je m'interroge sur les choix techniques qui ont été réalisés.
Notamment, je crois comprendre que l'idée est de permettre l'observation de certains éléments interne au noyau. Cela nécessite cependant l'écriture de modules avec tous les risques et complications que cela comporte. Or, le projet SystemTap aborde déjà cette problèmatique et est relativement mature et intégré à plusieurs distributions. Ma question est donc : pourquoi ne pas se baser sur SystemTap ? Cela a-t-il été envisagé et rejeté ? Pourquoi ?
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: J'ai rien panéj
Posté par Krunch (site web personnel) . En réponse au journal Espion qdisc et/ou Courbe temps-réel d'historique de variable kernel. Évalué à 4.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: Bon c'est peut etre dans les details....
Posté par Krunch (site web personnel) . En réponse au message Aide pour débogger un module. Évalué à 4.
Si. Mais pas dans les logs. Si t'as pas la possibilité de monter une console série, tu peux essayer netconsole. Mais bon, après, k(g)db redevient peut-être plus pratique aussi.
> Pour les while, c'est juste pour être sûr que j'obtient le lock.
J'ai pas regardé le code mais ça pue assez bien ton truc là, que ça soit lié au problème ou non.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: Bon c'est peut etre dans les details....
Posté par Krunch (site web personnel) . En réponse au message Aide pour débogger un module. Évalué à 3.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: Retour d'experience?
Posté par Krunch (site web personnel) . En réponse à la dépêche SystemTap 1.0 et Valgrind 3.5. Évalué à 1.
De ce que j'en ai compris, DTrace a plus de fonctionnalités que SystemTap mais les développeurs stap travaillent à rattraper le retard. La version 1.0 est juste une continuité mais ne marque pas vraiment une avancée soudaine et importante.
OProfile n'est pas vraiment comparable à DTrace ou SystemTap. OProfile permet « juste » de se faire une idée de ce à quoi les CPUs passent leur temps de manière efficace tandis que DTrace et SystemTap permettent d'instrumenter à peu près tout et n'importe quoi de manière très fine.
En pratique, pour du profiling sur un truc CPU-bound, on va utiliser OProfile pour se faire une idée de la zone à instrumenter puis SystemTap pour observer plus précisement le code qui pose problème. Quand on perd son temps dans les I/O, OProfile est a peu près inutile. Par contre on peut utiliser blktrace et toujours SystemTap une fois qu'on sait ce qu'on veut instrumenter.
SystemTap est cependant bien plus qu'un outil de mesure de performance. L'exemple typique étant sigkill.stp qui permet de répondre à la question « Qui est-ce qui envoi un SIGKILL à mon process ? » http://sourceware.org/systemtap/examples/process/sigkill.stp
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: 0 commentaire
Posté par Krunch (site web personnel) . En réponse à la dépêche SystemTap 1.0 et Valgrind 3.5. Évalué à 2.
> et rarement installé
Le passage à la version 1.0 ne marque pas le passage à une version stable. SystemTap est stable et utilisable et utilisé en production depuis un bon moment. Par contre, il est vrai qu'il manque encore pas mal de visibilité et les versions stables en 0.x n'ont sans doute pas aidé.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.