J'ai un programme qui tourne bien, assez rapidement (manageip_byprojet)
Le détail du programme n'a pas d'importance à mes yeux pour comprendre
la suite.
Par curiosité, qd je regarde avec la commande strace, je vois beaucoup
d'appels systemes non optimises.
0.000074 stat64("/usr/lib/perl5/vendor_perl/5.8.6/Term/ANSIColor.pmc",
0xbfb8e63c) = -1 ENOENT (No such file or directory)
0.000781
open("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/i686/sse2/libperl.so",
O_RDONLY) = -1 ENOENT (No such file or directory)
0.000831
stat64("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/i686/sse2",
0xbff307a8) = -1 ENOENT (No such file or directory)
0.000850
open("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/i686/libperl.so",
O_RDONLY) = -1 ENOENT (No such file or directory)
0.000698
stat64("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/i686",
0xbff307a8) = -1 ENOENT (No such file or directory)
0.000855
open("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/sse2/libperl.so",
O_RDONLY) = -1 ENOENT (No such file or directory)
0.001050
stat64("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/sse2",
0xbff307a8) = -1 ENOENT (No such file or directory)
0.000788
open("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/libperl.so",
O_RDONLY) = -1 ENOENT (No such file or directory)
Comment éviter les multiples lignes telles que celles-ci ? (> 900)
PS : perl a été installé via un rpm. Peut on modifier le @INC sans
recompiler ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Paul Gaborit
À (at) Sat, 14 Feb 2009 11:44:55 +0100, apolloj écrivait (wrote):
Par curiosité, qd je regarde avec la commande strace, je vois beaucoup d'appels systemes non optimises.
Heu... L'appel système lui-même est optimisé ou, en tous cas, s'il ne l'est pas cela n'a rien à voir avec perl. Ce que vous constatez, c'est que perl fait appel à de nombreux appels systèmes de manière inefficace (de votre point de vue et pour votre programme).
0.000074 stat64("/usr/lib/perl5/vendor_perl/5.8.6/Term/ANSIColor.pmc", 0xbfb8e63c) = -1 ENOENT (No such file or directory) 0.000781 open("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/i686/sse2/libperl.so", O_RDONLY) = -1 ENOENT (No such file or directory) 0.000831 stat64("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/i686/sse2", 0xbff307a8) = -1 ENOENT (No such file or directory) 0.000850 open("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/i686/libperl.so", O_RDONLY) = -1 ENOENT (No such file or directory) 0.000698 stat64("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/i686", 0xbff307a8) = -1 ENOENT (No such file or directory) 0.000855 open("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/sse2/libperl.so", O_RDONLY) = -1 ENOENT (No such file or directory) 0.001050 stat64("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/sse2", 0xbff307a8) = -1 ENOENT (No such file or directory) 0.000788 open("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/libperl.so", O_RDONLY) = -1 ENOENT (No such file or directory)
Comment éviter les multiples lignes telles que celles-ci ? (> 900)
PS : perl a été installé via un rpm. Peut on modifier le @INC sans recompiler ?
On ne peut pas modifier @INC de manière globale sans recompilation. En revanche, on peut le modifier pour un script donné.
C'est sûr que c'est un peu long comme liste. Si vous n'utilisez aucun module datant de versions antérieures de pelr, vous pouvez déjà supprimer tous les répertoire qui font référence à une version autre que 5.8.8.
Pour ce faire, ajoutez dès le début de votre script quelques lignes comme celles ci-dessous (à adapter à votre besoin) :
Ça devrait faire diminuer le nombre de recherches infructueuses.
Une autre solution plus radicale consisterait à embarquer tout le code Perl de vos modules directement dans votre script, à placer tous les codes externes (.so et autres) dans le même répertoire que le script et à ne placer que '.' dans @INC.
PS : ces 'optimisations' n'ont pas vraiment de sens. En effet l'exécution de votre script consomme un peu plus d'une seconde et l'ensemble des appels à stat64 ne consomme que 4ms (d'ailleurs ce dernier temps doit être variable selon l'état du cache disque).
-- Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/> Perl en français - <http://perl.mines-albi.fr/>
À (at) Sat, 14 Feb 2009 11:44:55 +0100,
apolloj <apolloj_net@NOSPAMmsn.com> écrivait (wrote):
Par curiosité, qd je regarde avec la commande strace, je vois beaucoup
d'appels systemes non optimises.
Heu... L'appel système lui-même est optimisé ou, en tous cas, s'il ne
l'est pas cela n'a rien à voir avec perl. Ce que vous constatez,
c'est que perl fait appel à de nombreux appels systèmes de manière
inefficace (de votre point de vue et pour votre programme).
0.000074 stat64("/usr/lib/perl5/vendor_perl/5.8.6/Term/ANSIColor.pmc",
0xbfb8e63c) = -1 ENOENT (No such file or directory)
0.000781
open("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/i686/sse2/libperl.so",
O_RDONLY) = -1 ENOENT (No such file or directory)
0.000831
stat64("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/i686/sse2",
0xbff307a8) = -1 ENOENT (No such file or directory)
0.000850
open("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/i686/libperl.so",
O_RDONLY) = -1 ENOENT (No such file or directory)
0.000698
stat64("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/i686",
0xbff307a8) = -1 ENOENT (No such file or directory)
0.000855
open("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/sse2/libperl.so",
O_RDONLY) = -1 ENOENT (No such file or directory)
0.001050
stat64("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/sse2",
0xbff307a8) = -1 ENOENT (No such file or directory)
0.000788
open("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/libperl.so",
O_RDONLY) = -1 ENOENT (No such file or directory)
Comment éviter les multiples lignes telles que celles-ci ? (> 900)
PS : perl a été installé via un rpm. Peut on modifier le @INC sans
recompiler ?
On ne peut pas modifier @INC de manière globale sans recompilation. En
revanche, on peut le modifier pour un script donné.
C'est sûr que c'est un peu long comme liste. Si vous n'utilisez aucun
module datant de versions antérieures de pelr, vous pouvez déjà
supprimer tous les répertoire qui font référence à une version autre
que 5.8.8.
Pour ce faire, ajoutez dès le début de votre script quelques lignes
comme celles ci-dessous (à adapter à votre besoin) :
Ça devrait faire diminuer le nombre de recherches infructueuses.
Une autre solution plus radicale consisterait à embarquer tout le code
Perl de vos modules directement dans votre script, à placer tous les
codes externes (.so et autres) dans le même répertoire que le script
et à ne placer que '.' dans @INC.
PS : ces 'optimisations' n'ont pas vraiment de sens. En effet
l'exécution de votre script consomme un peu plus d'une seconde et
l'ensemble des appels à stat64 ne consomme que 4ms (d'ailleurs ce
dernier temps doit être variable selon l'état du cache disque).
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
À (at) Sat, 14 Feb 2009 11:44:55 +0100, apolloj écrivait (wrote):
Par curiosité, qd je regarde avec la commande strace, je vois beaucoup d'appels systemes non optimises.
Heu... L'appel système lui-même est optimisé ou, en tous cas, s'il ne l'est pas cela n'a rien à voir avec perl. Ce que vous constatez, c'est que perl fait appel à de nombreux appels systèmes de manière inefficace (de votre point de vue et pour votre programme).
0.000074 stat64("/usr/lib/perl5/vendor_perl/5.8.6/Term/ANSIColor.pmc", 0xbfb8e63c) = -1 ENOENT (No such file or directory) 0.000781 open("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/i686/sse2/libperl.so", O_RDONLY) = -1 ENOENT (No such file or directory) 0.000831 stat64("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/i686/sse2", 0xbff307a8) = -1 ENOENT (No such file or directory) 0.000850 open("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/i686/libperl.so", O_RDONLY) = -1 ENOENT (No such file or directory) 0.000698 stat64("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/i686", 0xbff307a8) = -1 ENOENT (No such file or directory) 0.000855 open("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/sse2/libperl.so", O_RDONLY) = -1 ENOENT (No such file or directory) 0.001050 stat64("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/sse2", 0xbff307a8) = -1 ENOENT (No such file or directory) 0.000788 open("/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/tls/libperl.so", O_RDONLY) = -1 ENOENT (No such file or directory)
Comment éviter les multiples lignes telles que celles-ci ? (> 900)
PS : perl a été installé via un rpm. Peut on modifier le @INC sans recompiler ?
On ne peut pas modifier @INC de manière globale sans recompilation. En revanche, on peut le modifier pour un script donné.
C'est sûr que c'est un peu long comme liste. Si vous n'utilisez aucun module datant de versions antérieures de pelr, vous pouvez déjà supprimer tous les répertoire qui font référence à une version autre que 5.8.8.
Pour ce faire, ajoutez dès le début de votre script quelques lignes comme celles ci-dessous (à adapter à votre besoin) :
Ça devrait faire diminuer le nombre de recherches infructueuses.
Une autre solution plus radicale consisterait à embarquer tout le code Perl de vos modules directement dans votre script, à placer tous les codes externes (.so et autres) dans le même répertoire que le script et à ne placer que '.' dans @INC.
PS : ces 'optimisations' n'ont pas vraiment de sens. En effet l'exécution de votre script consomme un peu plus d'une seconde et l'ensemble des appels à stat64 ne consomme que 4ms (d'ailleurs ce dernier temps doit être variable selon l'état du cache disque).
-- Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/> Perl en français - <http://perl.mines-albi.fr/>