Okno dialogowe kopiowania plików systemu Windows: dlaczego oszacowanie jest tak… ZŁE?


38

Oszacowanie

xkcd

Wiem, że okno dialogowe kopiowania systemu Windows (w systemie Windows XP) najpierw przechowuje kopię w pamięci i nadal kopiuje się po zamknięciu okna dialogowego, więc czas jest wyłączony, ale dlaczego szacuje się, ile czasu zajmie wykonanie kopii tak niedokładne, nawet jeśli kopiowanie pamięci zostało wyłączone (w Vista i Windows 7)? To wydaje się takie arbitralne! Jak działa cała procedura kopiowania i dlaczego system Windows nie może jej poprawnie oszacować?



Pasek postępu pokazuje liczbę ukończonych plików, a nie procent ukończonego czasu, fyi.
Factor Mystic


3
Powinno to również dotyczyć każdego systemu operacyjnego, nie tylko systemu Windows, ponieważ uważam, że ograniczenia są uniwersalne.
Clockwork-Muse,

1
Warto również odnotować wpis na blogu Marka Russinovicha: blogs.technet.com/b/markrussinovich/archive/2008/02/04/...
surfasb

Odpowiedzi:


29

W skrócie: słabe algorytmy i błędne oszacowanie są w rzeczywistości słabością implementacyjną.

Inne narzędzia, takie jak TeraCopy, wykonują lepszą pracę. Myślę, że nie warto wyjaśniać, dlaczego ich wdrożenie nie jest dobre. Zauważą to i poprawią się.

Co jest trudne:

  1. Musisz wziąć pod uwagę fluktuacje zasobów (głównie procesor / przepustowość sieci / prędkość dysku twardego)
  2. Musisz ekstrapolować czas, jaki zajmie, przewidując zachowanie (to, co kopia pliku systemu Windows ostatecznie robi teraz źle).
  3. Dokonuj korekt w czasie do pierwotnej oceny (mam na myśli niewielkie korekty, inne niż na powyższym śmiesznym zdjęciu!)

W tym przypadku ważną rolę odgrywa nie tylko liczba bajtów, ale także liczba tworzonych plików. Jeśli masz milion plików 1KB lub tysiąc plików 1 MB, sytuacja będzie zupełnie inna, ponieważ na pierwszym z nich powstaje wiele plików. W zależności od używanego systemu plików może to zająć więcej czasu niż faktyczne przesłanie danych.

To okno doprowadziło mnie również do szału kilka razy:

  • W starszym systemie WinNT, jeśli miałeś dużo małych plików do skopiowania, wyświetlał nazwę i ładną animację dla każdego pliku, spowalniając cały proces, aby był praktycznie bezużyteczny.

Współczesne kopiowanie systemu Windows nie jest dużo lepsze:

  • Aby obliczyć ilość danych do przesłania, wydaje się, że najpierw wyszukuje (tak przypuszczam, że tak robi), więc wybranie wielu katalogów zajmuje dużo czasu, dopóki nie zacznie skutecznie wykonywać zadania.
  • Niektóre wbudowane limity czasu uniemożliwiają kopiowanie dużych plików (> około 60 GB w moim systemie). Ból polega na tym, że mówi ci, że po skopiowaniu już ponad 30 GB przez sieć, a to traci przepustowość i czas, ponieważ musisz zrestartować od zera!
  • Z jakiegoś powodu kopiowanie plików z jednego komputera na drugi jest cholernie wolne. (Mam na myśli w porównaniu z dostępną przepustowością sieci, użycie innych narzędzi jest szybsze, więc nie jest to ograniczenie obliczeniowe).

Bardzo interesujące!
Maxim Zaslavsky,

48

Raymond Chen napisał kiedyś bardzo fajny artykuł na ten temat. Zasadniczo okno dialogowe zgaduje :).

http://blogs.msdn.com/b/oldnewthing/archive/2004/01/06/47937.aspx

„Ponieważ okno dialogowe kopiowania jest tylko zgadywaniem. Nie może przewidzieć przyszłości, ale jest zmuszone spróbować. I na samym początku kopiowania, kiedy jest bardzo mało historii do przewidzenia, prognozy mogą być naprawdę złe.

Oto analogia: Załóżmy, że ktoś ci powie: „Zamierzam liczyć do 100, a ty musisz podawać ciągłe szacunki, kiedy skończę”. Zaczynają: „raz, dwa, trzy…”. Zauważysz, że zbliżają się one do jednej liczby na sekundę, więc szacujesz 100 sekund. Och, teraz zwalniają. „Cztery ... ... ... pięć ... ... ...” Teraz musisz zmienić swoje oszacowanie na może 200 sekund. Teraz przyspieszają: „sześć-siedem-osiem-dziewięć” Musisz ponownie zaktualizować swoje oszacowanie.

Teraz ktoś, kto słucha tylko twoich szacunków, a nie osoby liczącej, myśli, że nie rozumiesz. Twoje oszacowanie wzrosło ze 100 sekund do 200 sekund do 50 sekund; jaki masz problem? Dlaczego nie możesz podać dobrego oszacowania?

Kopiowanie plików to to samo. Powłoka wie, ile plików i ile bajtów zostanie skopiowanych, ale nie wie, jak szybki będzie dysk twardy, sieć lub internet, więc po prostu zgadnij. Jeśli przepustowość kopiowania ulegnie zmianie, szacunek musi się zmienić, aby uwzględnić nową szybkość transferu ”.


8
Podaną przez niego analogię można streścić jednym słowem: Statystyka.
surfasb

33

Będę liczyć do dziesięciu, 1....2....3....4ile kropek zajmie dotarcie do 10?

5.6.7Co teraz? Czy bierzesz pod uwagę wszystkie poprzednie kropki między liczbami i średnią, czy bierzesz tylko ostatnie 4 przedziały i używasz tej średniej, czy patrzysz tylko na ostatni przedział?

Masz ten sam problem z przesyłaniem plików. Szybkość przesyłania plików nie jest stała, przyspiesza i zwalnia na podstawie wielu czynników. Powodem, dla którego liczba przeskakuje tak bardzo, jest fakt, że Microsoft pochylił się w stronę widma „licz tylko ostatni przedział”.

Po tej stronie widma nie ma nic złego, daje dokładniejsze „sekundy na sekundę” (jedna sekunda w czasie rzeczywistym powoduje, że licznik zmniejsza się o jedną sekundę), ale powoduje to, że całkowita ETA licznika czasu przeskakuje dużo .

Dobrym przykładem przeciwnej strony jest 7-Zip podczas kompresji. Jeśli szybkość kompresji spadnie podczas przetwarzania, można zauważyć, że ETA nie skacze gwałtownie jak ETA przesyłania plików, ale może minąć od 2 do 3 rzeczywistych sekund, zanim licznik czasu skróci się o jedną sekundę (lub nawet może zacząć się odliczać ), aż ustabilizuje się przy nowej prędkości.


2
Bicie mnie, dlaczego nie zrobili wykładniczej ani regularnej średniej ruchomej ...
Mehrdad

@Mehrdad Myślę, że nowsze wersje systemu Windows tak robią, czas ETA zachowuje się bardziej jak 7zip w Windows 7 i nowszych.
Scott Chamberlain

15

W rzeczywistości jest prawie kanoniczna odpowiedź Raymonda Chena na ten temat z WAAAAAY, a układanka zawiera kilka elementów.

Ponieważ okno dialogowe kopiowania jest tylko zgadywaniem. Nie może przewidzieć przyszłości, ale musi spróbować. A na samym początku kopii, kiedy jest bardzo mało historii do przewidzenia, prognozy mogą być naprawdę złe.

Po pierwsze, Windows zgaduje. Wie, ile plików i jak duże są, ale szybkość transferu na plik jest bardzo zmienna. W niektórych przypadkach zależy to od wielkości, a nawet lokalizacji na dysku. Z biegiem czasu dostosowuje zgadywanie na podstawie bieżących i przeszłych warunków, a zatem masz niedokładne szacunkowe prędkości transferu w rzeczywistych warunkach.


Interesujące jest to, że pierwszy komentarz z 2004 r. Opisuje szczegółowe menu informacji o kopiowaniu plików pokazujące pozostałe bajty, które nie zostało wprowadzone do 2006 r. W systemie Vista.
Scott Chamberlain

2
Tak, ktoś na czacie również to zauważył. Kusi mnie, aby powiedzieć, że rozwiązuje to problem gapienia się użytkownika do czasu, dając mu kolorowe wykresy, na które można się gapić :)
Journeyman Geek

@JourneymanGeek „ktoś na czacie” zgłasza się! Tak, chociaż jest to dość wiarygodne źródło, należy pamiętać, że pochodzi ono z 2004 r. I jest mocno przestarzałe i prawdopodobnie tylko w niewielkim stopniu powiązane z obecnymi algorytmami używanymi w systemie Windows 8.
Bob

1
Oto pokrewny post na blogu na temat systemu Windows 8: „Szacowanie czasu pozostałego do ukończenia kopiowania jest prawie niemożliwe do wykonania z jakąkolwiek precyzją ... Zamiast poświęcać dużo czasu na opracowanie szacunków o niskim poziomie ufności, które można by tylko nieznacznie poprawić nad obecnym skupiliśmy się na przedstawieniu informacji, na których jesteśmy pewni ... ”
Kelly Thomas

12

Oto wyjaśnienie przez Raymond Chen , główny Software Design Engineer w firmie Microsoft:

Dlaczego okno dialogowe kopiowania podaje tak okropne oszacowania?

Ponieważ okno dialogowe kopiowania jest tylko zgadywaniem. Nie może przewidzieć przyszłości, ale musi spróbować. A na samym początku kopii, kiedy jest bardzo mało historii do przewidzenia, prognozy mogą być naprawdę złe.

Oto analogia: Załóżmy, że ktoś ci powie: „Zamierzam liczyć do 100, a ty musisz podawać ciągłe szacunki, kiedy skończę”. Zaczynają: „raz, dwa, trzy…”. Zauważysz, że zbliżają się one do jednej liczby na sekundę, więc szacujesz 100 sekund. Och, teraz zwalniają. „Cztery ... ... ... pięć ... ... ...” Teraz musisz zmienić swoje oszacowanie na może 200 sekund. Teraz przyspieszają: „sześć-siedem-osiem-dziewięć” Musisz ponownie zaktualizować swoje oszacowanie.

Blogu cytowany powyżej ma długą dyskusję na temat tego problemu, z ciekawych komentarzy.

Raymond Chen to legendarna osoba, „Chuck Norrisa Microsoftu”, nie sądzę, że dostaniesz bardziej wiarygodną odpowiedź. Jestem pewien, że przynajmniej widział ten kod.


9

Oczywistym powodem jest to, że prędkość transferu zmienia się w czasie, podobnie jak średnia, podobnie jak prognozy. Aby wyjaśnić to przyjacielowi, który nie jest technologiem, wykorzystałem analogię do podróży samolotem. Lecisz nad Atlantykiem. Po przylocie taksówki na lotnisko odlotu, ETA wynosi około dwóch miesięcy. Kiedy wysiadasz na lotnisku docelowym, w oparciu o dotychczasową średnią prędkość, dotrzesz do domu przyjaciela w 5 sekund.

Musisz jednak docenić, jak bardzo prędkość może się różnić, nawet w przypadku scenariusza, który wydaje się przewidywalny, np. Kopiowanie plików na tym samym dysku lub między dwoma dyskami lokalnymi. Jedną z nowych funkcji, które lubię w systemie Windows 8, jest możliwość wykresu prędkości w czasie, jeśli klikniesz „więcej szczegółów”. Jeśli nie masz dostępu do komputera z systemem Windows 8, wyszukaj obrazy w oknie dialogowym kopiowania systemu Windows 8, aby znaleźć wiele przykładów. Wiele z nich jest dość płaskich, ale wiele z nich jest również niepokojąco wyboistych, do tego stopnia, że ​​zastanawiasz się, czy dysk twardy jest naprawdę zdrowy, kiedy spada do zera.

Niektóre z tych nierówności są prawdopodobnie spowodowane różnicami w rozmiarze pliku - mniejsze pola dają większy dostęp, co spowalnia działanie, szczególnie na mechanicznym dysku twardym, który musi szukać przesuwając głowicę odczytu - ale niektóre mogą być po prostu tanim dyskiem, który zatrzymuje się przy najmniejszym dotyku, aby zapobiec uszkodzeniu talerzy.

Istnieją lepsze i gorsze algorytmy przewidywania ETA, ale aby uzyskać dokładne przewidywanie, komputer musiałby być wszechwiedzący. Ryzyko próby uczynienia algorytmu „inteligentnym” polega na tym, że może stworzyć nowe, nieprzewidziane przypadki, w których będzie jeszcze zabawniej niepoprawnie.

Okno dialogowe kopiowania systemu Windows 8

Okno dialogowe kopiowania Windows 8 2


4

Jedynym sposobem, aby wiedzieć, ile czasu zajmie skompresowanie zestawu plików, jest ich skompresowanie. Czasami najlepsze przypuszczenia systemu Windows są bliskie, a czasem bardzo błędne. To samo dotyczy kopiowania dużej liczby plików, na pewno zauważyłeś.

To nie tyle błąd, co bezużyteczne wyświetlanie rzadko trafnych informacji. Najlepszym sposobem, aby to naprawić, jest zamknięcie oczu. Zignoruj ​​to. ;-)

Być może istnieje program, który może kopiować / kompresować pliki i emitować dźwięk alarmu po zakończeniu. To byłoby naprawdę przydatne. Moglibyśmy się trochę zdrzemnąć, czekając, aż Windows zakończy sprzątanie domu.


4

Myślę, że powód został dobrze wyjaśniony w jednym z komentarzy do postu na blogu połączonym odpowiedzią Roalda:

Ma straszny algorytm szacowania. Nie ma wymówek. Jeśli trzeba skopiować 1000 plików 1KB i 10 plików 1 MB, myśli, że będzie tak samo zajęty plikiem 1 MB, jak plikami 1KB.

Powodem, dla którego podaje tak okropne szacunki, jest to, że nie jest to dobrze zrobione. Oczywiście nigdy nie może być w 100% precyzyjny, ale może być znacznie, znacznie lepiej.


1
Znajomość wielkości pliku w systemie Windows wymaga jego otwarcia, a otwarcie pliku w systemie Windows oznacza jego odczytanie. I zamiast otwierać wszystkie pliki, aby zobaczyć, jak duże są, aby uzyskać dobre oszacowanie, jak długo potrwa kopia, Windows decyduje się wykorzystać swój czas na skopiowanie plików - w końcu o to poprosiłeś.
SecurityMatt

1
@SecurityMatt: Gdyby tak było, uzyskanie listy katalogów zajęłoby wieki. Jestem pewien, że rozmiary plików są przechowywane w katalogu i aktualizowane przy każdej zmianie pliku. Dlatego powinien istnieć sposób na szybkie i dość dokładne oszacowanie czasu kopiowania na podstawie rozmiarów plików wymienionych w katalogu i niektórych założeń dotyczących prędkości przesyłania. Naprawdę inteligentny system operacyjny zwróciłby uwagę na średnią prędkość transferu w czasie i wykorzystałby to w swoich szacunkach.
RobH

4

Aby przyspieszyć proces kopiowania (nie spędzać zbyt dużo czasu na obliczaniu szacunkowych czasów zamiast wykonywania operacji związanych z kopiowaniem), narzędzie do kopiowania systemu Windows wbudowane w Eksploratora przechowuje ograniczoną ilość informacji o tym, jak szybko zakończono poprzednie operacje zapisu. Za każdym razem, gdy musi obliczyć pozostały czas, po prostu oblicza średni czas wykonywania operacji zapisu, a następnie mnoży przez liczbę pozostałych operacji zapisu.

Problem polega na tym, że czas potrzebny na wykonanie operacji zapisu nie jest stały - w rzeczywistości może się znacznie różnić. To z kolei powoduje znaczące zmiany w oszacowaniu czasu.


Nie sądzę, że masz rację w tym przypadku - możesz utrzymać średnią użytkową zapisów, używając tylko 2 liczb - bieżącej średniej [ A] i liczby punktów danych użytych do uzyskania tej średniej [ n]. Następnie, aby go zaktualizować, to tylko przypadek (A*n + [New value])/[n+1]. Ponadto, ponieważ operacje kopiowania są prawie zawsze związane z operacjami we / wy, a nie z procesorem, proste obliczenia takie co kilka sekund są niczym. Z drugiej strony, utrzymywanie średniej z ostatnich nzapisów wymaga tablicy / kolejki / stosu nelementów - więc wiesz, która wartość ma zostać eksmitowana.
Podstawowy

Słuszna uwaga! Więc dlaczego, do cholery, jest tak wszędzie? : P
Brian Gradin

Zakładam, że próbowali być sprytni, wykonując bardziej responsywną średnią, biorąc pod uwagę tylko kilka ostatnich zapisów - i wybrali zbyt mało. Powiedział, że nie mam źródła, więc kto wie?
Podstawowy

4

Należy wziąć pod uwagę 3 czynniki:

  1. Całkowity rozmiar przelewu.
  2. Liczba plików do przesłania.
  3. „Zajęty” mediów i być może połączenie.

Liczby 1 i 3 wydają się mieć najbardziej oczywisty wpływ na obliczanie czasu transferu, ale bardzo wiele osób nie bierze pod uwagę liczby 2. Może to mieć ogromny wpływ na czas transferu i jest trudne do oszacowania.

Zasadniczo za każdym razem, gdy plik jest zapisywany, system plików musi zapisać trochę metadanych dotyczących pliku, np. własność, uprawnienia, czasy tworzenia / modyfikacji / dostępu itp. W zależności od konkretnego systemu plików, informacje te mogą zostać zapisane na części dysku bardzo „daleko” od miejsca, w którym zapisywany jest plik. Ten narzut systemu plików może sprawić, że pozornie prosty transfer zajmie dużo czasu i / lub sprawi, że oszacowanie czasu gwałtownie się zmieni.

np .: Przesyłając jeden duży plik, zauważysz, że oszacowanie jest stabilne i dość dokładne, ale przesyłanie setek plików o różnych rozmiarach, ale o tym samym rozmiarze całkowitym, może potrwać dłużej i spowodować, że oszacowanie czasu dopasuje się.


4

Istnieją trzy braki w obecnych algorytmach szacowania.

Wbrew powszechnemu przekonaniu, nie są one wystarczająco trudne, aby podnieść nasze ręce.

Powód, dla którego większość osób piszących blogi i ludzie tutaj nie zdają sobie sprawy z tej możliwości, jest najlepszy, co mogę powiedzieć, ze względu na dziedzinę nauki i szerokość szkoły. Skromne, ale jednocześnie bardzo wygodne lekarstwo powinno być możliwe dla [absolwenta z nowszym szkoleniem niż autorzy blogów] [firmy wartej wiele miliardów dolarów] Microsoft.

Spróbuję z grubsza wyjaśnić, dlaczego.


Punkty awarii są następujące. Jądro:

1. nie może wiarygodnie przewidzieć przyszłego obciążenia We / Wy ze względu na okoliczności poza zakresem jądra

  • nic nie można na to poradzić, ponieważ jest to bardzo nieograniczony problem P = NP.

2. nie śledzi heurystyki IO w żadnym użytecznym poziomie szczegółowości. Wykorzystanie jest znacznie szerszą koncepcją niż prędkość odczytu / zapisu na dysku / sieci .

  • bardzo niewiele trzeba z tym zrobić, niewiele więcej niż śledzenie najbardziej podstawowych informacji o wykorzystaniu IO

    • z dysku
      • średni wymiar prędkości odczytu 1a
      • średnia prędkość zapisu plików w wymiarze 2a
    • na podstawie kwanty * zgodnie z
      • wymiar rozmiaru pliku b
      • lokalizacja pliku w wymiarze dysku c
    • * skwantowane na [prawdopodobnie] nie więcej niż 3 kategorie. Zmniejszenie wymiarów pomogłoby nam ustalić na pewno, ale 3 powinno wystarczyć dla (prawdopodobnie raczej skutecznych) mechanizmów przewidywania lepszych niż nic:
      • rozmiar pliku
        • lekki
        • średni
        • ciężki
      • lokalizacja [informuje o opóźnieniu wyszukiwania]
        • początek
        • środkowy
        • dostajesz punkt
      • rozmiar i lokalizacja pliku są zbędne / pokrywają się z prędkością odczytu / zapisu, jest to celowe
    • musimy wiedzieć, jak „zajęty” był dysk, abyśmy mogli założyć, że będzie on nadal zajęty. d
      • obliczone na podstawie liczby odczytywanych plików, splot z ich wagami
      • używany do oszacowania czasu na początku kopiowania ... dialog oparty na przyszłym oczekiwanym obciążeniu, jeśli wszystko inne oprócz tego okna dialogowego kopiowania będzie kontynuowane tak jak jest teraz
    • metoda zapisu dla celów ... tutaj jest zdolność patentową

3. gdyby były śledzone , nie miałyby zastosowania do heurystyki

  • niewiele zrobiono tutaj, gdzie wykonujemy większość pracy
  • w tym miejscu wykorzystujemy dane z punktu 2
    • zgrubna analiza statystyczna wag i lokalizacji plików w celu ustalenia, ile przeskoku wykonamy. Waga + lokalizacja daje nam prognozę
    • połączyć z bieżącymi wagami i lokalizacjami obciążenia dysku
    • oszacować, co myślimy średnia prędkość odczytu / zapisu na liczbę plików wymiar f będzie
    • które porównujemy, aby dostroić nasz model
    • co pozwoli nam dość dokładnie oszacować pasek postępu i czas do ukończenia
  • metody analizy do celów przewidywania ... tutaj jest zdolność patentową

Chodzi o to, że nasz model ma tylko 2a = kompleks F * (bxc) + d

Gdzie a, b i c mają 3 stany: menedżer plików zerknie na pliki (lub tylko metadane) przed kopiowaniem, a F * (bxc) + d nie jest drogim obliczeniem; jeśli chcesz czegoś dokładniejszego, skorzystaj z tabeli odnośników zawierającej więcej stanów - prawie żadnych obliczeń.

Uwaga: wymiary tutaj są dla talerza, byłyby inne z dyskiem SSD - początek / środek / koniec nie miałyby znaczenia

Kluczową różnicą między tym, co opisałem, a poprzednimi implementacjami, które do tej pory widzieliśmy, byłoby, w skrócie, obserwowanie rozmiaru pliku i rozproszenia / entropii pliku na dysku oraz wykorzystanie go [bardziej] do dokładniejszego uwzględnienia elementu czasowego użycia dysku.

(patent pozostawiono czytelnikowi jako ćwiczenie ...)


@Twisty Skończyłem, jak to jest teraz?
paIncrease

Dużo lepiej. Życzymy powodzenia w korzystaniu ze strony i dziękuję za dołączenie do społeczności.
Mówię: Przywróć Monikę

3

Istnieje wiele „nieznanych” zmiennych, gdy próbujesz przewidzieć, ile czasu zajmie coś. Na przykład, chociaż program wie, że istnieje 3500 plików i że pliki mają pojemność 3,5 GB (3500 MB), czy to oznacza, że ​​każdy plik ma 1 MB? Niekoniecznie. Może być wiele plików o rozmiarze 4 KB i wiele plików o rozmiarze 100 MB, a niektóre inne pomiędzy nimi. Ponadto należy wziąć pod uwagę, skąd pochodzą pliki i dokąd idą (np. Media). Jakie jest największe wąskie gardło? W jaki sposób konto próbuje skopiować pliki z dysku twardego przez tunel VPN ? Podajesz najlepszy scenariusz, a następnie dostosowujesz liczniki w czasie rzeczywistym. Właśnie dlatego te wskaźniki postępu zmieniają się w locie.


2

Matematycznie poprawny model polega na naiwnym uśrednianiu i ekstrapolacji:

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

Powodem jest to, że zgodnie z prawem dużych liczb lokalne fluktuacje zlikwidują uśrednioną prędkość transferu , a to da ci najbardziej stabilny wynik.

Wydaje się, że Microsoft robi obliczenia prędkości przesyłania w najnowszym przedziale czasowym. Oznacza to, że każda lokalna fluktuacja znacząco zmienia wynik.


2
Twój model nie poradzi sobie z długotrwałymi zakłóceniami, takimi jak równoległe rozpoczynanie innych transferów plików, i nadal będzie mi mówił, że zajmie to jeszcze 5 minut, nawet jeśli ta sama ilość danych zajęła 20 minut. Ważona średnia ruchoma może być dokładniejsza.
Daniel Beck

@DanielBeck: Niezupełnie poprawne. Oczekiwany czas będzie stopniowo się wydłużał. Pytanie brzmi, jak szybko to wzrośnie? Zależy to od upływu czasu. Jeśli była to długa operacja, np. Kopiowanie trwało już 5 godzin, nie zwiększy to znacznie oczekiwań. Ale czy 15-minutowa niedokładność ma znaczenie dla 5 godzin pracy? Nie. Chodzi o to, że daje najlepsze przybliżenie pod względem błędu względnego. Nie możesz też zrobić czegoś, co zadziała znacznie lepiej w każdym scenariuszu.
ybungalobill

2
Problem twojego modelu polega na tym, że absolutnie nie reaguje on na zmiany prędkości transferu w połowie transferu. Będzie to tak samo nie do zniesienia, jak szybko reagujący transfer plików systemu Windows. Przykład : Najpierw transfer 60 GB przy 10 MB / s. Pozostały czas do rozpoczęcia: 100 min. Przenieś 54 GB i upuść do 2 MB / s. Po 90 minutach: Szacowany czas pozostały do ​​54 GB: 10 min. Pozostały czas na 54 GB: 50 min. Po 115 minutach : Szacowany czas pozostały do ​​57 GB: 6 min. Pozostały czas na 57 GB: 25 min. Po 131,67 minuty : Szacowany czas pozostały do ​​59 GB: 2,23 minuty. Pozostały czas na 59 GB: 8,33 minuty.
Daniel Beck

@DanielBeck: cały transfer trwa 150 minut, więc maksymalny błąd względny wynosi 50% na początku transferu, gdzie nie można zrobić nic lepszego. Na 54. GB jest to tylko ~ 14% zniżki na całość. (jeśli zajmie ci to 150 minut, dlaczego 20 minut ma znaczenie?) Właściwie to bardzo dobre oszacowanie ... To powiedziawszy, rozumiem twój punkt widzenia. Sposobem na poprawę tego stanu rzeczy nie jest średnia ważona ruchoma, ponieważ nie wiadomo, jaki powinien być rozmiar okna (czy operacja ta powinna potrwać kilka minut, np. Kopiowanie pliku,
ybungalobill

lub godziny przez protokół udostępniania plików p2p, w którym dostajesz 10 minut 10 MB / si 10 minut 0 MB / s). Sposobem na poprawę tego jest przyjęcie średniej ważonej przez czas, a nie przez rozmiar.
ybungalobill

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

Jak powiedział Roald van Doorn, to po prostu zgadywanie. Oczywiście nie oznacza to, że nie może być lepszym zgadywaczem. Istnieje wiele heurystyk, które można by wykorzystać do obliczenia tego.

  1. Najlepszym sposobem, najdroższym, byłoby przechowywanie historii poprzednich „kopii”, a następnie wykorzystanie algorytmów sztucznej inteligencji do obliczania przypuszczeń
  2. Można zbudować formułę na podstawie badań, ile czasu to powinno zająć. Mogą brać pod uwagę takie rzeczy jak: system plików, liczba plików, rozmiar plików, czas wyszukiwania dysku, prędkości odczytu / zapisu na dysku, lokalizacja plików na dysku (fragmentacja), bieżące wykorzystanie dysku.
  3. Mieszanka tych dwóch. To znaczy. zrób kilka testów porównawczych, aby dowiedzieć się, jak długo trwają pewne operacje, a następnie użyj ich jako historii dla prostych formuł.

Oczywiście nic z tego nie jest łatwe do zaimplementowania .. i wspomniałem tylko o kopiach plików. Podobna praca musiałaby zostać wykonana dla wszystkich rodzajów transferów.
Pytanie, które musisz sobie zadać - czy wolisz spędzić czas na Microsoft, aby lepiej oszacować, czy raczej przyspieszyć przesyłanie plików.

Jeśli jednak skompresujesz coś za pomocą 7-zip, zauważysz, że jest to znacznie lepsze niż zgadywanie niż Windows. Wątpię, żeby robiło to coś skomplikowanego, tylko trochę lepsze zgadywanie.


1

Krótko mówiąc, obliczenia oparte są na bieżącej prędkości transferu .

Na przykład: jeśli szybkość transferu spada, ponieważ system Windows musi skopiować ogromną liczbę małych plików, oczekiwany czas rośnie liniowo i odwrotnie w przypadku dużych plików.

Jest prawie niemożliwe do przewidzenia, jaka będzie prędkość przesyłania w całym procesie przesyłania, ponieważ zależy to od wielu czynników, takich jak rozmiar pliku, użycie procesora, błędy transmisji itp.


1

Istnieje kilka interesujących odpowiedzi w poście na blogu MSDN Ulepszenie naszych podstawowych zasad zarządzania plikami: kopiuj, przenieś, zmień nazwę i usuń . Dlaczego jest to trudne:

Szacowanie czasu pozostałego do ukończenia kopiowania jest prawie niemożliwe do wykonania z jakąkolwiek precyzją, ponieważ wiąże się to z wieloma nieprzewidywalnymi i niekontrolowanymi zmiennymi - na przykład, ile przepustowości sieci będzie dostępne dla długości zadania kopiowania? Czy twoje oprogramowanie antywirusowe uruchomi się i rozpocznie skanowanie plików? Czy inna aplikacja będzie musiała uzyskać dostęp do dysku twardego? Czy użytkownik rozpocznie inne zadanie kopiowania?

I jak się poprawiają,

Zamiast inwestować dużo czasu w opracowywanie oszacowań o niskim poziomie ufności, które można by tylko nieznacznie poprawić w stosunku do obecnego, skupiliśmy się na przedstawieniu informacji, na których jesteśmy pewni, w użyteczny i przekonujący sposób. To zapewnia najbardziej wiarygodne informacje, które mamy do dyspozycji, dzięki czemu możesz podejmować bardziej świadome decyzje.

To powiedziawszy, jeśli naprawdę chcesz poprawić tylko podane oszacowanie i zachować pasek postępu w obecnej postaci, możesz zrobić coś sugerowanego w komentarzu Slashdot :

Prowadź tabelę oczekiwanych prędkości dla każdego urządzenia pamięci masowej w systemie plików. Zapisz, ile czasu zajmuje odczyt informacji o systemie plików. Jeśli urządzenie jest zamontowane, jeśli jest to uzasadnione dla typu urządzenia, szukaj środka i końca, mierząc tam również prędkości. Uzyskaj przybliżone krzywe prędkości odczytu i zapisu w różnych lokalizacjach i użyj ich do przyszłych oszacowań. W przypadku przyszłych operacji odczytu i zapisu zwróć uwagę na to, gdzie się znajdują i jak szybko idą, i odpowiednio dostosuj krzywe.

Po rozpoczęciu operacji spójrz na krzywe dla danych wejściowych i wyjściowych dla odpowiednich urządzeń. Znajdź oczekiwaną prędkość dla lokalizacji docelowej. W zależności od tego, która prędkość jest niższa, należy zastosować oszacowanie.


1

Chciałem tylko dodać, że całkowita liczba plików jest z pewnością najbardziej czasochłonnym czynnikiem operacji kopiowania plików na komputerze. Zawsze pamiętam, jako młody uczeń, celowo powodując awarię komputerów w mojej klasie komputerowej, zaczynając od 1 pliku bez zawartości i kopiując go, a następnie wybierając 2 pliki i kopiując ponownie i tak dalej. Gdy minęło około 1024 plików, zajęło to dużo czasu, aby cokolwiek zrobić, nawet gdy kopiowano bez zapisywania informacji dla nagłówka pliku. Wypróbuj go nawet na nowym systemie operacyjnym, wykładniczej kopii pliku, a zobaczysz, co się stanie. Jedzenie do namysłu.


Chociaż interesujące, to nie odpowiada na pytanie. Przeczytaj Jak odpowiedzieć przed odpowiedzią.
użytkownik 99572 ma się dobrze

0

Właśnie skopiowałem 200 GB z dysku twardego USB na główny dysk. Było około 130000 plików

Po pierwszych 4-5 minutach zauważyłem, że:

  • W przypadku najmniejszych plików szybkość wynosiła około 100 plików na sekundę przy prędkości około 600 KB / s
  • A dla dużych plików było to około 70 MB / s

Na początku okna zmieniły oszacowanie z około 1 godziny na ponad 5 godzin, a następnie z powrotem na 1 godzinę i tak dalej. Na koniec, podobnie jak w 95%, wciąż zmieniała szacunki z 10 minut na ponad 10 godzin. Więc zamiast stawać się coraz dokładniejszym, stawało się coraz mniej precyzyjne.

Prosta matematyka pokazuje:

130 000 plików przy 100 plikach na sekundę = 22 minuty

200 000 MB przy 70 MB na sekundę = 47 minut

22 minuty - czas oczekiwania na kopiowanie plików o wielkości kilku kilobajtów. 47 minut - czas potrzebny na przesłanie rzeczywistych danych, jeśli nie ma czasu wyszukiwania.

Suma 22 minut + 47 minut to absolutny maksymalny czas, jaki może to zająć.

Więc oczywiście szacunek powinien wynosić od 47 do 69 minut.

Co pokazuje okno dialogowe w około 90%: „Kopiuję niektóre małe pliki z prędkością 1 MB / s, danych jest o 20 GB więcej, ukończenie zajmie 5:30 godzin.

Kilka sekund później: „Kopiuję tutaj duży plik, przy prędkości 70 Mb / s ukończenie zajmie 4 minuty.

To, co faktycznie widzi człowiek w tym samym oknie dialogowym: 120 000 plików i 180 GB jest już kopiowanych przez 40 minut. Pozostałe 10000 plików i 20 GB powinno zająć około 5 minut

Okno dialogowe zawiera wystarczającą ilość informacji, aby obliczenia były coraz bardziej dokładne z każdą sekundą. Zna szybkość kopiowania małych plików. Wie, z jaką prędkością kopiowane są duże pliki. Wie również, ile plików i ile bajtów zostało.

Tak dokładne założenie jest tak proste, jedynie poprzez ustawienie górnej i dolnej granicy.

Okno dialogowe pokazuje nieco więcej poprawnych danych tylko w przypadku, gdy duże pliki znajdują się przed małymi plikami. W takim przypadku zaczyna się po 40 minutach, a po 30 minutach zaczyna kopiować małe pliki i mówi „no cóż, potrzebuję jeszcze 20 minut”.

Ale kiedy małe pliki na początku i duże pliki są na końcu. Okno dialogowe tak naprawdę nie dba o to, jakie „pliki na sekundę” przenosi małe pliki. Oblicza się tak, jakby liczba małych plików była nieskończonością, i tak, jakby na zawsze były małe.


To nie odpowiada na pytanie.
DavidPostill

Właściwie to odpowiada, jeśli czytasz uważnie. Są to dwa rodzaje złych oszacowań i wyjaśniłem, dlaczego tak się dzieje z przykładowego punktu widzenia inżynierii odwrotnej.
Xizario,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.