Désolé mais je ne connais Nagios que de nom, je n'ai jamais pris le
temps de m'y mettre (pas de besoin non plus).
En regardant vite fait,
j'ai trouvé ça (Perl) :
<http://www.pplusdomain.net/Writing%20Nagios%20Plugins%20in%20Perl.pdf>
<http://search.cpan.org/~maxschube/Nagios-Plugin-SNMP-1.2/lib/Nagios/Plugin/SNMP.pm>
Si j'ai bien compris un plugin snmp consiste en :
1) faire une requête snmp ou exécuter une commande local
2) analyser la réponse
3) renvoyer sur la sortie standard : état - informations
Pour les perf, à quel niveau est-ce que ça coince ?
Désolé mais je ne connais Nagios que de nom, je n'ai jamais pris le
temps de m'y mettre (pas de besoin non plus).
En regardant vite fait,
j'ai trouvé ça (Perl) :
<http://www.pplusdomain.net/Writing%20Nagios%20Plugins%20in%20Perl.pdf>
<http://search.cpan.org/~maxschube/Nagios-Plugin-SNMP-1.2/lib/Nagios/Plugin/SNMP.pm>
Si j'ai bien compris un plugin snmp consiste en :
1) faire une requête snmp ou exécuter une commande local
2) analyser la réponse
3) renvoyer sur la sortie standard : état - informations
Pour les perf, à quel niveau est-ce que ça coince ?
Désolé mais je ne connais Nagios que de nom, je n'ai jamais pris le
temps de m'y mettre (pas de besoin non plus).
En regardant vite fait,
j'ai trouvé ça (Perl) :
<http://www.pplusdomain.net/Writing%20Nagios%20Plugins%20in%20Perl.pdf>
<http://search.cpan.org/~maxschube/Nagios-Plugin-SNMP-1.2/lib/Nagios/Plugin/SNMP.pm>
Si j'ai bien compris un plugin snmp consiste en :
1) faire une requête snmp ou exécuter une commande local
2) analyser la réponse
3) renvoyer sur la sortie standard : état - informations
Pour les perf, à quel niveau est-ce que ça coince ?
Je viens de regarder ce module Perl, il dépend du module Net::SNMP
qui est le module que j'avais utilisé pour faire mes tests en Perl.
Et j'avais une charge CPU plus élevé qu'avec du shell sh.
Et donc au niveau de mes plugins SNMP codés en shell, je dois gérer
des options communes par rapport à l'authentification SNMP (car ce
protocole nécessite une forme d'authentification via des mots de passe,
authentification qui se base sur des éléments différents suivant qu'on
utilise SNMP v2 ou v3).
Pour les perf, à quel niveau est-ce que ça coince ?
C'est juste au niveau de la charge CPU où je vois qu'elle augmente
un peu quand je remplace un plugin shell par une version dans un
autre langage. En fait, je ne suis pas amusé à remplacer tous mes
plugins shell en Perl par exemple pour tester ensuite. Je me contente
de prendre un plugin en particulier (assez simple), je le code en
Perl par exemple, puis je le lance en boucle à destination d'une
série d'hôtes. Je fais la même chose avec la version shell du plugin
et je compare le temps d'exécution et la charge CPU. J'ai procédé
ainsi pour shell vs Python et shell vs Perl et c'est shell le
« gagnant ».
Je viens de regarder ce module Perl, il dépend du module Net::SNMP
qui est le module que j'avais utilisé pour faire mes tests en Perl.
Et j'avais une charge CPU plus élevé qu'avec du shell sh.
Et donc au niveau de mes plugins SNMP codés en shell, je dois gérer
des options communes par rapport à l'authentification SNMP (car ce
protocole nécessite une forme d'authentification via des mots de passe,
authentification qui se base sur des éléments différents suivant qu'on
utilise SNMP v2 ou v3).
Pour les perf, à quel niveau est-ce que ça coince ?
C'est juste au niveau de la charge CPU où je vois qu'elle augmente
un peu quand je remplace un plugin shell par une version dans un
autre langage. En fait, je ne suis pas amusé à remplacer tous mes
plugins shell en Perl par exemple pour tester ensuite. Je me contente
de prendre un plugin en particulier (assez simple), je le code en
Perl par exemple, puis je le lance en boucle à destination d'une
série d'hôtes. Je fais la même chose avec la version shell du plugin
et je compare le temps d'exécution et la charge CPU. J'ai procédé
ainsi pour shell vs Python et shell vs Perl et c'est shell le
« gagnant ».
Je viens de regarder ce module Perl, il dépend du module Net::SNMP
qui est le module que j'avais utilisé pour faire mes tests en Perl.
Et j'avais une charge CPU plus élevé qu'avec du shell sh.
Et donc au niveau de mes plugins SNMP codés en shell, je dois gérer
des options communes par rapport à l'authentification SNMP (car ce
protocole nécessite une forme d'authentification via des mots de passe,
authentification qui se base sur des éléments différents suivant qu'on
utilise SNMP v2 ou v3).
Pour les perf, à quel niveau est-ce que ça coince ?
C'est juste au niveau de la charge CPU où je vois qu'elle augmente
un peu quand je remplace un plugin shell par une version dans un
autre langage. En fait, je ne suis pas amusé à remplacer tous mes
plugins shell en Perl par exemple pour tester ensuite. Je me contente
de prendre un plugin en particulier (assez simple), je le code en
Perl par exemple, puis je le lance en boucle à destination d'une
série d'hôtes. Je fais la même chose avec la version shell du plugin
et je compare le temps d'exécution et la charge CPU. J'ai procédé
ainsi pour shell vs Python et shell vs Perl et c'est shell le
« gagnant ».
Je viens de regarder ce module Perl, il dépend du module Net::SNMP
qui est le module que j'avais utilisé pour faire mes tests en Perl.
Et j'avais une charge CPU plus élevé qu'avec du shell sh.
Ça n'est pas le shell qui compte ici, c'est la commande avec laquelle tu
fais ta requête snmp (snmpget ?).
Tu pourrais aussi bien la lancer en
Perl (ou autre chose) si c'est réellement le goulot d'étranglement.
Et donc au niveau de mes plugins SNMP codés en shell, je dois gérer
des options communes par rapport à l'authentification SNMP (car ce
protocole nécessite une forme d'authentification via des mots de passe,
authentification qui se base sur des éléments différents suivant qu'on
utilise SNMP v2 ou v3).
Et la commande que tu utilises n'a pas la possibilité d'utiliser un
fichier de configuration pour obtenir ces informations (snmp.conf(5)) ?
C'est juste au niveau de la charge CPU où je vois qu'elle augmente
un peu quand je remplace un plugin shell par une version dans un
autre langage. En fait, je ne suis pas amusé à remplacer tous mes
plugins shell en Perl par exemple pour tester ensuite. Je me contente
de prendre un plugin en particulier (assez simple), je le code en
Perl par exemple, puis je le lance en boucle à destination d'une
série d'hôtes. Je fais la même chose avec la version shell du plugin
et je compare le temps d'exécution et la charge CPU. J'ai procédé
ainsi pour shell vs Python et shell vs Perl et c'est shell le
« gagnant ».
Donc la commande écrite en C (ou C++).
Aurais-tu, par hasard, des
chiffres pour me permettre de savoir ce que tu quantifies comme
« un peu » ? Il serait également intéressant de voir les scripts.
Je viens de regarder ce module Perl, il dépend du module Net::SNMP
qui est le module que j'avais utilisé pour faire mes tests en Perl.
Et j'avais une charge CPU plus élevé qu'avec du shell sh.
Ça n'est pas le shell qui compte ici, c'est la commande avec laquelle tu
fais ta requête snmp (snmpget ?).
Tu pourrais aussi bien la lancer en
Perl (ou autre chose) si c'est réellement le goulot d'étranglement.
Et donc au niveau de mes plugins SNMP codés en shell, je dois gérer
des options communes par rapport à l'authentification SNMP (car ce
protocole nécessite une forme d'authentification via des mots de passe,
authentification qui se base sur des éléments différents suivant qu'on
utilise SNMP v2 ou v3).
Et la commande que tu utilises n'a pas la possibilité d'utiliser un
fichier de configuration pour obtenir ces informations (snmp.conf(5)) ?
C'est juste au niveau de la charge CPU où je vois qu'elle augmente
un peu quand je remplace un plugin shell par une version dans un
autre langage. En fait, je ne suis pas amusé à remplacer tous mes
plugins shell en Perl par exemple pour tester ensuite. Je me contente
de prendre un plugin en particulier (assez simple), je le code en
Perl par exemple, puis je le lance en boucle à destination d'une
série d'hôtes. Je fais la même chose avec la version shell du plugin
et je compare le temps d'exécution et la charge CPU. J'ai procédé
ainsi pour shell vs Python et shell vs Perl et c'est shell le
« gagnant ».
Donc la commande écrite en C (ou C++).
Aurais-tu, par hasard, des
chiffres pour me permettre de savoir ce que tu quantifies comme
« un peu » ? Il serait également intéressant de voir les scripts.
Je viens de regarder ce module Perl, il dépend du module Net::SNMP
qui est le module que j'avais utilisé pour faire mes tests en Perl.
Et j'avais une charge CPU plus élevé qu'avec du shell sh.
Ça n'est pas le shell qui compte ici, c'est la commande avec laquelle tu
fais ta requête snmp (snmpget ?).
Tu pourrais aussi bien la lancer en
Perl (ou autre chose) si c'est réellement le goulot d'étranglement.
Et donc au niveau de mes plugins SNMP codés en shell, je dois gérer
des options communes par rapport à l'authentification SNMP (car ce
protocole nécessite une forme d'authentification via des mots de passe,
authentification qui se base sur des éléments différents suivant qu'on
utilise SNMP v2 ou v3).
Et la commande que tu utilises n'a pas la possibilité d'utiliser un
fichier de configuration pour obtenir ces informations (snmp.conf(5)) ?
C'est juste au niveau de la charge CPU où je vois qu'elle augmente
un peu quand je remplace un plugin shell par une version dans un
autre langage. En fait, je ne suis pas amusé à remplacer tous mes
plugins shell en Perl par exemple pour tester ensuite. Je me contente
de prendre un plugin en particulier (assez simple), je le code en
Perl par exemple, puis je le lance en boucle à destination d'une
série d'hôtes. Je fais la même chose avec la version shell du plugin
et je compare le temps d'exécution et la charge CPU. J'ai procédé
ainsi pour shell vs Python et shell vs Perl et c'est shell le
« gagnant ».
Donc la commande écrite en C (ou C++).
Aurais-tu, par hasard, des
chiffres pour me permettre de savoir ce que tu quantifies comme
« un peu » ? Il serait également intéressant de voir les scripts.
Ça veut dire que si je vire toute la partie SNMP d'un plugin
en perl pour y faire un appel système de la commande snmpget
alors j'aurai des perf à peu près identique entre un plugin
perl et son équivalent en shell ?
Je ne sais pas faire un appel à une commande en perl tout en
récupérant la sortie ainsi que le exit code (je suis un débutant
en Perl), mais il faudra que je regarde ça.
Et la commande que tu utilises n'a pas la possibilité d'utiliser un
fichier de configuration pour obtenir ces informations (snmp.conf(5)) ?
Si mais c'est exclu pour moi. Je m'explique. C'est le logiciel
de supervision qui lance les plugins avec les bons arguments etc.
Et en l'occurrence c'est dans la conf du logiciel de supervision
que sont stockés les divers mots de passe SNMP des hôtes. Et d'un
hôte à un autre, ça peut changer. Par exemple, certains hôtes ne
« parlent » même pas le SNMP v3 mais seulement le v2, deux hôtes
en SNMP v3 n'ont pas forcément les mêmes mots de passe (même si
c'est souvent le cas, ce n'est pas systématique) etc. Bref, le
logiciel voit tout ça dans *sa* conf à lui et en fonction de cela,
il lancera les plugins avec les bons arguments (ie les bons mots de
passe SNMP entre autres). Je ne peux pas et ne dois pas sortir de ce
schéma là.
En l'occurrence, je crois bien que net-snmp (l'implémentation sous
Linux de SNMP partie serveur et client) est codé en C. Donc, d'après
toi, c'est là où le shell « l'emporterait » ? Ce qui voudrait donc
dire en effet que ce n'est pas le shell en lui-même qui l'emporterait
mais le fait qu'il fasse appel à une implémentation de SNMP client
plus performante que l'implémentation SNMP utilisée par Perl ? Le
reste selon toi serait négligeable ?
Ça veut dire que si je vire toute la partie SNMP d'un plugin
en perl pour y faire un appel système de la commande snmpget
alors j'aurai des perf à peu près identique entre un plugin
perl et son équivalent en shell ?
Je ne sais pas faire un appel à une commande en perl tout en
récupérant la sortie ainsi que le exit code (je suis un débutant
en Perl), mais il faudra que je regarde ça.
Et la commande que tu utilises n'a pas la possibilité d'utiliser un
fichier de configuration pour obtenir ces informations (snmp.conf(5)) ?
Si mais c'est exclu pour moi. Je m'explique. C'est le logiciel
de supervision qui lance les plugins avec les bons arguments etc.
Et en l'occurrence c'est dans la conf du logiciel de supervision
que sont stockés les divers mots de passe SNMP des hôtes. Et d'un
hôte à un autre, ça peut changer. Par exemple, certains hôtes ne
« parlent » même pas le SNMP v3 mais seulement le v2, deux hôtes
en SNMP v3 n'ont pas forcément les mêmes mots de passe (même si
c'est souvent le cas, ce n'est pas systématique) etc. Bref, le
logiciel voit tout ça dans *sa* conf à lui et en fonction de cela,
il lancera les plugins avec les bons arguments (ie les bons mots de
passe SNMP entre autres). Je ne peux pas et ne dois pas sortir de ce
schéma là.
En l'occurrence, je crois bien que net-snmp (l'implémentation sous
Linux de SNMP partie serveur et client) est codé en C. Donc, d'après
toi, c'est là où le shell « l'emporterait » ? Ce qui voudrait donc
dire en effet que ce n'est pas le shell en lui-même qui l'emporterait
mais le fait qu'il fasse appel à une implémentation de SNMP client
plus performante que l'implémentation SNMP utilisée par Perl ? Le
reste selon toi serait négligeable ?
Ça veut dire que si je vire toute la partie SNMP d'un plugin
en perl pour y faire un appel système de la commande snmpget
alors j'aurai des perf à peu près identique entre un plugin
perl et son équivalent en shell ?
Je ne sais pas faire un appel à une commande en perl tout en
récupérant la sortie ainsi que le exit code (je suis un débutant
en Perl), mais il faudra que je regarde ça.
Et la commande que tu utilises n'a pas la possibilité d'utiliser un
fichier de configuration pour obtenir ces informations (snmp.conf(5)) ?
Si mais c'est exclu pour moi. Je m'explique. C'est le logiciel
de supervision qui lance les plugins avec les bons arguments etc.
Et en l'occurrence c'est dans la conf du logiciel de supervision
que sont stockés les divers mots de passe SNMP des hôtes. Et d'un
hôte à un autre, ça peut changer. Par exemple, certains hôtes ne
« parlent » même pas le SNMP v3 mais seulement le v2, deux hôtes
en SNMP v3 n'ont pas forcément les mêmes mots de passe (même si
c'est souvent le cas, ce n'est pas systématique) etc. Bref, le
logiciel voit tout ça dans *sa* conf à lui et en fonction de cela,
il lancera les plugins avec les bons arguments (ie les bons mots de
passe SNMP entre autres). Je ne peux pas et ne dois pas sortir de ce
schéma là.
En l'occurrence, je crois bien que net-snmp (l'implémentation sous
Linux de SNMP partie serveur et client) est codé en C. Donc, d'après
toi, c'est là où le shell « l'emporterait » ? Ce qui voudrait donc
dire en effet que ce n'est pas le shell en lui-même qui l'emporterait
mais le fait qu'il fasse appel à une implémentation de SNMP client
plus performante que l'implémentation SNMP utilisée par Perl ? Le
reste selon toi serait négligeable ?
Et la commande que tu utilises n'a pas la possibilité d'utiliser un
fichier de configuration pour obtenir ces informations (snmp.conf(5)) ?
Si mais c'est exclu pour moi. Je m'explique. C'est le logiciel
de supervision qui lance les plugins avec les bons arguments etc.
Et en l'occurrence c'est dans la conf du logiciel de supervision
que sont stockés les divers mots de passe SNMP des hôtes. Et d'un
hôte à un autre, ça peut changer. Par exemple, certains hôtes ne
« parlent » même pas le SNMP v3 mais seulement le v2, deux hôtes
en SNMP v3 n'ont pas forcément les mêmes mots de passe (même si
c'est souvent le cas, ce n'est pas systématique) etc. Bref, le
logiciel voit tout ça dans *sa* conf à lui et en fonction de cela,
il lancera les plugins avec les bons arguments (ie les bons mots de
passe SNMP entre autres). Je ne peux pas et ne dois pas sortir de ce
schéma là.
C'est bien là le problème à mon avis. Et je pense qu'utiliser des
variables d'environnement est la méthode la plus simple pour séparer les
arguments que tu dois passer au script et l'authentification aux
machines.
Il n'y a pas photo, snmpget est 3,7 fois plus rapide que son équivalent
en Perl.
Mais bon, Perl ne te sert pas à grand chose puisque tu ne
profites pas de Nagios::Plugin dont parlait le document que j'ai t'ai
indiqué précédemment. Notamment les « $np->add_arg() » qui devraient te
permettre de faire une fonction qui prendrait en argument ton objet
Nagios::Plugin et lui rajouterait toutes les options qui sont communes
à tous les scripts.
Note que l'option pass_through de Getopt::Long devrait te plaire
également.
Et la commande que tu utilises n'a pas la possibilité d'utiliser un
fichier de configuration pour obtenir ces informations (snmp.conf(5)) ?
Si mais c'est exclu pour moi. Je m'explique. C'est le logiciel
de supervision qui lance les plugins avec les bons arguments etc.
Et en l'occurrence c'est dans la conf du logiciel de supervision
que sont stockés les divers mots de passe SNMP des hôtes. Et d'un
hôte à un autre, ça peut changer. Par exemple, certains hôtes ne
« parlent » même pas le SNMP v3 mais seulement le v2, deux hôtes
en SNMP v3 n'ont pas forcément les mêmes mots de passe (même si
c'est souvent le cas, ce n'est pas systématique) etc. Bref, le
logiciel voit tout ça dans *sa* conf à lui et en fonction de cela,
il lancera les plugins avec les bons arguments (ie les bons mots de
passe SNMP entre autres). Je ne peux pas et ne dois pas sortir de ce
schéma là.
C'est bien là le problème à mon avis. Et je pense qu'utiliser des
variables d'environnement est la méthode la plus simple pour séparer les
arguments que tu dois passer au script et l'authentification aux
machines.
Il n'y a pas photo, snmpget est 3,7 fois plus rapide que son équivalent
en Perl.
Mais bon, Perl ne te sert pas à grand chose puisque tu ne
profites pas de Nagios::Plugin dont parlait le document que j'ai t'ai
indiqué précédemment. Notamment les « $np->add_arg() » qui devraient te
permettre de faire une fonction qui prendrait en argument ton objet
Nagios::Plugin et lui rajouterait toutes les options qui sont communes
à tous les scripts.
Note que l'option pass_through de Getopt::Long devrait te plaire
également.
Et la commande que tu utilises n'a pas la possibilité d'utiliser un
fichier de configuration pour obtenir ces informations (snmp.conf(5)) ?
Si mais c'est exclu pour moi. Je m'explique. C'est le logiciel
de supervision qui lance les plugins avec les bons arguments etc.
Et en l'occurrence c'est dans la conf du logiciel de supervision
que sont stockés les divers mots de passe SNMP des hôtes. Et d'un
hôte à un autre, ça peut changer. Par exemple, certains hôtes ne
« parlent » même pas le SNMP v3 mais seulement le v2, deux hôtes
en SNMP v3 n'ont pas forcément les mêmes mots de passe (même si
c'est souvent le cas, ce n'est pas systématique) etc. Bref, le
logiciel voit tout ça dans *sa* conf à lui et en fonction de cela,
il lancera les plugins avec les bons arguments (ie les bons mots de
passe SNMP entre autres). Je ne peux pas et ne dois pas sortir de ce
schéma là.
C'est bien là le problème à mon avis. Et je pense qu'utiliser des
variables d'environnement est la méthode la plus simple pour séparer les
arguments que tu dois passer au script et l'authentification aux
machines.
Il n'y a pas photo, snmpget est 3,7 fois plus rapide que son équivalent
en Perl.
Mais bon, Perl ne te sert pas à grand chose puisque tu ne
profites pas de Nagios::Plugin dont parlait le document que j'ai t'ai
indiqué précédemment. Notamment les « $np->add_arg() » qui devraient te
permettre de faire une fonction qui prendrait en argument ton objet
Nagios::Plugin et lui rajouterait toutes les options qui sont communes
à tous les scripts.
Note que l'option pass_through de Getopt::Long devrait te plaire
également.
Note que l'option pass_through de Getopt::Long devrait te plaire
également.
Mais je l'avais noté puisque je l'utilise dans le script Perl que
j'avais mis en lien dans mon message précédent. C'est typiquement
la fonctionnalité qui me manque avec la commande getopt dans le shell
pour séparer la gestion des options communes du reste des autres options.
Et donc avec Perl j'arrive à faire cette séparation grâce à ce
pass_through qui tombe à pic (cf le lien du message précédent).
Note que l'option pass_through de Getopt::Long devrait te plaire
également.
Mais je l'avais noté puisque je l'utilise dans le script Perl que
j'avais mis en lien dans mon message précédent. C'est typiquement
la fonctionnalité qui me manque avec la commande getopt dans le shell
pour séparer la gestion des options communes du reste des autres options.
Et donc avec Perl j'arrive à faire cette séparation grâce à ce
pass_through qui tombe à pic (cf le lien du message précédent).
Note que l'option pass_through de Getopt::Long devrait te plaire
également.
Mais je l'avais noté puisque je l'utilise dans le script Perl que
j'avais mis en lien dans mon message précédent. C'est typiquement
la fonctionnalité qui me manque avec la commande getopt dans le shell
pour séparer la gestion des options communes du reste des autres options.
Et donc avec Perl j'arrive à faire cette séparation grâce à ce
pass_through qui tombe à pic (cf le lien du message précédent).
On attend les stats mais il est certain que tous les appels vers des
commandes native du système seront toujours plus rapide que l'équivalent
en Perl.
On attend les stats mais il est certain que tous les appels vers des
commandes native du système seront toujours plus rapide que l'équivalent
en Perl.
On attend les stats mais il est certain que tous les appels vers des
commandes native du système seront toujours plus rapide que l'équivalent
en Perl.
On attend les stats mais il est certain que tous les appels vers des
commandes native du système seront toujours plus rapide que l'équivalent
en Perl.
Euh, gnî ? Tu peux justifier ce que affirmes là, s'il te plaît ?
On attend les stats mais il est certain que tous les appels vers des
commandes native du système seront toujours plus rapide que l'équivalent
en Perl.
Euh, gnî ? Tu peux justifier ce que affirmes là, s'il te plaît ?
On attend les stats mais il est certain que tous les appels vers des
commandes native du système seront toujours plus rapide que l'équivalent
en Perl.
Euh, gnî ? Tu peux justifier ce que affirmes là, s'il te plaît ?
Ce qui est évoqué précédemment : le snmpget codé en C est plus rapide
que l'équivalent en Perl.
Ce qui est évoqué précédemment : le snmpget codé en C est plus rapide
que l'équivalent en Perl.
Ce qui est évoqué précédemment : le snmpget codé en C est plus rapide
que l'équivalent en Perl.
C'est faux. Le boulot de snmpget se limite à formater une requête réseau,
recevoir la réponse et afficher le résultat. La majeure partie du temps est
passée dans des appels système, le travail effectivement fait par le
programme, et où peut se manifester la différence entre code compilé et
interprété, est négligeable.
Ce qui n'est pas négligeable, en revanche, c'est le surcroît de travail lié
à une commande externe : recherche du binaire dans les chemins, lancement
d'un nouveau processus, édition de liens dynamique. Tout ça n'arrive qu'au
début avec du code en perl, alors que c'est refait à chaque appel avec une
commande externe. Plus, dans le cas présent, les requêtes DNS, dont le
résultat peut être caché dans le cas de perl.
Si tu veux t'en convaincre, tu peux vérifier sur un cas plus simple, par
exemple renommer dix mille fichiers pour ajouter un préfixe au nom :
shell : for i in *; do mv $i p-$i; done
perl : perl -e 'for my $i (glob "*") { rename $i, "p-$i" }'
Il n'y a pas photo : chez moi, perl se termine en moins de 0,37 seconde
alors que le shell met presque 7 secondes.
C'est faux. Le boulot de snmpget se limite à formater une requête réseau,
recevoir la réponse et afficher le résultat. La majeure partie du temps est
passée dans des appels système, le travail effectivement fait par le
programme, et où peut se manifester la différence entre code compilé et
interprété, est négligeable.
Ce qui n'est pas négligeable, en revanche, c'est le surcroît de travail lié
à une commande externe : recherche du binaire dans les chemins, lancement
d'un nouveau processus, édition de liens dynamique. Tout ça n'arrive qu'au
début avec du code en perl, alors que c'est refait à chaque appel avec une
commande externe. Plus, dans le cas présent, les requêtes DNS, dont le
résultat peut être caché dans le cas de perl.
Si tu veux t'en convaincre, tu peux vérifier sur un cas plus simple, par
exemple renommer dix mille fichiers pour ajouter un préfixe au nom :
shell : for i in *; do mv $i p-$i; done
perl : perl -e 'for my $i (glob "*") { rename $i, "p-$i" }'
Il n'y a pas photo : chez moi, perl se termine en moins de 0,37 seconde
alors que le shell met presque 7 secondes.
C'est faux. Le boulot de snmpget se limite à formater une requête réseau,
recevoir la réponse et afficher le résultat. La majeure partie du temps est
passée dans des appels système, le travail effectivement fait par le
programme, et où peut se manifester la différence entre code compilé et
interprété, est négligeable.
Ce qui n'est pas négligeable, en revanche, c'est le surcroît de travail lié
à une commande externe : recherche du binaire dans les chemins, lancement
d'un nouveau processus, édition de liens dynamique. Tout ça n'arrive qu'au
début avec du code en perl, alors que c'est refait à chaque appel avec une
commande externe. Plus, dans le cas présent, les requêtes DNS, dont le
résultat peut être caché dans le cas de perl.
Si tu veux t'en convaincre, tu peux vérifier sur un cas plus simple, par
exemple renommer dix mille fichiers pour ajouter un préfixe au nom :
shell : for i in *; do mv $i p-$i; done
perl : perl -e 'for my $i (glob "*") { rename $i, "p-$i" }'
Il n'y a pas photo : chez moi, perl se termine en moins de 0,37 seconde
alors que le shell met presque 7 secondes.