[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Curiosit? grep



nextime@nexlab.it wrote:

>> Primo dubbio, secondo voi quale dei due ? piu' veloce?
> 
> grep 'foo' nomefile
> 
> Usando cat file | grep esegui 2 comandi invece che uno e utilizzi una
> pipe in piu', quindi e' piu prestazionale il primo caso.
> 
> Un semplice benchmark al volo:
> 
> time for i in $(seq 1 5000) ; do grep mail antani >- ; done
> real    0m13.316s
> user    0m5.028s
> sys     0m8.073s
> 
> time for i in $(seq 1 5000) ; do cat antani | grep mail >- ; done
> real    0m23.174s
> user    0m8.509s
> sys     0m14.653s
> 

Ma quant'è grosso il tuo file "antani"? Dai tempi che escono direi piccolo a
meno che tu non disponga di un cluster, quindi quel che porta via tempo in
questo caso sono le 5000 invocazioni di cat e le 5000 creazioni della pipe.
Il caso esposto da Andrea è un po' diverso, una sola invocazione di cat,
una sola pipe, un giga di dati.

Facendo la prova su due files diversi (per evitare che intervenga il caching
di Linux e/o del disco), entrambi di 1Gb, entrambi generati da /dev/urandom
e passati in uuencode per renderli file di testo, quel che si ottiene sul
mio veccho Athlon 800 è:

lucio@sejamtyk:~$ time grep stringachenonce filegrosso1

real    0m34.452s
user    0m1.360s
sys     0m6.156s
lucio@sejamtyk:~$ time cat filegrosso2 | grep stringachenonce

real    0m35.073s
user    0m2.020s
sys     0m10.921s

(questi sono i risultati della quarta prova consecutiva dopo averne fatte
altre tre uguali delle quali ho scartato l'output, ma in realtà a parte le
prima prova, già la seconda e la terza hanno dato risultati simili).
Comunque pare evidente che il problema non è l'invocazione di cat e la
creazione della pipe, quanto piuttosto l'uso della pipe stessa che provoca
una copia ulteriore dei dati in ram. A causa poi della lentezza del mio
hard disk rispetto alla CPU, il tempo di orologio cambia di poco, ma il
tempo di CPU è quasi raddoppiato. Dove possibile quindi è meglio evitare la
pipe.

Lucio.

-- 
Virtual Bit di Lucio Crusca
via Isonzo, 5 - 10069 Villar Perosa (TO) - Italy
http://www.sulweb.org



Reply to: