IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Bench d'un script


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut Bench d'un script
    Bonjour,

    Je voudrais connaître le temps d'exécution de xslroff (génération de pdf à partir de xsl-fo) pour une centaine de documents.

    J'ai commencé par ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
    CHM=/home/hiltg/Desktop/xmlroff-0.3.9/files
    cd $CHM
     
    for ((i = 1; i <= 10; i++));
    do
    	(xmlroff -o out/facture-pl_$i.pdf facture-pl.xml facture-pl.xsl &);
    done;
    Comme ça j'ai un processus par génération de document (soit 10 processus).
    J'aimerais bien connaître le temps d'exécution global mais si je fais time ./script.sh, vu que tout part sur les fils le script se termine de suite et mon time ne veut rien dire.
    Je voudrais aussi (moins important, je peux visualiser par top) connaître la consommation mémoire et processus globale de ces 10 générations.

    Quelqu'un pourrait-il m'aider svp ?

  2. #2
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Enlève le '&' de la commande que tu lances dans ta boucle, et avec time, ça devrait passer...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    Oui mais si je l'enlève, chaque processus sera lancé à la suite et plus par un fils différent.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 111
    Points : 142
    Points
    142
    Par défaut
    (pas sur que ca marche):

    1. mets le time dans tes sous shell; ca apparaitra sur ta console:
    2. déplace ton & a la fin des commande du sous shell

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (time; xmlroff -o out/facture-pl_$i.pdf facture-pl.xml facture-pl.xsl; time)&;

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    Merci mais dans ce cas là le time ne sera plus global mais propre à chaque fils

  6. #6
    Membre averti
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Points : 330
    Points
    330
    Par défaut
    Tu peux utiliser la solution de mhooreman et conserver le résultat dans une variable en redirigeant la sortie de time avec un pipe.

    En ne conservant que la plus grande durée , tu obtiens la temps d'exécution global.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    Oui mais comme il s'agit d'un bench nécessaire avant un passage en production à plus grande échelle, j'ai besoin de données précisés

    Sinon je voulais sommer les résultats des time, en les stockants dans un fichier (ou dans plusieurs), comment pourrais-je m'y prendre ? (expr et cut je pense mais ensuite je sèche un peu)

  8. #8
    Membre averti
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Points : 330
    Points
    330
    Par défaut
    Je ne comprends pas en quoi la méthode que je te propose réduit la précision :

    Et si tu sommes les résultats des times comme tu le proposes, tu obtiens le même résultat qu'en les exécutant <Edit>un par un</Edit> (et non en parallèle)), non ?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    Tu dis de stocker le temps dans une variable en ne conservant que le plus long mais si le fils ayant pris le plus de temps à s'exécuter n'aura pas été lancé en premier, le résultat sera faussé.

    Je cherche à obtenir le temps total d'exécution du script, avec les fils en multi-processus donc il faut que le time démarre avant le premier fork et se termine après l'exécution du dernier

    Ou alors je comprends mal.

  10. #10
    Membre averti
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Points : 330
    Points
    330
    Par défaut
    Oui en effet, je n'avais pas pensé à ce détail non négligeable.

    Et bien me voilà pris au dépourvu, je ne vois pas d'autre solution que de passer par la programmation en utilisant un langage adpaté qui gère les threads.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    A moins que je ne puisse tester si le père a encore des fils qui tournent et ne pas terminer le script tant que c'est le cas ?

  12. #12
    Membre averti
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Points : 330
    Points
    330
    Par défaut
    Oui, bonne idée.

    Après une recherche dans le man de bash, j'ai trouvé qu'il existe une commande très simple pour attendre la fin d'un job ou de tous les jobs fils : wait

    Donc la solution à ton problème est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #!/bin/bash
    CHM=/home/hiltg/Desktop/xmlroff-0.3.9/files
    cd $CHM
     
    for ((i = 1; i <= 10; i++));
    do
       xmlroff -o out/facture-pl_$i.pdf facture-pl.xml facture-pl.xsl &
    done;
    wait
    puis :

    J'ai testé avec des sleep en parallèle et l'un après l'autre, ça marche

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    Le wait me semble familier j'avais déjà dû essayer.
    Je vais tester ça merci

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    Ca marche parfaitement merci

    Ca prend un peu plus de temps en multi-processus qu'en mono sur mon Celeron mais sur un bon serveur bi-coeur ma différence devrait être plus significative à l'avance du multi-proc.

  15. #15
    Membre averti
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Points : 330
    Points
    330
    Par défaut
    Pense au bouton

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    En effet

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 07h45
  2. quel langage choisir pour faire de script sous windows
    Par pas05 dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 18/11/2002, 22h42
  3. Réponses: 2
    Dernier message: 11/07/2002, 08h31
  4. [réseaux] Bench en Perl pour avoir le débit entre 2 pc
    Par Frich dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 22/05/2002, 17h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo