[gull] [EXTERNAL] grep et barre de progression
Félix Hauri
felix at f-hauri.ch
Wed Jan 22 17:54:29 CET 2025
Je suis assez content de vous proposer ma nouvelle version: 0.1.0!!
https://f-hauri.ch/vrac/ppGrep.sh.txt
Le problème vient de ce que le script est utile quand tout est à lire...
lorsque tout est en cache, alors cela peut aller très (trop) vite, alors
certain process démarrent au moment où d'autres terminent, bref mon script
perd (parfois) le fil...
Du coup, ma nouvelle version re-lance l'entier du process, mais sans
paralellisation, ce qui ne prend que peu de temps puisque tout est
en cache...
Le résultat est:
- jusqu'à ~1 seconde de plus :-(
- 2 lignes de plus dans le terminal
- mais une sortie complête et correcte dans STDOUT.
- le script devient utilisable au quotidien.
Test: Je fais "grep -l vt100 /var/lib/dpkg/info/*.list", sur la sortie,
je fait un "wc" et un "sha1sum" afin de comparer facilement les résultats:
$ sync;sudo tee /proc/sys/vm/drop_caches <<<3
3
$ time { /tmp/ppGrep.sh vt100 /var/lib/dpkg/info/*.list | tee >(sha1sum) >(wc
) >/dev/null ;}|cat
mmdebstrap.list 0.00%
xxd.list 0.00%
0.00%
Proc run: 0, done: 10. Files: 2281/2281██████████████████████████████████100.00%
54 54 3884
d32f817ca090304fa48691bf7c73470408ec30f8 -
real 0m8.442s
user 0m1.619s
sys 0m2.834s
Premier run: 8,4 secondes!
$ sync;sudo tee /proc/sys/vm/drop_caches <<<3
3
$ time { grep vt100 /var/lib/dpkg/info/*.list | tee >(sha1sum) >(wc
) >/dev/null ;}|cat
54 54 3884
d32f817ca090304fa48691bf7c73470408ec30f8 -
real 0m11.947s
user 0m0.036s
sys 0m0.137s
Premier run, avec grep: 11,9 secondes!!
Lorsqu'il faut parcourir le fs et lire les fichier, alors la parallelisation
est utile!!
Par contre, lorsque tout est en cache:
$ time { /tmp/ppGrep.sh vt100 /var/lib/dpkg/info/*.list | tee >(sha1sum) >(wc
) >/dev/null ;}|cat
Proc run: 0, done: 10. Files: 2281/2281██████████████████████████████████100.00%
54 54 3884
d32f817ca090304fa48691bf7c73470408ec30f8 -
real 0m0.322s
user 0m0.106s
sys 0m0.077s
Second run, tout est en cache: 0.32 secondes
$ time { grep vt100 /var/lib/dpkg/info/*.list | tee >(sha1sum) >(wc
) >/dev/null ;}|cat
54 54 3884
d32f817ca090304fa48691bf7c73470408ec30f8 -
real 0m0.040s
user 0m0.023s
sys 0m0.019s
Second run, tout est en cache, avec grep: 0.04 secondes.
$ time { /tmp/ppGrep.sh vt100 /var/lib/dpkg/info/*.list | tee >(sha1sum) >(wc
) >/dev/null ;}|cat
WARNING: Kill 3709312!
Ouptut may be inaccurate! (loosed: 0000 -> 1/10)
Rerun w/o parallelization!
Proc run: 0, done: 4. Files: 2281/2281██████████████████████████████████100.00%
54 54 3884
d32f817ca090304fa48691bf7c73470408ec30f8 -
real 0m1.042s
user 0m0.704s
sys 0m0.358s
Second run, tout est en cache, mais ``race condition'' -> rerun -> 1.04 secondes
Mais le résultat est constant:
3884 octets, sha1: d32f817ca090304fa48691bf7c73470408ec30f8
Et pour les ``grep'' plus importants, tels que ne pouvant tenir en cache,
alors la parallelisation est systématiquement efficace.
Le Fri, Jan 03, 2025 at 03:48:07PM +0100, Félix Hauri via gull a écrit :
> Cela fonctionne bien, tant qu'il y a du temps qui se passe pour chaque
> grep... Si tout est en cache et que les sous-process terminent en
> même temps, on peut perdre des fins de process (``wait -p''):
>
> En relançant la même commande alors que tout est en cache mémoire,
> j'obtiens facilement:
>
> $ ppGrep.sh -sl vt100 /var/lib/dpkg/info/*.list
> WARNING: Kill 2138039!
> Ouptut may be inaccurate!
--
Félix Hauri - <felix at f-hauri.ch> - http://www.f-hauri.ch
More information about the gull
mailing list