web-dev-qa-db-fra.com

Existe-t-il des chiffres concrets sur la vitesse de bash vs dash?

Selon cet article, dash a été choisi comme /bin/sh car bash est plus lent: Le tiret est/bin/sh

Existe-t-il des chiffres concrets sur la rapidité avec dash?

Combien de temps cela prend-il si vous utilisez bash au lieu de dash pour démarrer Ubuntu?

Les arguments du lien ci-dessus comptent-ils encore aujourd'hui? Pour le fond: system-v init a utilisé beaucoup de scripts Shell, mais pas Systemd.

Cette question ne concerne pas la vitesse dans un repère synthétique. Il s’agit d’un avantage notable pour l’utilisateur final. Un repère synthétique sur la vitesse de dash vs bash ne répond pas à la question.

4
guettli

Ce test n'est pas représentatif du processus de démarrage, mais vous pouvez simplement l'essayer vous-même en créant un petit script de test, je l'ai appelé shspeed:

$ cat shspeed
for a in `seq 10000`; do ( :; ); done

Cela crée simplement 10000 sous-coques les uns après les autres. Maintenant, lancez-le avec bash et avec dash et time it:

$ time dash shspeed
dash shspeed  0,70s user 0,33s system 107% cpu 0,965 total

$ time bash shspeed
bash shspeed  1,59s user 0,76s system 108% cpu 2,180 total

Ainsi, mon matériel, qui est un Dell XPS 13 9365 vieux de ~ 1 an, est beaucoup plus rapide. Vous pouvez imaginer que cela fait une plus grande différence sur le matériel bas de gamme. En outre, ce test concerne uniquement une boucle for et la création d'un sous-shell. Peut-être que pour certains tests, les résultats seront encore plus significatifs.

Bien sûr, vous pouvez ignorer cela et dire que vous ne vous souciez pas de la rapidité avec laquelle il génère 10000 sous-coquilles. Eh bien, certains semblent s'en soucier :)

Pour votre processus de démarrage particulier, cela ne ferait probablement aucune différence notable. Je ne vois pas de problème si vous utilisez /bin/bash comme /bin/sh et mesurez la différence avec un chronomètre.

S'il vous plaît vérifier ces liens de @wjandrea pour une explication détaillée de la question: https://wiki.ubuntu.com/DashAsBinSh , Quel est le point de sh lié à dash? =

Shell vitesse en temps de systemd

Après que votre question ait été modifiée, il semble que vous ne cherchiez pas à savoir quel shell est le plus rapide, mais pourquoi nous tenons toujours à accélérer le processus de démarrage d’une demi-seconde plus rapidement (ou plus), en particulier maintenant que nous n’utilisons pas de scripts Shell. plus dans la même mesure que nous avons fait quand sysv-init était la norme.

Puisque je ne suis pas impliqué dans la politique d'Ubuntu, je vais essayer de donner une réponse telle qu'elle me parait:

  1. Si vous pouvez accélérer quelque chose d'une demi-seconde en utilisant simplement un lien symbolique vers un autre shell, cela en vaut la peine.

  2. Avoir le Shell par défaut ne fait rien mais ce que POSIX demande au Shell par défaut de faire est logique afin de garder les choses portables. Imaginez qu'une distribution utilise une fonctionnalité bash dans un script d'initialisation qu'une autre distribution n'a pas (encore).

  3. (d) Des cendres ont également été ajoutées pour pouvoir corriger les basismes dans les scripts standard, ainsi que pour les éviter à l'avenir. /bin/sh est une norme convenue, qui dépend de grandes infrastructures. Rien que je voudrais remplacer par quelque chose ayant une base de code beaucoup plus grande avec des fonctionnalités inutiles.

  4. Utiliser moins de cycles de processeur et de mémoire en vaut toujours la peine. Même les unités systemd exécutent souvent des scripts Shell en arrière-plan.

Tout cela n’est probablement pas pertinent pour l’utilisateur moyen, mais indirectement, il obtient une distribution globalement plus stable.

Pourquoi pas bash?

C’est plus une opinion: Personnellement, je ne choisirais jamais d’écrire en dash. Il propose uniquement des constructions très basiques. Pour un logiciel plus gros, je préférerais bash ou zsh (ou quelque chose qui ne soit pas du tout Shell). Quelles fonctionnalités j'aimerais utiliser peut-être: extensions de paramètres avancés, arithmétique Shell, tableaux, peut-être un peu plus.

Cela ne devrait pas arriver dans les scripts utilisés principalement pour le démarrage de démons ou l'installation de logiciels. Ceux-ci doivent utiliser un minimum d'instructions et garder les scripts lisibles et simples. Mais cela arriverait probablement si toutes les qualités de bash leur étaient offertes.

/bin/sh devrait principalement servir à exécuter des programmes externes dans un environnement relativement pratique, et non pas à des systèmes logiciels complexes.

Sommaire

/bin/sh, tel qu'implémenté par dash, apporte un langage de script rapide et stable compatible POSIX, qui fonctionne très bien comme interpréteur standard et par défaut pour les scripts du système shell. Ces propriétés ne seront jamais sacrifiées au profit de fonctionnalités de commodité.

Du point de vue du programmeur, il remplit le mantra de "faire une chose et bien le faire".

Ce n’est pas avant tout une optimisation, mais une séparation des tâches.

Il est déjà là, alors aucun effort supplémentaire n'est nécessaire pour le conserver.

En regardant cela avec le chapeau de l'utilisateur final, on se pose la question suivante: quel type d'utilisateur final? Un utilisateur de bureau s'en moquait bien, mais ils bénéficieraient quand même d'une distribution plus stable (et peut-être un peu plus rapide). Un responsable de la maintenance du paquet s'en soucierait beaucoup, et ceux-ci bénéficient d'un interpréteur de système fiable avec un ensemble de fonctionnalités réduit, bien défini et bien testé. Un programmeur ne devrait pas s'en soucier, car ils ne se développent probablement pas dans /bin/sh.

PS: le binaire bash est presque 10 fois plus grand que le binaire dash!

10
Sebastian Stark