2009-03-13 12 views

Répondre

3

Je ne pense pas qu'un algorithme SHA puisse être optimisé pour la taille, puisqu'il fonctionne sur des blocs de taille fixe, et le calcul ne peut pas être fait en parallèle. Il semble que l'implémentation la plus rapide sur un petit fichier sera aussi la plus rapide sur un gros fichier.

+1

Il est intéressant de noter que certains des algorithmes de compétition SHIST du SHA-3 actuels utilisent plusieurs processeurs pour hacher en parallèle (http://csrc.nist.gov/groups/ST/hash/sha-3/index.html). Il est important de noter que vous êtes probablement lié par les E/S du disque, pas par la vitesse de hachage, cependant. –

1

sha1sumsha1sum est ce que j'utiliserais pour calculer les sommes de contrôle SHA-1 ... il est conçu pour faire exactement une chose, j'espère donc qu'il le fera aussi vite que possible. Je n'ai pas fichiers de 2 Go de référence sur bien :-(

EDIT: Après quelques essais sur une image ISO il semble que le facteur limitant sur mon système est disque vitesse I/O - pas surprenant, Une fois que cela est corrigé, il semble que openssl soit deux fois plus rapide que sha1sum ...

3

Votre problème est probablement lié aux E/S disque. un vieux processeur Core Duo 2.0GHz peut traiter/dev/zero à 100MiB/s - plus vite que la plupart des disques durs généralement couplés avec un tel système

Montrez-nous les vitesses que vous voyez actuellement (et sur quel matériel spec).

+0

Je fais cela sur un Macbook Pro, fin 2007 (2,4 GHz Intel Core 2 Duo, 4 Go 667 Mhz DDR2). L'application actuelle fonctionnera sur les instances EC1 d'Amazon c1.medium (dual core également). Je peux utiliser tmpfs pour des fichiers jusqu'à 1.7GB. Donc jusque-là je voudrais toujours utiliser l'algorithme le plus rapide;). –

+1

Essayez de compiler pour 64 bits si vous le pouvez. L'algorithme des coreutils GNU que j'utilise dans une application C obtient 167M/s sur un C2D 2.4GHz et 271M/s sur un Xeon 3.0GHz en mode 64 bits. –

7

Sur ma machine, pour un fichier de 1 Go, avec suffisamment de mémoire pour que le fichier entier en mémoire cache après la première manche:

sha1sum: 3.92s 
openssl sha1: 3.48s 
python hashlib.sha1: 3.22s 

il prend quelques minutes pour obtenir le SHA1 pour un fichier de 2 Go

Il ya quelque chose qui ne va pas ici, à moins que vous n'utilisiez un vieux matériel incroyablement lent. Même lors de la première exécution, où le fichier était lu directement à partir du disque, cela prenait seulement 'openssl sha1' environ 20s par concert sur ma machine. Avez-vous des problèmes d'E/S lents en général?

3

Si vous n'avez pas besoin spécifiquement SHA1 mais cherchez à des fichiers de grande somme de contrôle, sha512sum serait plus rapide pour les gros fichiers comme il se lit dans des blocs de grande taille