Ich weiß, dass das Windows-Dialogfeld "Kopieren" (in Windows XP) die Kopie zuerst im Speicher speichert und sie auch nach dem Schließen des Dialogfelds noch kopiert. Die Zeit ist also verstrichen, aber warum wird die Zeit geschätzt, die zum Erstellen einer Kopie benötigt wird? So ungenau, auch wenn das Kopieren des Speichers deaktiviert wurde (in Vista und Windows 7)? Es scheint so willkürlich! Wie funktioniert der gesamte Kopiervorgang und warum kann Windows ihn nicht richtig einschätzen?
windows
file-transfer
Maxim Zaslavsky
quelle
quelle
Antworten:
Kurz gesagt: Die schlechten Algorithmen und die sprunghafte Schätzung sind tatsächlich eine Implementierungsschwäche.
Andere Tools wie TeraCopy machen einen besseren Job. Ich denke, es lohnt sich nicht zu erklären, warum ihre Umsetzung nicht gut ist. Sie werden es bemerkt haben und sich verbessern.
Was ist schwierig:
Hierbei spielt nicht nur die Anzahl der Bytes, sondern auch die Anzahl der zu erstellenden Dateien eine Rolle. Wenn Sie eine Million von 1KB-Dateien oder tausend 1MB-Dateien haben, ist die Situation ganz anders, da erstere den Overhead hat, viele, viele Dateien zu erstellen. Abhängig vom verwendeten Dateisystem kann dies länger dauern als die eigentliche Übertragung der Daten.
Dieser Dialog hat mich auch ein paar Mal verrückt gemacht:
Das moderne Windows-Copy-Zeug ist nicht viel besser:
quelle
Raymond Chen hat einmal einen sehr schönen Artikel darüber geschrieben. Grundsätzlich ist der Dialog nur eine Vermutung :).
http://blogs.msdn.com/b/oldnewthing/archive/2004/01/06/47937.aspx
quelle
Ich werde bis zehn zählen,
1....2....3....4
wie viele Punkte wird es brauchen, um auf 10 zu kommen?5.6.7
Was ist mit jetzt? Berücksichtigen Sie alle vergangenen Punkte zwischen Zahlen und dem Durchschnitt, nehmen Sie nur die letzten 4 Intervalle und verwenden Sie diesen Durchschnitt, sehen Sie nur das letzte Intervall an?Sie haben das gleiche Problem mit Dateiübertragungen. Die Geschwindigkeit, mit der die Datei übertragen wird, ist nicht konstant. Sie wird aufgrund vieler Faktoren beschleunigt und verlangsamt. Der Grund, warum die Zahl so stark springt, ist, dass sich Microsoft auf die Seite "Nur das letzte Intervall zählen" des Spektrums neigt.
An dieser Seite des Spektrums ist nichts auszusetzen. Sie gibt Ihnen genauere "Sekunden pro Sekunde" (eine Sekunde in Echtzeit senkt den Zählerstand um eine Sekunde), aber dies führt dazu, dass die Gesamt-ETA des Timers stark springt .
Ein gutes Beispiel für die gegenüberliegende Seite ist 7-Zip beim Komprimieren. Wenn die Geschwindigkeit der Komprimierung während der Verarbeitung sinkt, können Sie feststellen, dass die ETA nicht wie eine Dateiübertragungs-ETA dramatisch springt, sondern es kann 2 bis 3 echte Sekunden dauern, bis der Timer eine Sekunde abläuft (oder sogar hochzählt) ) bis es sich auf der neuen Geschwindigkeit stabilisiert.
quelle
Es gibt tatsächlich eine fast kanonische Antwort von Microsofts Raymond Chen von WAAAAAY zurück, und es gibt ein paar Teile des Puzzles.
Erstens rät Windows. Es weiß, wie viele Dateien und wie groß sie sind, aber die Übertragungsrate pro Datei ist sehr unterschiedlich. Dies hängt in einigen Fällen von der Größe oder sogar vom Speicherort auf dem Laufwerk ab. Im Laufe der Zeit wird die Schätzung an die aktuellen und früheren Bedingungen angepasst, sodass die geschätzten Übertragungsgeschwindigkeiten unter realen Bedingungen ungenau sind.
quelle
Hier die Erklärung von Raymond Chen , Principal Software Design Engineer bei Microsoft:
Der oben zitierte Blog-Beitrag enthält eine lange Diskussion zu diesem Thema mit einigen interessanten Kommentaren.
Raymond Chen ist eine legendäre Person, "Microsofts Chuck Norris". Ich nehme nicht an, dass Sie eine verbindlichere Antwort bekommen werden. Ich bin sicher, er hatte den fraglichen Code zumindest gesehen.
quelle
Der offensichtliche Grund dafür ist, dass die Übertragungsgeschwindigkeit mit der Zeit variiert, ebenso wie der Durchschnitt und die Vorhersage. Um dies einem Nicht-Tech-Freund zu erklären, habe ich eine Analogie verwendet, bei der es um Flugreisen geht. Du wirst über den Atlantik fliegen. Wenn Sie mit einem Taxi am Abflughafen ankommen, beträgt Ihre ETA ungefähr zwei Monate. Wenn Sie am ankommenden Flughafen aussteigen, erreichen Sie, basierend auf Ihrer bisherigen Durchschnittsgeschwindigkeit, das Haus Ihres Freundes in 5 Sekunden.
Sie müssen sich jedoch darüber im Klaren sein, inwieweit die Geschwindigkeit tatsächlich variieren kann, selbst wenn es sich um ein vorhersehbares Szenario handelt, bei dem Dateien auf dieselbe Festplatte oder zwischen zwei lokalen Festplatten kopiert werden. Eine der neuen Funktionen, die ich in Windows 8 mag, ist die Möglichkeit, die Geschwindigkeit über die Zeit zu grafisch darzustellen, wenn Sie auf "Weitere Details" klicken. Wenn Sie keinen Zugriff auf einen Windows 8-Computer haben, durchsuchen Sie das Windows 8-Dialogfeld zum Kopieren nach einer Reihe von Beispielen. Viele von ihnen sind ziemlich flach, aber viele sind auch störend holprig, bis zu dem Punkt, an dem Sie sich fragen, ob die Festplatte tatsächlich fehlerfrei ist, wenn sie auf Null abfällt.
Einige dieser Unebenheiten sind wahrscheinlich auf Unterschiede in der Dateigröße zurückzuführen - kleinere Felder führen zu mehr Zugriffen, was die Arbeit verlangsamt, insbesondere auf einer mechanischen Festplatte, die durch Bewegen des Lesekopfs gesucht werden muss -, andere sind möglicherweise nur billige Laufwerke Stall bei der geringsten Berührung, um Schäden an den Platten zu vermeiden.
Es gibt bessere und schlechtere ETA-Vorhersagealgorithmen, aber für eine genaue Vorhersage muss der Computer allwissend sein. Das Risiko, den Algorithmus "schlau" zu machen, besteht darin, dass er neue, unvorhergesehene Fälle schafft, in denen er noch komischer falsch ist.
quelle
Die einzige Möglichkeit zu ermitteln, wie lange das Komprimieren einer Reihe von Dateien dauern wird, besteht darin, sie zu komprimieren. Manchmal ist die Vermutung von Windows nah, manchmal ist sie völlig falsch. Das gleiche gilt für das Kopieren einer großen Anzahl von Dateien, wie Sie sicherlich bemerkt haben.
Es ist weniger ein Fehler als vielmehr eine nutzlose Anzeige selten genauer Informationen. Der beste Weg, das Problem zu beheben, ist, die Augen zu schließen. Ignoriere es. ;-)
Vielleicht gibt es da draußen ein Programm, das Dateien kopieren / komprimieren und einen Alarmton auslösen kann, wenn es fertig ist. Das wäre wirklich nützlich. Wir könnten ein kleines Nickerchen machen, während wir darauf warten, dass Windows die Hausreinigung beendet.
quelle
Ich denke, der Grund wurde in einem der Kommentare des Blogposts, der mit Roalds Antwort verknüpft ist, gut erklärt :
Der Grund, warum es so schreckliche Schätzungen gibt, ist, dass es nicht gut gemacht ist. Natürlich kann es nie 100% genau sein, aber es könnte viel, viel besser sein.
quelle
Um den Kopiervorgang zu beschleunigen (anstatt kopierbezogene Vorgänge auszuführen, müssen Sie nicht zu viel Zeit mit dem Berechnen von Zeitschätzungen verbringen), verwaltet das in Explorer integrierte Windows-Kopierdienstprogramm eine begrenzte Menge an Informationen darüber, wie schnell vorherige Schreibvorgänge abgeschlossen wurden. Jedes Mal, wenn die verbleibende Zeit berechnet werden muss, wird lediglich die durchschnittliche Zeit berechnet, die für Schreibvorgänge benötigt wurde. Anschließend wird die Anzahl der verbleibenden Schreibvorgänge multipliziert.
Das Problem ist, dass die Zeit, die zum Ausführen einer Schreiboperation benötigt wird, nicht konstant ist - sie kann tatsächlich erheblich variieren. Dies führt wiederum zu signifikanten Änderungen in der Zeitschätzung.
quelle
A
] und die Anzahl der Datenpunkte, die verwendet wurden, um diesen Durchschnitt [n
] zu erhalten. Dann, um es zu aktualisieren, ist es nur ein Fall von(A*n + [New value])/[n+1]
. Da Kopiervorgänge fast immer an E / A und nicht an die CPU gebunden sind, ist eine einfache Berechnung wie diese alle paar Sekunden nichts. Andererseitsn
erfordert das Aufrechterhalten eines Durchschnitts der letzten Schreibvorgänge ein Array / eine Warteschlange / einen Stapel vonn
Elementen - damit Sie wissen, welcher Wert entfernt werden muss.Es sind 3 Faktoren zu berücksichtigen:
Die Zahlen 1 und 3 scheinen die offensichtlichste Auswirkung auf die Berechnung der Übertragungszeit zu haben, aber sehr viele Personen berücksichtigen die Zahl 2 nicht. Dies kann einen enormen Einfluss darauf haben, wie lange die Übertragung dauern wird, und ist schwer zu quantifizieren.
Grundsätzlich muss das Dateisystem jedes Mal, wenn eine Datei geschrieben wird, ein paar Metadaten über die Datei schreiben, z. Eigentumsrechte, Berechtigungen, Erstellungs- / Änderungs- / Zugriffszeiten usw. Abhängig vom jeweiligen Dateisystem werden diese Informationen möglicherweise auf einen Teil der Festplatte geschrieben, der sehr weit von dem Ort entfernt ist, an dem die Datei geschrieben wird. Dieser Overhead des Dateisystems kann dazu führen, dass eine scheinbar einfache Übertragung viel Zeit in Anspruch nimmt und / oder die geschätzte Zeit stark schwankt.
Beispiel: Wenn Sie eine große Datei übertragen, werden Sie feststellen, dass die Schätzung stabil und ziemlich genau ist. Das Übertragen von Hunderten von Dateien unterschiedlicher Größe, aber gleicher Gesamtgröße, kann länger dauern und dazu führen, dass die Zeitschätzung passt.
quelle
Derzeitige Schätzalgorithmen weisen drei Mängel auf.
Entgegen der landläufigen Meinung sind sie bei weitem nicht schwierig genug, um unsere Hände zu erheben.
Der Grund, warum die meisten Leute die Blogs schreiben und die Leute hier die Möglichkeit nicht kennen, ist so gut wie ich es aufgrund des Studienbereichs und der Schulbreite beurteilen kann. Ein bescheidenes, aber auch sehr komfortables Mittel sollte für [einen Absolventen mit einer aktuelleren Ausbildung als die Blogschreiber] [ein milliardenschweres Unternehmen] Microsoft möglich sein.
Ich werde versuchen, grob zu erklären, warum.
Die Fehlerquellen sind wie folgt. Der Kernel:
1. kann die zukünftige E / A-Last aufgrund von Umständen, die außerhalb des Bereichs des Kernels liegen, nicht zuverlässig vorhersagen
2. verfolgt keine E / A-Heuristiken in einer nützlichen Detailebene. Die Nutzung ist ein viel umfassenderes Konzept als die Lese- / Schreibgeschwindigkeit von Datenträgern / Netzwerken .
Es muss nur sehr wenig getan werden, nur um die grundlegendsten Informationen zur E / A-Nutzung zu erfassen
3. Würden sie verfolgt , hätten sie keine Verwendung für die Heuristik
Der Sinn all dessen ist, dass unser Modell nur 2a = F * (bxc) + d komplex ist
Wobei a, b und c jeweils drei Zustände haben: Der Dateimanager prüft die Dateien (oder nur die Metadaten) vor dem Kopieren, und F * (bxc) + d ist keine teure Berechnung. Wenn Sie etwas genaueres wünschen, verwenden Sie eine Nachschlagetabelle mit mehr Status - es gibt kaum eine Berechnung.
Hinweis: Die hier angegebenen Maße gelten für eine Platte. Bei einer SSD wären sie unterschiedlich - Anfang / Mitte / Ende spielen keine Rolle
Der Hauptunterschied zwischen dem, was ich beschrieben habe, und früheren Implementierungen, die wir bisher gesehen haben, wäre, kurz gesagt, die Dateigröße und die Dateiverteilung / -entropie auf der Festplatte zu beobachten und sie zu verwenden, um das Zeitelement der Festplattennutzung [genauer] zu berücksichtigen.
(Das Patent ist eine Übung für den Leser ...)
quelle
Es gibt viele "unbekannte" Variablen, wenn Sie vorhersagen möchten, wie lange etwas dauern wird. Bedeutet dies beispielsweise, dass das Programm weiß, dass es 3500 Dateien gibt und dass die Dateien 3,5 GB (3500 MB) betragen, dass jede Datei 1 MB groß ist? Nicht unbedingt. Es könnten viele 4-KB-Dateien und viele 100-MB-Dateien und einige andere dazwischen sein. Außerdem müssen Sie berücksichtigen, woher die Dateien kommen und wohin sie gehen (z. B. Medien). Was ist der größte Engpass? Wie versuchst du, Dateien von einer Festplatte durch einen VPN- Tunnel zu kopieren ? Sie geben ein Best-Case-Szenario an und passen dann Ihre Zähler in Echtzeit an. Aus diesem Grund sehen Sie, wie sich diese Fortschrittsanzeigen im Handumdrehen ändern.
quelle
Das mathematisch korrekte Modell besteht darin, eine naive Mittelung und Extrapolation durchzuführen:
Der Grund dafür ist, dass sich nach dem Gesetz der großen Zahlen die lokalen Schwankungen in der gemittelten Übertragungsgeschwindigkeit aufheben und Sie das stabilste Ergebnis erhalten.
Microsoft scheint die Übertragungsgeschwindigkeit zum letzten Zeitpunkt zu berechnen . Dies bedeutet, dass jede lokale Schwankung das Ergebnis erheblich verändert.
quelle
Wie Roald van Doorn sagte, ist es im Grunde nur eine Vermutung. Das heißt natürlich nicht, dass es keinen besseren Ratgeber geben könnte. Es gibt viele Heuristiken, die verwendet werden könnten, um dies zu berechnen.
Offensichtlich ist nichts davon einfach zu implementieren. Ich erwähnte nur Dateikopien. Ähnliche Arbeiten müssten für alle Arten von Übertragungen durchgeführt werden.
Die Frage, die Sie sich stellen müssen - Würden Sie lieber mit Microsoft eine bessere Schätzung vornehmen, oder möchten Sie, dass Ihre Dateien schneller übertragen werden?
Wenn Sie jedoch etwas mit 7-zip komprimieren, werden Sie feststellen, dass es viel besser ist, als Windows zu raten. Ich bezweifle, dass es etwas so Kompliziertes tut, nur einen etwas besseren Ratgeber.
quelle
Kurz gesagt basiert die Berechnung auf der aktuellen Übertragungsgeschwindigkeit .
Beispiel: Wenn Ihre Übertragungsrate sinkt, weil Windows sehr viele kleine Dateien kopieren muss, steigt die erwartete Zeit linear an und umgekehrt für große Dateien.
Es ist nahezu unmöglich vorherzusagen, wie schnell die Übertragung während des gesamten Übertragungsprozesses sein wird, da dies von vielen Faktoren wie Dateigröße, CPU-Auslastung, Übertragungsfehlern usw. abhängt.
quelle
Es gibt einige interessante Antworten im MSDN-Blogbeitrag. Verbessern unserer Dateiverwaltungsgrundlagen: Kopieren, Verschieben, Umbenennen und Löschen . Warum ist es schwer:
Und wie sie sich verbessern,
Das heißt, wenn Sie wirklich nur die angegebene Schätzung verbessern und die Fortschrittsanzeige so lassen möchten, wie sie ist, können Sie in einem Slashdot-Kommentar Folgendes vorschlagen :
quelle
Ich wollte nur hinzufügen, dass die Gesamtzahl der Dateien der zeitaufwändigste Faktor für Dateikopiervorgänge auf einem PC ist. Ich kann mich immer noch an einen jungen Studenten erinnern, der absichtlich das Versagen von PCs in meiner Computerklasse verursacht hat, indem er mit 1 Datei ohne Inhalt begonnen und diese kopiert, dann die 2 Dateien ausgewählt und erneut kopiert und so weiter. Nach ungefähr 1024 Dateien dauerte es sehr viel Zeit, um etwas zu tun, selbst wenn keine Informationen mehr für den Dateikopf kopiert wurden. Probieren Sie es selbst auf einem neuen Betriebssystem aus, exponentielle Dateikopien und Sie werden sehen, was passiert. Denkanstoß.
quelle
Ich habe gerade 200 GB von der USB-Festplatte auf mein Hauptlaufwerk kopiert. Es gab ungefähr 130000 Dateien
Nach den ersten 4-5 Minuten stellte ich fest, dass:
Zu Beginn wurde die Schätzung von 1 Stunde auf mehr als 5 Stunden geändert, dann wieder auf 1 Stunde und so weiter. Am Ende änderte sich die Schätzung wie bei 95% immer noch von 10 Minuten auf 10+ Stunden. Anstatt genauer zu werden, wurde es immer ungenauer.
Einfache Mathe zeigt:
130.000 Dateien mit 100 Dateien pro Sekunde = 22 Minuten
200.000 MB bei 70 MB pro Sekunde = 47 Minuten
22 Minuten - In der Suchzeit werden Dateien mit einer Größe von wenigen Kilobyte kopiert. 47 Minuten - die Zeit, die zum Übertragen der tatsächlichen Daten benötigt wird, wenn keine Suchzeit vorhanden ist.
Die Summe der 22min + 47min ist die absolute maximale Zeit, die es möglicherweise dauern könnte.
Die Schätzung sollte also offensichtlich zwischen 47 und 69 Minuten liegen.
Was der Dialog bei ca. 90% anzeigt: "Ich kopiere einige kleine Dateien mit 1MB / s, es sind 20GB mehr Daten vorhanden, die Fertigstellung dauert 5:30 Stunden.
Ein paar Sekunden später: "Ich kopiere eine große Datei hierher, bei 70 MB / s dauert es 4 Minuten, bis sie fertig ist.
Was der Mensch tatsächlich aus demselben Dialog sieht: 120.000 Dateien und 180 GB werden bereits 40 Minuten lang kopiert. Die restlichen 10000 Dateien und 20 GB sollten ungefähr 5 Minuten dauern
Das Dialogfeld enthält genügend Informationen, um Berechnungen durchzuführen, die mit jeder Sekunde genauer werden. Es ist bekannt, mit welcher Geschwindigkeit kleine Dateien kopiert werden. Es weiß, mit welcher Geschwindigkeit große Dateien kopiert werden. Es weiß auch, wie viele Dateien und wie viele Bytes noch übrig sind.
Es ist so einfach, nur durch Einstellen der oberen und unteren Grenze eine so genaue Annahme zu treffen.
Der Dialog zeigt etwas korrektere Daten nur für den Fall, dass die großen Dateien vor den kleinen Dateien liegen. Wenn dies der Fall ist, beginnt es nach 40 Minuten, und nach 30 Minuten beginnt es, kleine Dateien zu kopieren und sagt: "Nun, ich brauche noch 20 Minuten".
Aber wenn die kleinen Dateien am Anfang und die großen Dateien am Ende sind. Dem Dialog ist es eigentlich egal, bei welchen "Dateien pro Sekunde" er die kleinen Dateien überträgt. Es rechnet so, als ob die Anzahl der kleinen Dateien unendlich ist und sie für immer klein sein werden.
quelle