Je sais que la boîte de dialogue de copie Windows (sous Windows XP) enregistre d’abord la copie en mémoire, et qu’elle est toujours en cours de copie après la fermeture de la boîte de dialogue. si inexact, même lorsque la copie en mémoire a été désactivée (sous Vista et Windows 7)? Cela semble tellement arbitraire! Comment fonctionne la procédure de copie dans son ensemble et pourquoi Windows ne peut-il pas l’estimer correctement?
windows
file-transfer
Maxim Zaslavsky
la source
la source
Réponses:
En bref: les mauvais algorithmes et l'estimation instable sont en réalité une faiblesse d'implémentation.
D'autres outils comme TeraCopy font un meilleur travail. Je pense qu'il n'est pas utile d'expliquer pourquoi leur mise en œuvre n'est pas bonne. Ils l'auront remarqué et s'amélioreront.
Ce qui est difficile:
Pour cela, non seulement le nombre d'octets, mais également le nombre de fichiers à créer jouent un rôle. Si vous avez un million de fichiers de 1Ko ou des milliers de fichiers de 1Mo, la situation sera assez différente car le premier supporte la surcharge de créer beaucoup de fichiers. Selon le système de fichiers utilisé, cela peut prendre plus de temps que le transfert des données.
Ce dialogue m'a rendu fou plusieurs fois également:
La copie moderne de Windows n’est guère meilleure:
la source
Raymond Chen a écrit un très bel article à ce sujet. Fondamentalement, le dialogue ne fait que deviner :).
http://blogs.msdn.com/b/oldnewthing/archive/2004/01/06/47937.aspx
la source
Je vais compter jusqu'à dix,
1....2....3....4
combien de points faut-il pour arriver à dix?5.6.7
Et maintenant? Prenez-vous en compte tous les points passés entre les nombres et faites-vous la moyenne, ne prenez-vous que les 4 derniers intervalles et utilisez-vous cette moyenne, ne regardez-vous que le dernier intervalle?Vous avez le même problème avec les transferts de fichiers. La vitesse à laquelle le fichier est transféré n'est pas constante, il accélère et ralentit en fonction de nombreux facteurs. La raison pour laquelle le nombre saute tellement est que Microsoft s'est penché vers le côté "ne compte que le dernier intervalle" du spectre.
Il n'y a rien de mal à ce côté du spectre, cela vous donne des "secondes par seconde" plus précises (une seconde en temps réel fait baisser le compteur d'une seconde), mais l'ETA total de la minuterie varie beaucoup .
Un bon exemple du côté opposé est 7-Zip lorsqu’il se compresse. Si la vitesse de compression diminue au fur et à mesure de son traitement, vous constaterez que l’ETA ne saute pas de façon spectaculaire, contrairement à un transfert ETA de transfert de fichier. Toutefois, il peut s'écouler 2 à 3 secondes réelles avant que le minuteur ne se déclenche une seconde (ou même il peut commencer à compter) ) jusqu'à ce qu'il se stabilise à la nouvelle vitesse.
la source
En fait , Raymond Chen, de Microsoft, a répondu à cela de WAAAAAY de manière presque canonique , et le puzzle comporte quelques pièces.
Premièrement, Windows est en train de deviner. Il sait combien de fichiers et quelle est leur taille, mais le taux de transfert par fichier est très variable. Cela dépend dans certains cas de la taille ou même de l’emplacement sur le lecteur. À mesure que le temps passe, il ajuste son estimation en fonction des conditions actuelles et passées et, de ce fait, vous obtenez des vitesses de transfert estimées inexactes dans des conditions réelles.
la source
Voici l'explication de Raymond Chen , ingénieur principal en conception de logiciels chez Microsoft:
Le billet de blog cité ci-dessus discute longuement de cette question, avec quelques commentaires intéressants.
Raymond Chen est une personne légendaire, "Chuck Norris de Microsoft", je suppose que vous n'obtiendrez pas une réponse plus autoritaire. Je suis sûr qu'il a au moins vu le code en question.
la source
La raison évidente est que la vitesse du transfert varie avec le temps, de même que la moyenne, de même que la prédiction. Pour expliquer cela à un ami non-tech, j'ai utilisé une analogie impliquant un voyage en avion. Vous allez survoler l'Atlantique. Lorsque vous arrivez avec un taxi à l'aéroport de départ, votre ETA dure environ deux mois. Lorsque vous débarquerez à l'aéroport d'arrivée, en fonction de votre vitesse moyenne jusqu'à présent, vous arriverez chez votre ami en 5 secondes.
Mais vous devez comprendre à quel point la vitesse peut varier, même avec ce qui semble être un scénario prévisible, comme la copie de fichiers sur le même disque ou entre deux disques locaux. Une des nouvelles fonctionnalités que j'aime dans Windows 8 est la possibilité de représenter graphiquement la vitesse au fil du temps si vous cliquez sur "plus de détails". Si vous n'avez pas accès à un ordinateur Windows 8, recherchez des exemples dans la boîte de dialogue de copie de Windows 8 . Beaucoup d’entre eux sont assez plats, mais beaucoup sont aussi troublants, au point qu’on se demande si le disque dur est réellement en bon état, alors qu’il tombe à zéro.
Certaines de ces difficultés sont probablement dues à des variations de taille de fichier (des champs plus petits donnent plus d’accès, ce qui ralentit la tâche, en particulier sur un disque dur mécanique qui doit chercher en déplaçant sa tête de lecture), mais il peut s’agir d’un lecteur bon marché qui stalle au moindre contact pour éviter d'endommager les plateaux.
Il existe des algorithmes de prédiction ETA meilleurs et pires, mais pour une prédiction précise, l'ordinateur devrait tout connaître. Si vous essayez de rendre cet algorithme «intelligent», vous risquez de créer de nouveaux cas, imprévus, où il est encore plus hilarant.
la source
Le seul moyen de savoir combien de temps il faudra pour compresser un ensemble de fichiers est de les compresser. Parfois, la meilleure estimation de Windows est proche, parfois, elle est totalement erronée. Il en va de même pour la copie d'un grand nombre de fichiers, comme vous l'avez sûrement remarqué.
Ce n'est pas tant un bug qu'un affichage inutile d'informations peu précises. La meilleure façon de résoudre ce problème est de fermer les yeux. Ignore le. ;-)
Peut-être existe-t-il un programme capable de copier / compresser des fichiers et de déclencher une alarme à la fin. Ce serait vraiment utile. Nous pourrions faire une petite sieste en attendant que Windows ait terminé le ménage.
la source
Je pense que la raison a été bien expliquée dans l'un des commentaires de l' article de blog lié à la réponse de Roald:
La raison pour laquelle il donne des estimations aussi horribles est que ce n'est pas bien fait. Évidemment, cela ne peut jamais être précis à 100%, mais cela pourrait être beaucoup, beaucoup mieux.
la source
Afin d’accélérer le processus de copie (sans perdre trop de temps à calculer les estimations de temps au lieu d’effectuer des opérations liées à la copie), l’utilitaire de copie Windows intégré à Explorer conserve une quantité limitée d’informations sur la rapidité des opérations d’écriture précédentes. Chaque fois qu'il a besoin de calculer le temps restant, il calcule simplement la durée moyenne des opérations d'écriture, puis multiplie par le nombre d'opérations d'écriture restantes.
Le problème est que le temps nécessaire pour effectuer une opération d'écriture n'est pas constant - il peut en réalité varier considérablement. Cela produit donc des changements importants dans l’estimation du temps.
la source
A
] et le nombre de points de données utilisés pour obtenir cette moyenne [n
]. Ensuite, pour le mettre à jour, c'est juste un cas de(A*n + [New value])/[n+1]
. De plus, étant donné que les opérations de copie sont presque toujours liées à l'IO et non au processeur, un simple calcul comme celui-ci toutes les quelques secondes ne sert à rien. D'autre part, garder une moyenne des dernièresn
écritures nécessite un tableau / une file d'attente / une pile d'n
éléments - ainsi, vous savez quelle valeur doit être expulsée.Il y a 3 facteurs à prendre en compte:
Les chiffres 1 et 3 semblent avoir l’effet le plus évident sur le calcul du temps de transfert, mais un grand nombre de personnes ne prennent pas en compte le nombre 2. Cela peut avoir un effet énorme sur la durée du transfert et est difficile à quantifier.
Fondamentalement, chaque fois qu'un fichier est écrit, le système de fichiers doit écrire un peu de métadonnées sur le fichier, par exemple. droits de propriété, autorisations, création / modification / accès, etc. Selon le système de fichiers concerné, ces informations peuvent être écrites sur une partie du disque très "éloignée" de l'endroit où le fichier est en cours d'écriture. Cette surcharge du système de fichiers est ce qui peut faire qu'un transfert apparemment simple prenne beaucoup de temps et / ou que l'estimation du temps fluctue énormément.
Exemple: lorsque vous transférez un fichier volumineux, vous remarquerez que l'estimation est stable et assez précise, mais le transfert de centaines de fichiers de tailles différentes, mais de la même taille totale, peut prendre plus de temps et entraîner une adaptation de l'estimation de temps.
la source
Les algorithmes d’estimation actuels présentent trois lacunes.
Contrairement à la croyance populaire, ils ne sont pas assez difficiles à lever les mains en l'air.
La plupart des gens qui écrivent des blogs et dont les gens ici ne sont pas conscients de cette possibilité sont aussi optimistes que je puisse dire en raison de l'étendue de leur domaine d'études et de leur formation. Un remède modeste mais aussi très confortable devrait être possible pour [un diplômé ayant une formation plus récente que les rédacteurs de blogs] [une entreprise de plusieurs milliards de dollars] Microsoft.
Je vais essayer d'expliquer pourquoi.
Les points d'échec sont les suivants. Le noyau:
1. ne peut prédire de manière fiable la charge future d'E / S en raison de circonstances extérieures au noyau
2. ne suit pas l'heuristique IO avec un niveau de détail utile. L'utilisation est un concept beaucoup plus large que la vitesse de lecture / écriture sur disque / réseau .
il reste très peu de choses à faire à ce sujet, rien de plus que de suivre les informations les plus élémentaires sur l'utilisation d'E / S
3. s'ils étaient suivis , ils n'auraient pas été utilisés pour les heuristiques
Le but de tout ceci est que notre modèle est seulement 2a = F * (bxc) + d complexe
Où a, b et c ont 3 états chacun: le gestionnaire de fichiers jette un coup d'œil sur les fichiers (ou seulement les métadonnées) avant la copie, et F * (bxc) + d n'est pas un calcul coûteux; si vous voulez quelque chose de plus précis, utilisez une table de recherche avec plus d'états - il n'y a pratiquement aucun calcul.
note: les dimensions ici sont pour un plateau, serait différent avec un SSD - début / milieu / fin n'importe pas
La différence essentielle entre ce que j’ai décrit et les implémentations précédentes que nous avons vues jusqu’à présent serait, en bref, d’observer la taille du fichier et la distribution / entropie de fichier sur le disque et de l’utiliser pour rendre compte plus précisément de l’élément temps de l’utilisation du disque.
(le brevet est laissé comme un exercice pour le lecteur ...)
la source
Il y a beaucoup de variables "inconnues" lorsque vous essayez de prédire combien de temps cela va prendre. Par exemple, bien que le programme sache qu'il existe 3 500 fichiers et que leur nombre s'élève à 3,5 Go (3 500 Mo), cela signifie-t-il que chaque fichier mesure 1 Mo? Pas nécessairement. Il pourrait y avoir beaucoup de fichiers de 4 Ko et beaucoup de fichiers de 100 Mo, entre autres. De plus, vous devez prendre en compte l'origine et la destination des fichiers (par exemple, les supports). Quel est le plus gros goulot d'étranglement? Comment compte-t-on essayer de copier des fichiers d'un disque dur via un tunnel VPN ? Vous donnez un meilleur scénario, puis ajustez vos compteurs en temps réel. C'est pourquoi vous voyez ces indicateurs de progression changer à la volée.
la source
Le modèle mathématiquement correct consiste à effectuer une moyenne et une extrapolation naïves:
La raison en est que, selon la loi des grands nombres, les fluctuations locales annulent la vitesse de transfert moyenne , ce qui vous donnera le résultat le plus stable.
Ce que Microsoft semble faire, c'est calculer la vitesse de transfert au plus tard. Cela signifie que chaque fluctuation locale modifie le résultat de manière significative.
la source
Comme Roald van Doorn l'a dit, il s'agit essentiellement de deviner. Bien sûr, cela ne signifie pas que cela ne pourrait pas être un meilleur devineur. Il y a beaucoup d'heuristiques qui pourraient être utilisées pour calculer cela.
Évidemment, rien de tout cela n’est facilement implémenté… et j’ai seulement mentionné les copies de fichiers. Un travail similaire devrait être fait pour toutes sortes de transferts.
La question que vous devez vous poser: préféreriez-vous que Microsoft passe le temps de vous donner une meilleure estimation ou préféreriez-vous que vos fichiers soient transférés plus rapidement?
Cependant, si vous compressez quelque chose avec 7-zip, vous remarquerez que c'est beaucoup mieux que de deviner que Windows. Je doute que cela fasse quelque chose d'aussi compliqué, juste un peu meilleur devineur.
la source
En bref, le calcul est basé sur la vitesse de transfert actuelle .
Par exemple: si votre taux de transfert diminue du fait que Windows doit copier une quantité énorme de fichiers minuscules, la durée attendue augmente de manière linéaire et inversement pour les fichiers volumineux.
Il est presque impossible de prédire quelle sera la vitesse de transfert sur l'ensemble du processus de transfert, car elle dépend de nombreux facteurs tels que la taille du fichier, l'utilisation du processeur, les erreurs de transmission, etc.
la source
Ce billet de blog MSDN contient des réponses intéressantes. Amélioration des bases de la gestion de fichiers: copier, déplacer, renommer et supprimer ces informations. Pourquoi est-ce difficile?
Et comment ils s'améliorent,
Cela dit, si vous voulez vraiment améliorer l'estimation donnée et conserver la barre de progression telle qu'elle est, vous pouvez faire quelque chose suggéré dans un commentaire Slashdot :
la source
Je voulais juste ajouter que le nombre total de fichiers est le facteur le plus fastidieux en termes de copie de fichiers sur un PC. En tant que jeune étudiant, je me souviens toujours d'avoir induit délibérément une défaillance des ordinateurs dans mon cours d'informatique en commençant par 1 fichier sans contenu, en le copiant, en sélectionnant les 2 fichiers, en copiant à nouveau, etc. Après avoir dépassé environ 1024 fichiers, il a commencé à prendre énormément de temps, même quand il ne copiait aucune information, à l'exception de l'en-tête du fichier. Essayez vous-même, même sur un nouveau système d'exploitation, une copie de fichier exponentielle et vous verrez ce qui se passe. Nourriture pour la pensée.
la source
Je viens de copier 200 Go de disque dur USB sur mon lecteur principal. Il y avait environ 130000 fichiers
Après les 4-5 premières minutes, j'ai observé que:
Au début de la fenêtre, l’estimation passait d’environ 1 heure à plus de 5 heures, puis de nouveau à 1 heure, etc. À la fin, comme dans 95% des cas, l’estimation passait toujours de 10 minutes à plus de 10 heures. Ainsi, au lieu de devenir plus précis, les résultats étaient de moins en moins précis.
Spectacles mathématiques simples:
130 000 fichiers à 100 fichiers par seconde = 22 minutes
200 000 Mo à 70 Mo par seconde = 47 minutes
22 minutes - en attente de temps en copiant des fichiers de quelques kilo-octets. 47 minutes - le temps nécessaire pour transférer les données réelles s'il n'y a pas de temps de recherche.
La somme des 22min + 47min est le temps maximum absolu que cela pourrait prendre.
Alors évidemment, l'estimation devrait être quelque part entre 47 et 69 minutes.
Ce que la boîte de dialogue indique à environ 90%: "Je copie des petits fichiers à 1 Mo / s, il y a 20 Go de données supplémentaires, cela prendra 5h30.
Quelques secondes plus tard: "Je copie un fichier volumineux ici, à 70 Mo / s, il faudra 4 minutes pour le terminer.
Ce que l'homme voit réellement dans le même dialogue: 120 000 fichiers et 180 Go sont déjà copiés pendant 40 minutes. Les 10000 fichiers restants et 20 Go devraient prendre environ 5 minutes
La boîte de dialogue fournit suffisamment d’informations pour effectuer des calculs de plus en plus précis à chaque seconde. Il sait à quelle vitesse les petits fichiers sont copiés. Il sait à quelle vitesse les gros fichiers sont copiés. Il sait également combien de fichiers et combien d'octets il reste.
Il est si simple de formuler une hypothèse aussi précise qu'en définissant les limites supérieure et inférieure.
La boîte de dialogue affiche un peu plus de données correctes dans le cas où les gros fichiers sont avant les petits fichiers. Si tel est le cas, cela commence à 40 minutes, et après 30 minutes, il commence à copier les petits fichiers et dit "bon, il me faut 20 minutes de plus".
Mais quand les petits fichiers au début et les gros fichiers sont à la fin. La boîte de dialogue ne s’intéresse pas vraiment à ce que "fichiers par seconde" transfère les petits fichiers. Son calcul, comme le nombre de petits fichiers, est infini, et comme si ce serait toujours petit.
la source