Journal dash vs bash

Posté par  .
Étiquettes : aucune
0
7
août
2004
Suite a http://linuxfr.org/comments/454720.html#454720(...) , j'ai fait quelques tests sous dash, et on peut se rendre compte que les perf de bash sont desastreuse ...

sous bash :

date;for i in $(seq 100000); do echo $i > /dev/null;done;date
sam aoû 7 10:33:01 CEST 2004
sam aoû 7 10:33:13 CEST 2004


sous dash

date;for i in $(seq 100000); do echo $i > /dev/null;done;date
sam aoû 7 10:33:21 CEST 2004
sam aoû 7 10:33:25 CEST 2004


Et en plus a la fin dash libere vraiement la memoire...

ps v
PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND
2915 pts/0 Ss 0:11 8 625 14286 12200 1.1 -bash
3343 pts/1 S+ 0:04 0 77 1774 824 0.0 dash
3350 pts/0 R+ 0:00 0 62 2265 676 0.0 ps v



idem pour


date;i=0;while true; do if [ $i = 100000 ] ;then break; fi ;echo $i > /dev/null; i=$(($i+1));done;date

sous bash

sam aoû 7 10:38:36 CEST 2004
sam aoû 7 10:39:03 CEST 2004

et dash

sam aoû 7 10:39:14 CEST 2004
sam aoû 7 10:39:23 CEST 2004


bref je suis content d'avoir dash comme lien symbolique vers /bin/sh ...
  • # Time

    Posté par  (Mastodon) . Évalué à 7.

    Tes deux dates consécutives, c'est pour mesure le temps d'exécution de la commande ? Si oui, essaye la commande time, qui fait ça un peu mieux :-)

    time ta_commande

    ça t'affiche trois mesures:
    real 0m0.202s
    user 0m0.002s
    sys 0m0.005s

    Et tu as pas mal d'options.
    • [^] # Re: Time

      Posté par  . Évalué à 2.

      J'irai même plus loin en disant que son test n'est pas crédible. En effet, il suffit que je stresse mon système pendant que j'exécute le script avec bash et que je l'exécute avec dash sur un système "au repos" pour fausser les résultats. Il peut aussi être fausser avec un nice éléver

      Donc, ce text devrait être refait avec time ou un équivalent.

      Exemple: bash sur un système "au repos":
      date;for i in $(seq 500000); do echo $i > /dev/null;done;date
      sam aoû 7 15:56:54 CEST 2004
      sam aoû 7 15:57:07 CEST 2004

      Exemple: dash sur un système stressé et avec un nice:
      nice -n 18 dash -c 'date;for i in $(seq 500000); do echo $i > /dev/null;done;date'
      sam aoû 7 16:01:36 CEST 2004
      sam aoû 7 16:02:08 CEST 2004

      Avec time sur un système stressé: (les deux scripts contienent le script précédant sans les 'date' )
      bash: time tmp/benbash.sh

      real 0m23.938s
      user 0m9.713s
      sys 0m3.645s

      dash: time tmp/bendash.sh

      real 0m9.846s
      user 0m3.986s
      sys 0m3.019s
      • [^] # Re: Time

        Posté par  . Évalué à 5.

        Puisqu'on en est dans les details je te signal que tu as utiliser dans ton test 2 commandes 'time' differentes et qui sais elles font peut etre des mesures de facon differentes...

        il faut donc utiliser /usr/bin/time dans tes 2 tests pour regler le probleme.


        PS : mon journal n'avait pas pour but de donner un bench precis, mais juste une tendance et je voulais surtout montrer que tout ce qui ont argumenter dans l'article que si bash consommais plein de memoire apres un $(seq ....) c'etait bien de la faute de bash et pas comme il a ete dis une feature du noyau ou de la libc....
    • [^] # Re: Time

      Posté par  . Évalué à 2.

      t'as raison mais j'ai pas la commande time d'installer sur le systeme et dash n'en possede pas une integre...
      • [^] # Re: Time

        Posté par  . Évalué à 3.

        Pas time d'installé ?! C'est pourtant une des commandes de base, sûrement dans un paquet indispensable. Sur FreeBSD il fait même partie du système.
        • [^] # Re: Time

          Posté par  . Évalué à 2.

          Sous Debian Gnu time est un paquet independant et pratiquement aucun paquet ne depend de lui ( apt-cache rdepends time )
  • # Euh...

    Posté par  . Évalué à 6.

    C'est une preuve comme quoi Dash lave plus blanc que Bash ?
    (désolé, vraiment désolé...)

    En revanche, c'eut été sympathique si tu nous avais indiqué quelles versions de bash et dash tu avais utilisé (en particulier bash: 2 ou 3?), ton protocole de test aurait été plus complet.

    Nouvelle rubrique à la mode, bientôt sur linuxfr: le bench de shells en tout genre...
    • [^] # Re: Euh...

      Posté par  . Évalué à 2.

      $ dpkg -l | grep [bd]ash
      ii bash 3.0-4 The GNU Bourne Again SHell
      ii dash 0.5.1-2 The Debian Almquist Shell

      mais sous bash 2.05 c'etait gere mieux...

      Sinon le bench de shell c'est quand meme interessant : ca peut te permettre de booter plus vite en choisisant le bon...
      • [^] # Re: Euh...

        Posté par  . Évalué à 8.

        http://packages.debian.org/testing/shells/dash(...)

        [...]
        It can be usefully installed as /bin/sh (because it executes scripts somewhat faster than "bash")
        [...]

        c'est apparement une qualité connue de dash, mais il faut faire attention, car il existe pas mal de script qui, malgrés le « #!/bin/sh », sont en faite remplis de « bachisme » et devraient plutôt commencer par #!/bin/bash. Un moyen de s'enrendre compte et de les éditer avec vim avec la coloration syntaxique d'activée. Les bashismes dans des scripts #!/bin/sh sont notés comme des erreurs, et sont surlignés en rouge
        Par exemple:
        essayez ce script une fois avec #!/bin/sh comme shebang, puis aprés avec #!/bin/bash:

        echo ${toto%azerty}

        il faut l'enregistrer, et le réouvrir le avec vim à chaque fois

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.