Supposons que je veuille trouver toutes les correspondances dans un fichier texte compressé:
$ gzcat file.txt.gz | pv --rate -i 5 | grep some-pattern
pv --rate
utilisé ici pour mesurer le débit des tuyaux. Sur ma machine, c'est environ 420Mb / s (après décompression).
Maintenant j'essaye de faire du grep parallèle en utilisant GNU parallel.
$ gzcat documents.json.gz | pv --rate -i 5 | parallel --pipe -j4 --round-robin grep some-pattern
Le débit est maintenant abaissé à ~ 260 Mo / s. Et ce qui est le plus intéressant parallel
, c'est d'utiliser beaucoup de CPU. Plus que des grep
processus (mais moins que gzcat
).
EDIT 1 : J'ai essayé différentes tailles de blocs ( --block
), ainsi que différentes valeurs pour -N
/ -L
options. Rien ne m'aide à ce stade.
Qu'est-ce que je fais mal?
--pipe
est inefficace? Je veux dire que c'est une sorte de problème fondamental ou plus de mise en œuvre spécifique.