Windows-Dateikopierdialog: Warum ist die Schätzung so ... SCHLECHT?


38

Einschätzung

xkcd

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?



Der Fortschrittsbalken zeigt die Anzahl der abgeschlossenen Dateien an, nicht die prozentuale Zeit, die zu Ihrer Information verstrichen ist.
Factor Mystic


3
Dies sollte auch für jedes Betriebssystem gelten, nicht nur für Windows, da die Einschränkungen meines Erachtens universell sind.
Clockwork-Muse

1
Zu beachten ist auch Mark Russinovichs Blogpost: blogs.technet.com/b/markrussinovich/archive/2008/02/04/…
surfasb

Antworten:


29

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:

  1. Sie müssen Ressourcenschwankungen berücksichtigen (hauptsächlich CPU / Netzwerkbandbreite / Festplattengeschwindigkeit)
  2. Sie müssen die benötigte Zeit hochrechnen, indem Sie das Verhalten vorhersagen (was die Windows-Dateikopie im Moment definitiv schlecht macht).
  3. Nehmen Sie mit der Zeit Anpassungen an Ihrer ursprünglichen Schätzung vor (ich meine kleine Anpassungen, die nicht auf dem lustigen Bild oben zu sehen sind!)

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:

  • Wenn auf einem älteren WinNT-System viele kleine Dateien kopiert werden mussten, wurden der Name und die nette Animation für jede Datei angezeigt, wodurch der gesamte Prozess praktisch unbrauchbar wurde.

Das moderne Windows-Copy-Zeug ist nicht viel besser:

  • Um die zu übertragende Datenmenge zu berechnen, scheint zunächst ein Lookup durchgeführt zu werden (ich nehme an, dass dies der Fall ist). Wenn Sie also viele Verzeichnisse auswählen, dauert es Ewigkeiten, bis der Job tatsächlich ausgeführt wird.
  • Einige integrierte Zeitüberschreitungen führen dazu, dass große Dateien kopiert werden müssen (> ca. 60 GB auf meinem System). Der Schmerz ist, dass es Ihnen sagt, dass nach dem Kopieren bereits mehr als 30 GB über das Netzwerk und dies Bandbreite und Zeit verloren, weil Sie neu starten müssen!
  • Das Kopieren von Dateien von einem Computer auf einen anderen ist aus irgendeinem Grund verdammt langsam. (Ich meine, verglichen mit der verfügbaren Netzwerkbandbreite, ist die Verwendung anderer Tools schneller, sodass dies keine rechnerische Einschränkung darstellt.)

Sehr interessant!
Maxim Zaslavsky

48

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

"Weil der Kopierdialog nur raten kann. Er kann die Zukunft nicht vorhersagen, ist aber gezwungen, es zu versuchen. Und ganz am Anfang der Kopie kann die Vorhersage, wenn nur sehr wenig Geschichte übrig ist, wirklich schlecht sein.

Hier ist eine Analogie: Angenommen, jemand sagt Ihnen: "Ich zähle bis 100, und Sie müssen fortlaufend Schätzungen darüber abgeben, wann ich fertig sein werde." Sie beginnen mit "eins, zwei, drei ...". Sie bemerken, dass sie ungefähr eine Zahl pro Sekunde erreichen, also schätzen Sie 100 Sekunden. Oh, jetzt werden sie langsamer. "Vier ... ... ... fünf ... ..." Jetzt müssen Sie Ihre Schätzung auf vielleicht 200 Sekunden ändern. Jetzt beschleunigen sie: "Sechs-Sieben-Acht-Neun" Sie müssen Ihre Schätzung erneut aktualisieren.

Jemand, der nur auf Ihre Schätzungen hört und nicht auf die Person, die zählt, denkt, dass Sie von Ihrer Wippe abgekommen sind. Ihre Schätzung ist von 100 Sekunden auf 200 Sekunden auf 50 Sekunden gestiegen. Was ist dein Problem? Warum können Sie keine gute Schätzung abgeben?

Das Kopieren von Dateien ist dasselbe. Die Shell weiß, wie viele Dateien und wie viele Bytes kopiert werden, aber sie weiß nicht, wie schnell die Festplatte, das Netzwerk oder das Internet sein werden, also muss sie nur raten. Wenn sich der Kopierdurchsatz ändert, muss sich die Schätzung ändern, um die neue Übertragungsrate zu berücksichtigen. "


8
Die Analogie, die er gibt, kann in einem Wort zusammengefasst werden: Statistik.
Surfasb

33

Ich werde bis zehn zählen, 1....2....3....4wie viele Punkte wird es brauchen, um auf 10 zu kommen?

5.6.7Was 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.


2
Vor mir, warum sie keinen exponentiellen oder regelmäßigen gleitenden Durchschnitt ermittelt haben ...
Mehrdad

@Mehrdad Ich denke, die neueren Versionen von Windows haben ein viel ähnlicheres ETA-Zeitverhalten wie 7zip in Windows 7 und neuer.
Scott Chamberlain

15

Es gibt tatsächlich eine fast kanonische Antwort von Microsofts Raymond Chen von WAAAAAY zurück, und es gibt ein paar Teile des Puzzles.

Weil der Kopierdialog nur raten kann. Es kann die Zukunft nicht vorhersagen, ist aber gezwungen, es zu versuchen. Und ganz am Anfang der Kopie, wenn nur sehr wenig Geschichte übrig ist, kann die Vorhersage wirklich schlecht sein.

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.


Interessanterweise beschreibt der erste Kommentar aus dem Jahr 2004 die detaillierte Dropdown-Liste der Dateikopie-Informationen mit den verbleibenden Bytes, die erst 2006 in Vista eingeführt wurden.
Scott Chamberlain

2
Ja, jemand im Chat hat darauf hingewiesen. Ich bin versucht zu sagen, dass dies das Problem löst, dass der Benutzer zum Zeitpunkt der Fertigstellung starrt, indem er stattdessen bunte Grafiken ansieht :)
Journeyman Geek

@JourneymanGeek "Jemand im Chat" berichtet in! Ja, obwohl dies eine ziemlich maßgebliche Quelle ist, ist es wichtig zu bedenken, dass es aus dem Jahr 2004 stammt, stark veraltet ist und wahrscheinlich nur vage mit den aktuellen Algorithmen in Verbindung steht, die unter Windows 8 verwendet werden.
Bob,

1
Hier ist ein verwandter Blog-Beitrag zu Windows 8: "Es ist nahezu unmöglich, die verbleibende Zeit für die Erstellung einer Kopie mit Genauigkeit abzuschätzen ... Statt viel Zeit in die Erstellung einer Schätzung mit geringem Vertrauen zu investieren, die nur geringfügig verbessert werden würde In der aktuellen Ausgabe haben wir uns darauf konzentriert, die Informationen zu präsentieren, von denen wir überzeugt waren ... "
Kelly Thomas,

12

Hier die Erklärung von Raymond Chen , Principal Software Design Engineer bei Microsoft:

Warum gibt der Kopierdialog so schreckliche Schätzungen?

Weil der Kopierdialog nur raten kann. Es kann die Zukunft nicht vorhersagen, ist aber gezwungen, es zu versuchen. Und ganz am Anfang der Kopie, wenn nur sehr wenig Geschichte übrig ist, kann die Vorhersage wirklich schlecht sein.

Hier ist eine Analogie: Angenommen, jemand sagt Ihnen: "Ich zähle bis 100, und Sie müssen fortlaufend Schätzungen darüber abgeben, wann ich fertig sein werde." Sie beginnen mit "eins, zwei, drei ...". Sie bemerken, dass sie ungefähr eine Zahl pro Sekunde erreichen, also schätzen Sie 100 Sekunden. Oh, jetzt werden sie langsamer. "Vier ... ... ... fünf ... ..." Jetzt müssen Sie Ihre Schätzung auf vielleicht 200 Sekunden ändern. Jetzt beschleunigen sie: "Sechs-Sieben-Acht-Neun" Sie müssen Ihre Schätzung erneut aktualisieren.

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.


9

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.

Windows 8-Kopierdialog

Windows 8 Kopierdialog 2


4

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.


4

Ich denke, der Grund wurde in einem der Kommentare des Blogposts, der mit Roalds Antwort verknüpft ist, gut erklärt :

Es hat einen schrecklichen Schätzalgorithmus. Es gibt keine Ausreden. Wenn 1000 1-KB-Dateien und 10 1-MB-Dateien kopiert werden müssen, wird davon ausgegangen, dass die 1-MB-Datei genauso ausgelastet ist wie die 1-KB-Dateien.

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.


1
Wenn Sie wissen möchten, wie groß eine Datei in Windows ist, müssen Sie sie öffnen. Wenn Sie eine Datei in Windows öffnen, müssen Sie sie lesen. Und anstatt alle Dateien zu öffnen, um zu sehen, wie groß sie sind, um einen guten Kostenvoranschlag für die Dauer des Kopiervorgangs zu erhalten, entschließt sich Windows, die Zeit für das eigentliche Kopieren der Dateien zu verwenden - schließlich haben Sie darum gebeten.
SecurityMatt

1
@SecurityMatt: Wenn dies der Fall wäre, würde es Ewigkeiten dauern, um eine Verzeichnisliste zu erhalten. Ich bin sicher, dass die Dateigrößen im Verzeichnis gespeichert und aktualisiert werden, wenn die Datei geändert wird. Daher sollte es eine Möglichkeit geben, eine schnelle und ziemlich genaue Schätzung der Kopierzeit auf der Grundlage der im Verzeichnis aufgeführten Dateigrößen und einiger Annahmen zur Übertragungsgeschwindigkeit zu erhalten. Ein wirklich intelligentes Betriebssystem würde auf die durchschnittliche Übertragungsgeschwindigkeit im Zeitverlauf achten und diese in seinen Schätzungen verwenden.
RobH

4

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.


Ich glaube nicht, dass Sie in dieser Frage ganz richtig liegen - Sie können einen brauchbaren Durchschnitt der Schreibvorgänge mit nur 2 Zahlen aufrechterhalten - den aktuellen Durchschnitt [ 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. Andererseits nerfordert das Aufrechterhalten eines Durchschnitts der letzten Schreibvorgänge ein Array / eine Warteschlange / einen Stapel von nElementen - damit Sie wissen, welcher Wert entfernt werden muss.
Grundlegende

Guter Punkt! Also warum zum Teufel ist es so überall? : P
Brian Gradin

Ich gehe davon aus, dass sie versucht haben, klug zu sein, indem sie einen reaktionsschnelleren Durchschnitt ermittelt haben, wobei nur die letzten paar Schreibvorgänge berücksichtigt wurden - und zu wenige ausgewählt haben. Das heißt, ich habe nicht die Quelle, also wer weiß?
Basic

4

Es sind 3 Faktoren zu berücksichtigen:

  1. Die Gesamtgröße der Übertragung.
  2. Die Anzahl der zu übertragenden Dateien.
  3. Die "Beschäftigtheit" der Medien und möglicherweise die Verbindung.

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.


4

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

  • Diesbezüglich sollte nichts unternommen werden, da es sich um ein sehr unbegrenztes P = NP-Problem handelt.

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

    • von der Festplatte
      • die durchschnittliche Lesegeschwindigkeitsabmessung 1a
      • Die durchschnittliche Schreibgeschwindigkeit von Dateien Dimension 2a
    • auf Quantenbasis * nach
      • die Dateigrößenabmessung b
      • Der Speicherort der Datei auf der Festplatte. c
    • * in [wahrscheinlich] nicht mehr als 3 Kategorien quantisiert. Die Reduzierung der Dimensionalität würde uns dabei helfen, mit Sicherheit zu bestimmen, aber 3 sollte für (wahrscheinlich ziemlich effektive) Vorhersagemechanismen ausreichen, die besser als nichts sind:
      • Dateigröße
        • Licht
        • Mittel
        • schwer
      • Ort [informiert über Suchlatenz]
        • Anfang
        • Mitte
        • Du verstehst, worum es geht
      • Dateigröße und Speicherort sind redundant / überschneiden sich mit der Lese- / Schreibgeschwindigkeit. Dies ist beabsichtigt
    • Wir müssen wissen, wie "beschäftigt" die Festplatte war, damit wir davon ausgehen können, dass sie weiterhin in der Dimension "beschäftigt" ist. d
      • berechnet aus der Menge der zu lesenden Dateien, berechnet mit ihren jeweiligen Gewichten
      • Wird verwendet, um die Zeit zu Beginn des Kopiervorgangs zu schätzen. Der Dialog basiert auf der erwarteten zukünftigen Auslastung, wenn alle anderen Elemente außer diesem Kopierdialog unverändert bleiben
    • Die Aufzeichnungsmethode für ... diesen Zweck ist patentierbar

3. Würden sie verfolgt , hätten sie keine Verwendung für die Heuristik

  • Hier, wo wir den größten Teil der Arbeit erledigen, wurde wenig getan
  • Hier setzen wir die Daten aus # 2 ein
    • Grobe statistische Analyse der Dateigrößen und Speicherorte, um zu bestimmen, wie viel Sprung wir machen werden. Das Gewicht + Ort gibt uns eine Vorhersage
    • Kombinieren Sie mit den aktuellen Gewichten und Positionen der Festplatten
    • zu schätzen , was wir durchschnittliche Lese- / Schreibgeschwindigkeit von der Anzahl der Dateien denken Dimension f wird
    • Wir vergleichen dies mit der Feinabstimmung unseres Modells
    • Dadurch können wir den Fortschrittsbalken und die Zeit bis zur Fertigstellung ziemlich genau abschätzen
  • Die Methode der Analyse zum Zweck der Vorhersage ... hier ist patentierbar

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 ...)


@ Twisty Ich bin fertig, wie ist es jetzt?
Erhöhen Sie den

Viel besser. Viel Glück bei der Nutzung der Website und vielen Dank für Ihren Beitritt zur Community.
Ich sage Reinstate Monica

3

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.


2

Das mathematisch korrekte Modell besteht darin, eine naive Mittelung und Extrapolation durchzuführen:

transfer speed = data copied / time elapsed
time remaining = data remaining / transfer speed

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.


2
Ihr Modell ist nicht in der Lage, lang andauernde Störungen, wie das parallele Starten anderer Dateiübertragungen, richtig zu behandeln, und teilt mir weiterhin mit, dass es nur noch 5 Minuten dauert, obwohl die gleiche Datenmenge gerade 20 Minuten gedauert hat. Ein gewichteter gleitender Durchschnitt könnte genauer sein.
Daniel Beck

@ DanielBeck: Nicht genau richtig. Die erwartete Zeit wird sich allmählich erhöhen. Die Frage ist, wie schnell es zunehmen wird? Nun, es hängt von der verstrichenen Zeit ab. Wenn es sich um eine lange Operation handelte, die z. B. bereits 5 Stunden lang kopiert wurde, erhöht dies die Erwartung nicht wesentlich. Aber ist die Ungenauigkeit von 15 Minuten für den 5-Stunden-Betrieb von Bedeutung? Nein. Der Punkt ist, dass Sie die beste Annäherung in Bezug auf den relativen Fehler erhalten. Sie können auch nichts tun, was in jedem Szenario viel besser funktioniert .
ybungalobill

2
Das Problem Ihres Modells ist, dass es während der Übertragung absolut nicht auf Änderungen der Übertragungsrate reagiert. Dies ist genauso unerträglich wie die reaktionsschnelle Windows-Dateiübertragung. Beispiel : Zuerst werden 60 GB mit 10 MB / s übertragen. Verbleibende Zeit beim Start: 100min. Übertragen Sie 54 GB und legen Sie sie auf 2 MB / s ab. Nach 90 Minuten: Geschätzte verbleibende Zeit bei 54 GB: 10 Minuten. Restzeit bei 54GB: 50min. Nach 115 Minuten : Geschätzte verbleibende Zeit bei 57 GB: 6 Minuten. Restzeit bei 57GB: 25min. Nach 131,67 Minuten : Geschätzte verbleibende Zeit bei 59 GB: 2,23 Minuten. Verbleibende Echtzeit bei 59 GB: 8,33 Minuten.
Daniel Beck

@DanielBeck: Die gesamte Übertragung dauert 150 Minuten, daher beträgt der maximale relative Fehler zu Beginn der Übertragung 50%, wo Sie nichts Besseres tun können. Beim 54. GB sind es nur ~ 14% der Gesamtsumme. (Wenn Sie 150 Minuten brauchen, warum 20 Minuten?) Eigentlich eine sehr gute Schätzung ... Das heißt, ich verstehe Ihren Punkt. Die Art und Weise, dies zu verbessern, ist kein gewichteter gleitender Durchschnitt, da Sie nicht wissen können, wie groß das Fenster sein soll (wird dieser Vorgang voraussichtlich Minuten dauern, wie das Kopieren einer Datei
? Ybungalobill

oder Stunden über ein p2p-File-Sharing-Protokoll (10 Minuten mit 10 MB / s und 10 Minuten mit 0 MB / s). Die Möglichkeit, dies zu verbessern, besteht darin, den Durchschnitt nach Zeit und nicht nach Größe zu gewichten.
ybungalobill

1
There is some way to refine or correct this kind of "bug"?

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.

  1. Der beste und teuerste Weg wäre, eine Historie früherer 'Kopien' zu führen und dann künstliche Intelligenzalgorithmen zu verwenden, um eine Schätzung zu berechnen
  2. Man könnte eine Formel aufbauen, die darauf basiert, wie lange es dauern sollte. Sie können unter anderem Folgendes berücksichtigen: Dateisystem, Anzahl der Dateien, Größe der Dateien, Suchzeit der Festplatte, Schreib- / Lesegeschwindigkeit der Festplatte, Speicherort der Dateien auf der Festplatte (Fragmentierung), aktuelle Festplattenauslastung.
  3. Eine Mischung aus beidem. Dh Machen Sie einige Benchmarks, um herauszufinden, wie lange bestimmte Operationen dauern, und verwenden Sie diese als Verlauf für einfache Formeln.

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.


1

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.


1

Es gibt einige interessante Antworten im MSDN-Blogbeitrag. Verbessern unserer Dateiverwaltungsgrundlagen: Kopieren, Verschieben, Umbenennen und Löschen . Warum ist es schwer:

Es ist nahezu unmöglich, die verbleibende Zeit für die Erstellung einer Kopie mit Genauigkeit abzuschätzen, da viele unvorhersehbare und nicht kontrollierbare Variablen beteiligt sind. Wie viel Netzwerkbandbreite steht beispielsweise für die Länge des Kopierjobs zur Verfügung? Läuft Ihre Antivirensoftware an und scannt die Dateien? Muss eine andere Anwendung auf die Festplatte zugreifen? Wird der Benutzer einen weiteren Kopierjob starten?

Und wie sie sich verbessern,

Anstatt viel Zeit zu investieren und eine niedrige Konfidenzschätzung zu erstellen, die sich gegenüber der aktuellen nur geringfügig verbessert, haben wir uns darauf konzentriert, die Informationen, über die wir uns sicher waren, auf nützliche und überzeugende Weise zu präsentieren. Auf diese Weise erhalten Sie die zuverlässigsten Informationen, die uns zur Verfügung stehen, damit Sie fundiertere Entscheidungen treffen können.

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 :

Führen Sie für jedes Speichergerät im Dateisystem eine Tabelle mit den erwarteten Geschwindigkeiten. Notieren Sie, wie lange das Lesen der Dateisysteminformationen dauert. Wenn ein Gerät montiert ist, gehen Sie, wenn es für den Gerätetyp angemessen ist, nach Mitte und Ende und messen dort auch die Geschwindigkeiten. Erhalten Sie ungefähre Kurven für die Lese- und Schreibgeschwindigkeiten über Standorte hinweg und verwenden Sie diese für zukünftige Schätzungen. Notieren Sie sich für zukünftige Lese- und Schreibvorgänge, wo sie sich befinden und wie schnell sie sind, und passen Sie die Kurven entsprechend an.

Wenn eine Operation gestartet wird, überprüfen Sie die Kurven für die Eingabe und Ausgabe für die jeweiligen Geräte. Finden Sie die erwartete Geschwindigkeit für den Zielort. Für die Schätzung sollte die niedrigere Geschwindigkeit verwendet werden.


1

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ß.


Dies ist zwar interessant, beantwortet aber nicht die Frage. Lesen Sie, wie Sie antworten müssen, bevor Sie antworten.
Benutzer 99572 ist in Ordnung

0

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:

  • Bei den kleinsten Dateien betrug die Rate etwa 100 Dateien pro Sekunde bei etwa 600 KB / s
  • Und für große Dateien waren es 70 MB / s

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.


Dies beantwortet die Frage nicht wirklich.
DavidPostill

Es beantwortet es tatsächlich, wenn Sie sorgfältig lesen. Es handelt sich um zwei Arten von Fehlschätzungen, und ich habe erklärt, warum sie unter dem Gesichtspunkt des beispielbasierten Reverse Engineerings auftreten.
Xizario
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.