compression/concatenation/vitesse

compression/concatenation/vitesse - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 18-04-2012 à 18:20:38    

Bonjour a tous,
Je fais un nouveau sujet car effectivement, cela ne sert a rien de polluer le topic Ubuntu avec une question d'ordre general.

 

Je cherche a effectuer une compression tres rapide de 3500fichiers de 4mb (14gb). La taille finale n'est que secondaire (pas trop quand meme, le max etant environ de 1gb par bunch de data) apres la vitesse.

 

J'ai fais :

tar cf - listefichiers | gzip -c1 test.tar.gz


qui me prend 1min30 pour une taille de 65mb.
J'ai tente de faire ca en deux etapes pour voir la difference de temps

tar cf test.tar listefichiers puis gzip -c1 test.tar.gz test.tar


Ici je ne comprends pas pourquoi l'operation tar prend en elle meme bien plus de temps que 1min30.

 

Bref, si vous avez des suggestions sachant que j'ai a disposition une suse 10.3 (systeme completement inconnu pour moi et que je ne peux pas mettre a jour sauf si le paquet que je dois installer a toutes les dependances deja installees) assez vieille.

 

Je vous remercie!

Message cité 1 fois
Message édité par toutsec le 18-04-2012 à 18:21:50
Reply

Marsh Posté le 18-04-2012 à 18:20:38   

Reply

Marsh Posté le 18-04-2012 à 18:45:57    

D'un point de vue hardware, t'es multi-core ?

Reply

Marsh Posté le 18-04-2012 à 18:48:05    

J'ai un xeon e5530 8 core

Reply

Marsh Posté le 18-04-2012 à 18:54:07    

T'as moyen de paralléliser les choses alors, d'un point de vue compression.
Je ne sais pas si tu as pbzip2 sur ta suse...
 
sinon avec gzip via du scripting tu as moyen d'améliorer les choses vu que tu dois faire plusieurs bunch. A voir si ce n'est pas le disque qui est le goulot d'étranglement

Reply

Marsh Posté le 18-04-2012 à 19:01:27    

Le disque est un SAS 15000 rpm 6gbits/s.
 
Je crois avoir reussi a compiler xz. Je vais voir ce que ca donne.

Reply

Marsh Posté le 18-04-2012 à 19:20:35    

Bon bah xz -z0 est plus lent que

tar cf - listefichiers | gzip -c1 test.tar.gz

Reply

Marsh Posté le 18-04-2012 à 20:34:48    

Si tu as une piste pour parralléliser une compression avec gzip, je suis preneur.

Reply

Marsh Posté le 18-04-2012 à 21:09:29    

toutsec a écrit :

Bonjour a tous,
Je fais un nouveau sujet car effectivement, cela ne sert a rien de polluer le topic Ubuntu avec une question d'ordre general.

 

Je cherche a effectuer une compression tres rapide de 3500fichiers de 4mb (14gb). La taille finale n'est que secondaire (pas trop quand meme, le max etant environ de 1gb par bunch de data) apres la vitesse.

 

J'ai fais :

tar cf - listefichiers | gzip -c1 test.tar.gz


qui me prend 1min30 pour une taille de 65mb.
J'ai tente de faire ca en deux etapes pour voir la difference de temps

tar cf test.tar listefichiers puis gzip -c1 test.tar.gz test.tar


Ici je ne comprends pas pourquoi l'operation tar prend en elle meme bien plus de temps que 1min30.

 

Bref, si vous avez des suggestions sachant que j'ai a disposition une suse 10.3 (systeme completement inconnu pour moi et que je ne peux pas mettre a jour sauf si le paquet que je dois installer a toutes les dependances deja installees) assez vieille.

 

Je vous remercie!

 

problème de disque amha, dans le premier cas, tu écris le fichier après compression, dans le 2°, tu écris le fichier avant compression et ensuite tu le compresses.

 

Tu devrais regarder si 7z (paquet p7zip) est pas plus rapide que gzip, je sais que son successeurs (lzma ou xz) l'est souvent quand il est utilisé avec un faible niveau de compression.et ça gère le multithread directement.

 

EDIT : arf, j'avais pas vu le dernier post.


Message édité par Mjules le 18-04-2012 à 21:10:10

---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 19-04-2012 à 09:58:53    

J'essaie de compiler pigz.

Reply

Marsh Posté le 19-04-2012 à 16:36:07    

Sous linux la commande tar permet souvent de compresser directement via une option (en général z pour gzip). Ca reste néanmoins l'équivalent du tar | gzip, c'ets juste plus court à écrire :

 
Code :
  1. tar zcf test.tgz listefichiers
 

Et comme dit Mjules, la différence de temps entre les deux méthodes vient bien de l'I/O disque. Dans ton deuxième exemple tu écris la version non compressé sur le disque, puis tu compresses à côté, puis tu supprime la version non compressé, alors que dans l'autre cas tu écrit directement la version compressé.

 

Pour accélérer les choses, il faudrait voir d'où vient le problème. Durant l'opération, il faut voir si tes procs sont en "wait I/O" ou en "user". Si c'est en Wait I/O, a part utiliser 2 disques différents tu ne pourras pas faire grand chose. Si c'est en temps User effectivement changer d'algo de compression pourra réduire ton temps de compression

Message cité 1 fois
Message édité par Nukolau le 19-04-2012 à 16:42:41
Reply

Marsh Posté le 19-04-2012 à 16:36:07   

Reply

Marsh Posté le 20-04-2012 à 14:13:42    

Nukolau a écrit :

Sous linux la commande tar permet souvent de compresser directement via une option (en général z pour gzip). Ca reste néanmoins l'équivalent du tar | gzip, c'ets juste plus court à écrire :

 
Code :
  1. tar zcf test.tgz listefichiers




Oui mais tar ne permet pas alors de spécifier l'option de vitesse (-1 de gzip) :D

Nukolau a écrit :


Et comme dit Mjules, la différence de temps entre les deux méthodes vient bien de l'I/O disque. Dans ton deuxième exemple tu écris la version non compressé sur le disque, puis tu compresses à côté, puis tu supprime la version non compressé, alors que dans l'autre cas tu écrit directement la version compressé.

 

Pour accélérer les choses, il faudrait voir d'où vient le problème. Durant l'opération, il faut voir si tes procs sont en "wait I/O" ou en "user". Si c'est en Wait I/O, a part utiliser 2 disques différents tu ne pourras pas faire grand chose. Si c'est en temps User effectivement changer d'algo de compression pourra réduire ton temps de compression


Il faudrait déjà voir si le simple fait de lire les données et de les "tar-iser" n'est pas ce qui prend le plus de temps.
Pour se faire il suffit de balancer la sortie de tar sur /dev/null
tar -cf /dev/null /le/dossier/de/test

 

Si ça prends pas loin de 1m30, y a pas grand chose à faire pour améliorer la chose, c'est les IO en lecture [:spamafote]


Message édité par e_esprit le 20-04-2012 à 14:19:04

---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
Reply

Marsh Posté le 04-09-2012 à 06:15:17    

Je ne sais pas pour suse, mais je sais que sous arch /tmp est monté en ram donc avec des temps d'accès bien sympathiques.
En utilisant mktemp, tu pourrais du coup créer ton .tgz dans la ram, ce qui te permettrait d'éviter les écritures disques, c'est déjà ça.

Code :
  1. out=`mktemp`
  2. tar cf - listefichiers | gzip -c1 $out
  3. mv $out test.tgz


L'inconvénient c'est que la ram a une taille assez limitée... si j'ai compris les .tgz font 1Go, et vu le processeur dont tu disposes, tu dois bien avoir 1go de ram de libre :D
Avec 2Go de ram, j'ai 1Go dispo pour /tmp (d'après df)

 


J'ai fait un petit test sur mon pc :

Code :
  1. dd if=/dev/zero of=tmp.CRVSVZWLe8 bs=100M count=5
  2. 5+0 enregistrements lus
  3. 5+0 enregistrements écrits
  4. 524288000 octets (524 MB) copiés, 0,503268 s, 1,0 GB/s


Je peux pas me vanter d'avoir cette vitesse sur mes disques  :o

 


EDIT: je viens de me rendre compte de la date du dernier message, je range la pelle...


Message édité par Profil supprimé le 04-09-2012 à 06:17:55
Reply

Marsh Posté le 04-09-2012 à 20:07:25    

Je note quand même :jap:

Reply

Marsh Posté le 08-09-2012 à 20:40:39    

Tu peux utiliser "iotop" pour voir le débit des I/O disques.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed