Sur une connexion gigabit, Teracopy fait 31 Mo / s, mais Windows 8 le fait à ~ 109 Mo par seconde?
Quelle est exactement la cause de cela? Et puis-je activer ces vitesses via Teracopy? Je creuse vraiment les fonctionnalités supplémentaires de Teracopy, je les manquerai sûrement maintenant: D
Deux mots: vérification et cache
Explication technique
Voici la procédure générale pour copier un fichier avec l'Explorateur Windows:
- Lire un bloc de données du lecteur source dans la mémoire
- Envoyer le morceau via le (s) système (s)
- Écrivez le morceau sur le lecteur de destination
- Si ce n'est pas encore fait, revenez à l'étape 1
Cela semble simple et assez court. Avec cet algorithme de transfert, chaque octet du fichier n'est traité que deux fois: une lecture, une écriture.
Mais en plus, Windows utilise la mémoire (tout comme le lecteur lui-même) pour mettre en cache certaines données. Ainsi, au lieu d'attendre que le bloc précédent ait fini d'être écrit, puis de lire le bloc suivant, un nouveau bloc peut être lu pendant que le précédent est toujours en cours d'écriture. Évidemment, cela ne peut pas durer éternellement, mais Windows peut utiliser toute la mémoire libre restante en tant que tampon temporaire pour stocker la plupart, sinon la totalité du fichier lu en mémoire.
Vous pouvez voir la mise en cache en action en copiant un gros fichier - ou un dossier contenant beaucoup de fichiers - d'un lecteur à un autre, puis en comparant immédiatement les deux. La comparaison sera beaucoup plus rapide à ce stade que si vous le faites plus tard, car le ou les fichiers sont toujours en mémoire, il ne les lit donc pas réellement à partir du ou des lecteurs.
Étant donné que la mémoire est très rapide et que les vitesses de lecture ont tendance à être un peu plus rapides que les vitesses d'écriture, le taux de transfert final finit par être limité uniquement par la vitesse d'écriture du lecteur de destination.
Teracopy peut faire deux choses qui peuvent ralentir un transfert de fichiers, ce que l'explorateur ne fait pas:
Contrairement à Explorer qui ne vérifie que les erreurs de base lors du transfert, Teracopy peut réellement vérifier que les données ont été correctement écrites sur le lecteur de destination afin d'éviter la corruption des données qui pourrait se produire en raison de problèmes dans le support de transfert (réseau / câble de lecteur / etc. ) ou le lecteur lui-même (secteur défectueux, etc.) Cela signifie qu'il doit lire le fichier de la destination pour le comparer à l'original.
Selon l'algorithme utilisé et la taille du fichier, la vérification peut être optimisée aussi bas que (mais pas moins de) trois opérations de lecteur pour chaque fichier / bloc de fichier par opposition aux deux de l'Explorateur: lire le fichier à partir de la source, écrire le fichier vers la destination et lisez le fichier depuis la destination.
Regardez ce qui se passe lorsque vous copiez un fichier avec Teracopy (avec un algorithme optimisé pour le disque dur):
- Lire un morceau du lecteur source
- Hash the chunk read from the source drive
- Envoyer le morceau via le (s) système (s)
- Écrivez-le sur le lecteur de destination
- Effacer les caches
- Lisez le morceau à partir du lecteur de destination
- Hachez le morceau du lecteur de destination
- Comparer les hachages
- Déterminer la prochaine étape
- Si les hachages ne correspondent pas, indiquez l'erreur et invitez l'utilisateur à agir
- Si les hachages correspondent et ne sont pas terminés, revenez à l'étape 1
Le problème est que si vous mettez en cache les fichiers pendant le transfert, la comparaison devient inutile car vous ne lisez pas les données réelles sur le lecteur de destination, vous lisez la copie mise en cache en mémoire à partir de la source. Par conséquent, pour vérifier correctement, vous devez vider le cache. Cela peut être fait après chaque lecture et écriture (qui est une opération supplémentaire qui finirait par se faire un nombre incalculable de fois pour des fichiers de toute taille significative), ou juste une fois après que le fichier entier a été transféré.
Selon la capture d'écran ci-dessous, TeraCopy effectue une vérification après le transfert des fichiers, pas pendant. Cela signifie qu'il utilise à la place cet algorithme de transfert optimisé CPU / RAM:
- Lire un morceau du lecteur source
- Envoyer le morceau via le (s) système (s)
- Écrivez-le sur le lecteur de destination
- Si ce n'est pas encore fait, revenez à l'étape 1
- Copie terminée, donc vider les caches et être en cours de vérification
- Lire un morceau du lecteur source
- Hachez le morceau du lecteur de destination
- Lire un morceau du lecteur de destination
- Hachez le morceau du lecteur de destination
- Comparer les hachages
- Déterminer la prochaine étape
- Si les hachages ne correspondent pas, indiquez l'erreur et invitez l'utilisateur à agir
- Si les hachages correspondent et ne sont pas terminés, revenez à l'étape 6
Alors que cet algorithme met un peu moins de pression sur le CPU et la RAM, il met également beaucoup plus de pression sur le (s) lecteur (s) car maintenant chaque fichier doit être traité quatre fois: lire le fichier entier depuis la source, l'écrire dans la destination , puis relisez-le à partir de la source, puis à nouveau à partir de la destination.
(Si TeraCopy était optimisé pour les transferts réseau, cela pourrait éviter d'envoyer le fichier entier une deuxième fois pour vérification et d'envoyer uniquement les hachages qui sont beaucoup plus petits, mais cela ne semble pas être le cas actuellement, et les pilotes réseau sont traités de la même manière. comme lecteur local, donc il relit réellement la source.)
Par défaut, TeraCopy ne vérifie ni n'utilise le cache. Ne pas vérifier accélérerait le transfert (ou plus précisément, ne le ralentirait pas ), tandis que ne pas utiliser le cache le ralentirait.
Application
Pour déterminer vos résultats de vitesse spécifiques, vous devez vérifier vos paramètres pour voir si vous les avez modifiés. Ensuite, vous pouvez essayer d'approximer le type de vitesses que vous obtiendriez avec les différents paramètres (sachez qu'ils interagiront probablement, il n'est donc pas simple d'ajouter ou de soustraire).
Cela dit, faisons un calcul superficiel en utilisant vos chiffres:
- Transfert de fichiers local: 875 Mbps (c.-à-d., Vitesse du lecteur)
- Vitesse réseau: 1 Gbps = 119,21 Mbps
- Copier via l'Explorateur Windows: 109 Mo / s
- Copie via TeraCopy: 34 Mo / s
Dès le départ, nous constatons que le transfert de fichiers d'Explorer maximise presque le débit de votre réseau. Une liaison à 1 Gbit / s équivaut à 1 000 000 000 bits par seconde, ce qui, en unités binaires d' octets , correspond à 119 Mo / s. Explorer affiche 109 Mo / s, et les 10 Mo / s restants (ce qui était assez amusant votre précédent maximum :^Þ
) peuvent facilement être pris en compte par les frais généraux, la charge d'arrière-plan et la fragmentation.
(Étant donné que le taux de transfert est presque égal à la vitesse du réseau, nous pouvons supposer que le transfert de fichiers d'Explorer est unidirectionnel et qu'une seule copie de chaque fichier est envoyée.) Explorer obtient 110 Mo / s pour deux accès aux fichiers par fichier.
Maintenant pour TeraCopy. Il semble que TeraCopy obtienne presque exactement un tiers de la vitesse d'Explorer.
Selon que sa boîte de dialogue des préférences indique avec précision l'algorithme qu'il utilise, TeraCopy pourrait en fait envoyer le fichier source entier deux fois afin de pouvoir vérifier la copie. Tout de suite, cela réduit de moitié le débit. Si le cache est activé, cela réduit également la vitesse car il doit attendre la fin de chaque écriture avant de pouvoir envoyer un nouveau morceau. Lorsqu'il est combiné avec la vérification, il peut le faire tomber encore plus.
Votre taux de transfert de 34 Mo / s semble raisonnable si vous avez activé la vérification et désactivé la mise en cache. Si vous désactivez la vérification et la mise en cache, vous devriez obtenir à peu près la même chose qu'Explorer (vous pouvez toujours obtenir un peu moins ou même un peu plus en fonction de la différence entre le code de transfert de fichiers que TeraCopy utilise et celui qu'Explorer utilise).
Si vous êtes d'humeur à transférer près de 10 Go, vous pouvez également essayer de modifier les paramètres et de refaire le transfert pour chacune des quatre permutations et noter les vitesses que vous obtenez (pour être sûr, commandez-le pour que le cache soit hors course:) V+C+, V+C-, V-C+, V-C-
.