J'ai eu l'idée de comparer rapidement certains programmes de décompression. Par exemple pour gz, je lancerais la commande:
timeout 10 zcat foo.gz | wc -c
Ce qui mesurerait la quantité de données que le décompresseur pourrait extraire en 10 secondes.
Le seul problème est que cela ne fonctionne pas: comme zcat est tué, wc est également tué, donc je n'ai pas le nombre d'octets, juste un Terminated
message.
Donc, la question est: existe-t-il un moyen d'obtenir le nombre de wc , soit en bloquant le signal d'une manière ou d'une autre, soit en utilisant wc qui imprime un résultat même quand il obtient un signal de terme.
Bien sûr, il existe des alternatives:
Écriture dans un fichier temporaire:
timeout 10 zcat foo.gz > /dev/shm/x ; du -sb /dev/shm/x ; rm -r /dev/shm/x
Le problème avec cela est qu'il utilise beaucoup de mémoire et peut également avoir une baisse des performances.Utiliser ulimit à la place:
ulimit -t 10; zcat foo.gz | wc -c
cela fonctionne également, mais ne mesure que le temps processeur, donc le ralentissement dû aux E / S (par exemple parce que la compression est pire et que davantage d'octets doivent être lus sur le disque) n'est pas mesuré.Créer des fichiers de test plus petits:
Eh bien, cela peut bien sûr fonctionner et peut être la meilleure solution. Cependant, cela crée beaucoup de fichiers temporaires.