Ho avuto l'idea di confrontare rapidamente alcuni programmi di decompressione. Ad esempio per gz, eseguirò il comando:
timeout 10 zcat foo.gz | wc -c
Il che misurerebbe la quantità di dati che il decompressore potrebbe estrarre in 10 secondi.
L'unico problema è che non funziona: poiché zcat viene ucciso, anche wc viene ucciso, quindi non ottengo il conteggio dei byte, ma solo un Terminated
messaggio.
Quindi, la domanda è: c'è un modo per ottenere il conteggio da wc , bloccando il segnale in qualche modo, o usare un'alternativa invece di wc che stampa un risultato anche quando riceve un segnale di termine.
Certo, ci sono alternative:
Scrivere in un file temporaneo:
timeout 10 zcat foo.gz > /dev/shm/x ; du -sb /dev/shm/x ; rm -r /dev/shm/x
il problema è che utilizza molta memoria e potrebbe anche avere delle penalità per le prestazioni.Usando invece ulimit:
ulimit -t 10; zcat foo.gz | wc -c
funziona anche questo, ma misura solo il tempo della CPU, quindi il rallentamento dovuto all'I / O (ad es. Perché la compressione è peggiore e più byte devono essere letti dal disco) non viene misurato.Creazione di file di test più piccoli:
Beh, questo può ovviamente funzionare e potrebbe essere la soluzione migliore. Tuttavia, questo crea molti file temporanei.