[gull] Truc et astuces: bash connector

felix felix at f-hauri.ch
Wed Feb 21 10:15:48 CET 2018


> On Thu, Feb 15, 2018 at 07:56:21AM +0100, Laurent Franceschetti wrote:
> > Surtout quel est le problème que cette méthode résoud, et quelle est l’idée 
> > centrale de la méthode?
> Eliminer les ``forks'' répétitifs qui peuvent être évités.

Autre exemple: Il y a un outil installé avec `apt install byobu`, qui
se trouve dans /usr/bin, qui se nomme byobu-ulevel. Il fait pas mal
de forks vers `bc`.

Il s'agit d'un script bash, écrit façon cuillère à pot sur un jeu de lego.

Bref un petit test (sur un raspberry-pi v3):

  $ export BYOBU_PYTHON="python"   # pour éviter des tests inutiles
  $ export TIMEFORMAT='Times: [U: %U, S: %S] -> %P%% x %Rs' # %R est significatif

  $ time byobu-ulevel -c 612.1234 -m -273.15 -x 1555.5 -t vbars_8
  ▃
  Times: [U: 0.090, S: 0.020] -> 32.27% x 0.341s

  $ time byobu-ulevel -c 612.1234 -m -273.15 -x 1555.5 -u "· █" -w 80
  ██████████████████████████████████████··········································
  Times: [U: 0.210, S: 0.150] -> 12.34% x 2.915s

Bon, de 0.3 secondes à 3 secondes pour aligner 80 caractères, il y a
à optimiser!!

Voici ma version un poil optimisé, toujours **sans connecteur**

  $ time ./byobu-ulevel_noconnector -c 612.1234 -m -273.15 -x 1555.5 -t vbars_8
  ▄
  Times: [U: 0.090, S: 0.050] -> 53.61% x 0.261s

  $ time ./byobu-ulevel_noconnector -c 612.1234 -m -273.15 -x 1555.5 -u "· █" -w 80
  ██████████████████████████████████████··········································
  Times: [U: 0.080, S: 0.030] -> 45.50% x 0.242s

Ok, ça va nettement plus vite dans le 2ème cas, et un poil dans le 1er.
Voici la même version optimisé, mais avec mon ``shell_connector'':

  $ time ./byobu-ulevel -c 612.1234 -m -273.15 -x 1555.5 -t vbars_8
  ▄
  Times: [U: 0.110, S: 0.010] -> 66.58% x 0.180s

  $ time ./byobu-ulevel -c 612.1234 -m -273.15 -x 1555.5 -u "· █" -w 80
  ██████████████████████████████████████··········································
  Times: [U: 0.100, S: 0.040] -> 68.40% x 0.205s

Le ``shell connector'' est clairement efficace!

Voici enfin une version totallement ré-écrite, avec le connector inclu
en début du script:

  $ time ./byobu-ulevel-new.sh -c 612.1234 -m -273.15 -x 1555.5 -t vbars_8
  ▃
  Times: [U: 0.040, S: 0.010] -> 62.01% x 0.081s

  $ time ./byobu-ulevel-new.sh -c 612.1234 -m -273.15 -x 1555.5 -u "· █" -w 80
  ██████████████████████████████████████··········································
  Times: [U: 0.050, S: 0.000] -> 58.90% x 0.085s

Petite récap:

  byobu-ulevel                  version originale             0.356s
  ./byobu-ulevel_noconnector    version optimisée             0.243s
  ./byobu-ulevel                optimisée + connecteur bc     0.177s
  ./byobu-ulevel-new.sh         réécriture + connecteur bc    0.088s

Mes différentes version sont disponibles à

   http://f-hauri.ch/vrac/byobu-ulevel_alternatives.tgz

Comme quoi, si le bash tend à devenir un ``language de programmation'',
il en est encore très loin!

Par contre, pour le prototype, il le fait!!

De là, si quelqu'un veut le ré-écrire pour le rendre plus efficace,
alors je préfèrerai du ``C'' qui pourra en faire un truc léger voire
instantané, plutôt que du python, perl, php ou autre ecmascript,
qui vont nous faire grapiller quelques microsecondes.

-- 
 Félix Hauri  -  <felix at f-hauri.ch>  -  http://www.f-hauri.ch


More information about the gull mailing list