Windows dosya kopyalama iletişim kutusu: Tahmin neden bu kadar… KÖTÜ?


38

tahmin

xkcd

Windows kopyalama iletişim kutusunun (Windows XP'de) önce kopyayı belleğe kaydettiğini ve iletişim kutusu kapandıktan sonra hala kopyalandığını biliyorum, bu nedenle zaman kapalı, ancak neden kopya çıkarmak için geçen sürenin tahmini bu nedenle, yanlış kopyalama, hafıza kopyalamayı devre dışı bırakılmış olsa bile (Vista ve Windows 7’de)? Çok keyfi görünüyor! Tüm kopyalama prosedürü nasıl çalışır ve Windows neden doğru bir şekilde tahmin edemez?



İlerleme çubuğu tamamlanan dosyaların sayısını gösterir - tamamlanan% zamanı değil
Faktör Mistik


3
Ayrıca, sınırlamaların evrensel olduğuna inandığım için, yalnızca Windows için değil, herhangi bir işletim sistemi için geçerli olmalıdır .
Clockwork-Muse,

1
Ayrıca not etmek gerekirse, Mark Russinovich'in blog yazısı: blogs.technet.com/b/markrussinovich/archive/2008/02/04/…
surfasb

Yanıtlar:


29

Kısacası: zayıf algoritmalar ve ürkek tahminleri aslında bir uygulama zayıflığıdır.

TeraCopy gibi diğer araçlar daha iyi bir iş çıkarır . Uygulamalarının neden iyi olmadığını açıklamaya değmeyeceğini düşünüyorum. Fark edecekler ve gelişecekler.

Zor olan ne:

  1. Kaynak dalgalanmalarını hesaba katmanız gerekir (özellikle CPU / Ağ bant genişliği / HDD hızı)
  2. Davranışı öngörerek harcayacağınız süreyi tahmin etmeniz gerekiyor (şu anda Windows dosya kopyasının kesin olarak ne yaptığını).
  3. Ayarlamaları zaman içinde orijinal tahmininize göre yapın (Yukarıdaki komik resimde görünmeyen küçük ayarlamalar demek istiyorum!)

Bunun için sadece bayt miktarı değil, yaratılacak dosya miktarı da rol oynar. Milyonlarca 1KB dosyanız veya bin 1 MB dosyanız varsa, durum oldukça farklı olacaktır, çünkü eski birçok dosya oluşturma yükünün üstesinden gelir. Kullanılan dosya sistemine bağlı olarak, bu verilerin aktarılmasından daha fazla zaman alabilir.

Bu diyalog beni epeyce kızdırdı:

  • Eski bir WinNT sisteminde, kopyalanacak çok sayıda küçük dosyanız varsa, tüm işlemlerin pratik olarak kullanılamaz hale gelmesini yavaşlatan her dosyanın adını ve hoş bir animasyonunu görüntüler.

Modern Windows kopya şeyler çok iyi değil:

  • Aktarılacak veri miktarını hesaplamak için önce bir arama (sanırım yapmam gereken şey) bir arama yapmak gibi görünüyor, bu yüzden işi etkili bir şekilde yapmaya başlayana kadar çok sayıda dizin seçtiyseniz yaş alır.
  • Bazı yerleşik zaman aşımı, kopyalanacak büyük dosyaları etkiler (sistemimde yaklaşık 60GB). Ağrı, ağ üzerinden 30 GB'den daha fazla kopyaladıktan sonra ve bu bant genişliği ve zamanının kaybolduğunu, sıfırdan başlamanız gerektiğini söylemesi!
  • Dosyaların bir bilgisayardan diğerine kopyalanması nedense çok yavaştır. (Kullanılabilir ağ bant genişliği ile karşılaştırıldığında, diğer araçları kullanarak daha hızlı olduğundan hesaplamalı bir sınırlama değildir.)

Çok ilginç!
Maxim Zaslavsky

48

Raymond Chen bu konuda çok güzel bir yazı yazdı. Temelde, diyalog sadece tahmin ediyor :).

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

“Kopyalama iletişim kutusu sadece tahmin ediyor. Geleceği tahmin edemiyor, ancak denemek zorunda kalıyor. Ve kopyanın en başında, gitmek için çok az tarih olduğunda, tahmin gerçekten kötü olabilir.

İşte bir benzetme: Birisinin size “100'e kadar sayacağım ve ne zaman biteceğime dair sürekli tahminler vermeniz gerektiğini” söylediğini varsayalım. "Bir, iki, üç ..." diye başlarlar. Saniyede saniyede bir sayıya gittiklerini fark edersiniz, yani 100 saniyeyi tahmin edersiniz. Uh-oh, şimdi yavaşlıyorlar. "Dört ... ... ... beş ... ... ..." Şimdi tahmininizi belki 200 saniyeye değiştirmelisiniz. Şimdi hızlandırıyorlar: "altı-yedi-sekiz-dokuz" Tahmininizi tekrar güncellemelisiniz.

Şimdi sadece tahminlerini dinleyen ve sayılan kişi değil, senin rocker kapalı olduğunu düşünüyor biri. Tahmininiz 100 saniyeden 200 saniyeye ve 50 saniyeye gitti; senin sorunun ne? Neden iyi bir tahmin veremiyorsun?

Dosya kopyalama aynı şeydir. Kabuk kaç dosya ve kaç baytın kopyalanacağını biliyor, ancak sabit diskin veya ağın veya internetin ne kadar hızlı olacağını bilmiyor, bu yüzden sadece tahmin etmesi gerekiyor. Eğer kopya çıktısı değişirse, tahminde yeni aktarım hızını dikkate almak için değişiklik yapılması gerekir. "


8
Verdiği benzetme tek kelimeyle özetlenebilir: İstatistikler.
surfasb

33

10'a kadar sayacağım, 10'a 1....2....3....4ulaşmak için kaç nokta gerekiyor?

5.6.7Peki ya şimdi? Sayılar arasındaki tüm geçmiş noktaları hesaba katıyor musunuz ve ortalamaları, sadece son 4 aralığı alıp bu ortalamayı mı kullanıyorsunuz, sadece son aralığa bakıyor musunuz?

Dosya aktarımlarında da aynı sorun var. Dosyanın aktardığı hız sabit değil, bir çok faktöre bağlı olarak hızlanıyor ve yavaşlıyor. Sayının bu kadar artmasının nedeni, Microsoft'un spektrumun "sadece son aralığı say" tarafına doğru eğilmesidir.

Spektrumun o tarafında yanlış olan bir şey yok, size daha doğru "saniye başına saniye" (gerçek zamanlı olarak bir saniye, sayacı bir saniye aşağıya çeviriyor) veriyor, ancak bu, zamanlayıcının toplam ETA'sının çok atlamasına neden oluyor .

Karşı tarafın iyi bir örneği , sıkıştırma sırasında 7-Zip'dir . Sıkıştırma hızı işlenirken düşerse, ETA'nın bir dosya aktarımı ETA'sı gibi çarpıcı bir şekilde atlamadığını görebilirsiniz, ancak zamanlayıcı bir saniye geçmeden önce 2 ila 3 gerçek saniye sürebilir (veya hatta saymaya başlayabilir) ) yeni hızda sabitlenene kadar.


2
Neden üstel ya da düzenli bir hareketli ortalama yapmadıklarını
yeniyor

@Mehrdad Ben pencerelerin daha yeni sürümleri yapmak bence, ETA zaman Windows 7 ve daha yeni 7zip gibi daha çok davranır.
Scott Chamberlain

15

Aslında Microsoft'tan Raymond Chen'in WAAAAAY'dan geri döndüğü konusunda kanonik bir cevabı var ve yapbozun birkaç parçası var.

Çünkü kopya iletişim kutusu sadece tahmin ediyor. Geleceği tahmin edemez, ama denemek zorunda kalır. Kopyanın en başında, çok az geçmişin olduğu bir tarih olduğunda, tahmin gerçekten kötü olabilir.

İlk olarak, bu Windows tahmin ediyor. Ne kadar dosya olduğunu ve ne kadar büyük olduklarını bilir, ancak dosya başına aktarım hızı oldukça değişkendir. Bazı durumlarda, boyut gibi şeylere veya hatta sürücüdeki konuma bağlıdır. Zaman geçtikçe, mevcut ve geçmiş koşullara dayanarak tahminlerini düzenlemektedir ve bu nedenle gerçek dünya koşullarında yanlış tahmini transfer hızlarına sahipsiniz.


İlginç olan, 2004'teki ilk yorum, Vista'da 2006 yılına kadar sunulmayan kalan baytları gösteren ayrıntılı dosya kopyalama bilgisi açılır penceresini açıklar.
Scott Chamberlain

2
Evet, sohbet eden biri bunu da belirtti. Tamamlandığında bakarak, kullanıcının yerine bakması için rengarenk grafikler vererek kullanıcının sorununu çözdüğünü söylemeye teşvik ediyorum :)
Journeyman Geek

@JourneymanGeek "sohbet eden biri" Bu oldukça yetkili bir kaynak iken Evet, o 2004 olduğunu akılda tutmak önemlidir ve ağır demode oldu ve büyük olasılıkla yalnızca belli belirsiz Windows 8 üzerinde kullanımda geçerli algoritmalar ile ilgili
Bob

1
İşte Windows 8'de ilgili bir blog yazısı : "Bir kopyasını tamamlamak için kalan süreyi tahmin etmek herhangi bir hassasiyetle neredeyse imkansızdır ... Sadece biraz daha iyi olacak bir düşük güven tahminine sahip olmak için çok fazla zaman harcamak yerine Mevcut olandan sonra, kendimize güvendiğimiz bilgileri sunmaya odaklandık ... "
Kelly Thomas

12

İşte açıklama ile Raymond Chen , Microsoft'ta Baş Yazılım Tasarım Mühendisi:

Kopyalama iletişim kutusu neden bu kadar korkunç tahminler veriyor?

Çünkü kopya iletişim kutusu sadece tahmin ediyor. Geleceği tahmin edemez, ama denemek zorunda kalır. Kopyanın en başında, çok az geçmişin olduğu bir tarih olduğunda, tahmin gerçekten kötü olabilir.

İşte bir benzetme: Birisinin size “100'e kadar sayacağım ve ne zaman biteceğime dair sürekli tahminler vermeniz gerektiğini” söylediğini varsayalım. "Bir, iki, üç ..." diye başlarlar. Saniyede saniyede bir sayıya gittiklerini fark edersiniz, yani 100 saniyeyi tahmin edersiniz. Uh-oh, şimdi yavaşlıyorlar. "Dört ... ... ... beş ... ... ..." Şimdi tahmininizi belki 200 saniyeye değiştirmelisiniz. Şimdi hızlandırıyorlar: "altı-yedi-sekiz-dokuz" Tahmininizi tekrar güncellemelisiniz.

Blog yazısı yukarıda alıntılanan bazı ilginç yorumlarla bu konuda uzun bir tartışma vardır.

Raymond Chen efsanevi bir insan, "Microsoft'un Chuck Norris", daha yetkili bir cevap alacağınızı sanmıyorum. Eminim en azından söz konusu kodu görmüştü.


9

Bunun açık bir nedeni, transferin hızının zaman içinde değişiyor olması ve ortalama da aynı şekilde tahmin edilmesidir. Bunu teknoloji dışı bir arkadaşa açıklamak için hava yoluyla seyahat etmeyi içeren bir analoji kullandım. Atlantik üzerinden uçacaksın. Kalkış havaalanına taksiyle geldiğinizde, ETA'nız yaklaşık iki aydır. Havaalanına indiğinizde, şu ana kadarki ortalama hızınıza bağlı olarak, arkadaşınızın evine 5 saniyede varacaksınız.

Ancak, aynı disk içindeki veya iki yerel disk arasında dosya kopyalamak gibi, tahmin edilebilir bir senaryo gibi görünse bile, hızın gerçekte ne kadar değişebileceğini anlamanız gerekir. Windows 8'de sevdiğim yeni özelliklerden biri, "daha fazla ayrıntı" yı tıklatırsanız zaman içindeki hızı grafik olarak gösterebilme yeteneğidir. Windows 8 makinesine erişiminiz yoksa, birçok örnek için Windows 8 kopya iletişim kutusunu arayın . Birçoğu oldukça düz, ancak birçoğu da rahatsız edici derecede inişli çıkışlı, sabit sürücünün sıfıra indiğinde gerçekten sağlıklı olup olmadığını merak ettiğiniz noktaya.

Bu tümseklerin bazıları muhtemelen dosya boyutundaki değişikliklerden kaynaklanıyor - daha küçük alanlar daha fazla erişim sağlıyor, bu da işleri yavaşlatan, özellikle okuma kafasını hareket ettirmek zorunda kalan mekanik bir sabit sürücüde, işleri yavaşlatan - ancak bazıları sadece ucuz bir sürücü olabilir. plakaların zarar görmemesi için en hafif dokunuşta durur.

Daha iyi ve daha kötü ETA tahmin algoritmaları var, ancak doğru bir tahmin için bilgisayarın her şeyi bilmesi gerekiyordu. Algoritmayı "akıllı" kılmaya çalışmanın riski, daha komik bir şekilde yanlış olduğu yeni, öngörülemeyen durumlar yaratabilmesidir.

Windows 8 kopyalama iletişim kutusu

Windows 8 kopyalama iletişim kutusu 2


4

Bir dosya kümesini sıkıştırmanın ne kadar zaman alacağını bilmenin tek yolu onları sıkıştırmaktır. Bazen Windows'un en iyi tahminin yakın, bazen çılgınca yanlıştır. Aynı şey, fark ettiğinizden emin olduğunuz için çok sayıda dosyayı kopyalamak için de geçerlidir.

Nadiren doğru bilginin işe yaramaz bir göstergesi olarak bir hata değil. Bunu düzeltmenin en iyi yolu gözlerini kapatmak. Boşver. ;-)

Belki de dosyaları kopyalayıp / sıkıştırabilen ve bittiğinde alarm sesi çıkarabilecek bir program vardır. Bu gerçekten faydalı olurdu. Windows'un ev temizliğini bitirmesini beklerken biraz kestirebiliriz.


4

Bence bunun nedeni, Roald'ın cevabıyla bağlantılı blog yazısının yorumlarından birinde açıklanmıştı :

Korkunç bir tahmin algoritması var. Mazeret yok. 1000 1KB dosya ve 10 1 MB dosya kopyalaması gerekiyorsa, 1 MB dosya ile olduğu kadar 1 MB dosyayla da meşgul olacağını düşünüyor.

Bu kadar korkunç tahminler vermesinin nedeni, iyi yapılmadığıdır. Açıkçası hiçbir zaman% 100 kesin olamaz ama çok, çok daha iyi olabilirdi.


1
Bir dosyanın pencerelerde ne kadar büyük olduğunu bilmek, onu açmayı gerektirir ve Windows'ta bir dosyayı açmak, onu okumak anlamına gelir. Ve tüm dosyaları açmak yerine, kopyaların ne kadar süreceği konusunda iyi bir tahminde bulunmak için ne kadar büyük olduklarını görmek yerine, Windows zamanını dosyaları kopyalarken kullanmaya karar verir - sonuçta, sizden ne yapmasını istediniz.
SecurityMatt

1
@SecurityMatt: Öyle olsaydı, bir dizin listesi alması yıllar alırdı. Dosya boyutları dizinde depolandığından ve dosya her değiştirildiğinde değiştirildiğinden eminim. Bu nedenle, dizinde listelenen dosya boyutlarına ve transfer hızı ile ilgili bazı varsayımlara dayanarak kopyalama zamanının hızlı ve oldukça doğru bir şekilde tahmin edilmesinin bir yolu olmalıdır. Gerçekten akıllı bir işletim sistemi, zaman içindeki ortalama transfer hızına dikkat eder ve tahminlerinde kullanır.
RobH

4

Kopyalama işlemini hızlandırmak için (kopyayla ilgili işlemler yapmak yerine zaman tahminlerini hesaplamak için çok fazla zaman harcamayın), Explorer'da yerleşik olan Windows kopya yardımcı programı, önceki yazma işlemlerinin ne kadar hızlı gerçekleştiği hakkında sınırlı miktarda bilgi tutar. Kalan süreyi hesaplaması gereken her zaman, yalnızca yazma işlemlerinin ortalama sürelerini hesaplar ve kalan yazma işlemlerinin sayısı ile çarpar.

Sorun bir yazma işlemi gerçekleştirmek için gereken zaman miktarının sabit olmamasıdır - aslında önemli ölçüde değişebilir. Dolayısıyla bu, zaman tahmininde önemli değişiklikler yaratır.


Bu konuda oldukça haklı olduğunuzu sanmıyorum - sadece 2 sayı kullanarak kullanılabilir bir yazma ortalamasını koruyabilirsiniz - mevcut ortalama [ A] ve bu ortalamayı elde etmek için kullanılan veri noktalarının sayısı [ n]. Sonra güncellemek için, sadece bir durum (A*n + [New value])/[n+1]. Ayrıca, kopyalama işlemleri neredeyse her zaman IO'ya bağlı değildir, CPU'ya bağlı değildir, bu gibi basit bir hesaplama her birkaç saniyede bir şey değildir. Öte yandan, son nyazmaların ortalamasını tutmak , bir dizi / sıra / neleman yığını gerektirir - bu nedenle hangi değerin tahliye edilmesinden kaynaklanacağını bilirsiniz.
Temel

İyi bir nokta! Peki neden burası her yerde böyle? : P
Brian Gradin

Sadece son birkaç yazıyı göz önünde bulundurarak daha duyarlı bir ortalama yaparak zeki olmaya çalıştıklarını ve çok az seçtiklerini farz ediyorum. Dedi ki, kaynağım yok, kim bilir?
Temel

4

Dikkate alınması gereken 3 faktör var:

  1. Transferin toplam boyutu.
  2. Aktarılacak dosya sayısı.
  3. Medyanın “meşgullüğü” ve muhtemelen bağlantı.

Sayılar 1 ve 3 transfer süresi hesaplanmasına en belirgin etkiye sahip gibi görünüyor, ama büyük bir çok insan Bu olabilir numara 2 için hesaba katmıyor dev transferi ne kadar süreceğini üzerindeki etkisini ve ölçmek zordur.

Temel olarak, bir dosya her yazıldığında, dosya sisteminin dosya hakkında bir miktar meta veri yazması gerekir, örn. sahiplik, izinler, oluşturma / değiştirme / erişim süreleri vb. Özel dosya sistemine bağlı olarak, bu bilgiler diskin bir kısmına, dosyalarının yazıldığı yerden çok 'uzakta' yazılabilir. Bu dosya sistemi ek yükü görünüşte basit bir aktarımı uzun zaman alabilir ve / veya zaman tahminini çılgınca dalgalandırır.

örneğin: Büyük bir dosyayı aktarmak, tahminin sabit kaldığını ve oldukça doğru olduğunu fark edeceksiniz, ancak farklı boyutlarda, ancak aynı toplam boyutta yüzlerce dosyayı aktarmak daha uzun sürebilir ve zaman tahmininin uyum sağlamasına neden olabilir.


4

Mevcut tahmin algoritmalarında üç eksiklik vardır.

Yaygın inanışın aksine, ellerimizi yukarı atmak için yeterince zor değiller.

Çoğu insanın blog yazması ve buradaki insanların olasılığın farkında olmamasının nedeni, çalışma alanı ve eğitim genişliği nedeniyle söyleyebileceğim en iyi şey. Mütevazı ama aynı zamanda çok rahat bir çözüm [blog yazarlarından daha yeni bir eğitim almış olan bir mezun için ] [bir milyarlarca dolarlık şirket] Microsoft için mümkün olmalıdır.

Neden olduğunu kabaca açıklamaya çalışacağım.


Arıza noktaları aşağıdaki gibidir. Çekirdek:

1. Çekirdeğin kapsamı dışındaki durumlar nedeniyle gelecekteki IO yükünü güvenilir bir şekilde tahmin edemiyorum

  • çok sınırsız bir P = NP sorunu olduğu için bu konuda hiçbir şey yapılmamalıdır.

2. IO sezgiselini herhangi bir yararlı ayrıntı düzeyinde izlemez . Kullanımı disk / ağ okuma / yazma hızından çok daha geniş kapsamlı bir konsepttir .

  • Bu konuda yapılması gereken çok az şey var, en temel IO kullanım bilgisini izlemekten biraz daha fazlası

    • diskten
      • ortalama okuma hızı boyutu 1a
      • ortalama boyut 2a dosyalarının ortalama yazma hızı
    • göre kuta başına * esasına göre
      • dosyanın boyutu b
      • dosyanın disk boyutundaki konumu c
    • * en fazla 3 kategoride [büyük olasılıkla] olarak belirlenmiştir. Boyutsallığın azaltılması bize kesin olarak karar vermemize yardımcı olacaktır, ancak 3 tanesi hiç olmadığı kadar iyi tahmin mekanizmaları için bol olmalıdır (muhtemelen oldukça etkili)
      • Dosya boyutu
        • ışık
        • orta
        • ağır
      • Yer [arama gecikme bildirir]
        • başlangıç
        • orta
        • sen anladın
      • dosya boyutu ve konumu fazla okuma / üst üste okuma / yazma hızı ile bu kasıtlı
    • Diskin ne kadar "meşgul" olduğunu bilmemiz gerekir, böylece meşgul boyutta olmaya devam edeceğini varsayabiliriz.
      • okunan dosya adedinden hesaplanır, ağırlıkları ile dolaştırılır
      • Kopyalama başlangıcındaki zamanı tahmin etmek için kullanılır ... Bu kopyalama iletişim kutusundaki her şey şu anda olduğu gibi devam ederse gelecekteki beklenen yüke dayalı iletişim kutusu
    • arasında ... amaçla kayıt yöntemi burada patentli olduğudur

3. takip edildilerse , sezgisel tarama için kullanmayacaklardı

  • Burada işin çoğunu yaptığımız çok az şey yapıldı.
  • kullanmak için # 2'den verileri koyduğumuz yer
    • Ne kadar ümit yapacağımızı belirlemek için dosya ağırlıklarının ve konumlarının kaba istatistiksel analizi. Ağırlık + konum bize bir tahmin verir
    • Geçerli disk yükü ağırlıkları ve konumlarıyla birleştirme
    • ortalama boyutun f / dosya sayısının okuma / yazma hızının ne olacağını tahmin etmek
    • modelimizde ince ayar yapmak için karşılaştırdığımız
    • bu, ilerleme çubuğunu ve tamamlanma zamanını doğru bir şekilde tahmin etmemize izin verecek
  • tahmin etmek amacıyla analiz yöntemi ... Burada patentli olduğudur

Tüm bunların amacı bizim modelimiz sadece 2a = F * (bxc) + d kompleksi

A, b ve c'nin her birinin 3 durumu olduğu durumlarda: dosya yöneticisi kopyalamadan önce dosyalara (veya yalnızca meta verilere) göz atar ve F * (bxc) + d pahalı bir hesaplama değildir; Daha doğru bir şey istiyorsanız, daha fazla devlet ile bir arama tablosu kullanın - hiç bir hesaplama yoktur.

not: buradaki boyutlar bir tabla içindir, SSD'den farklı olurdu-- başlangıç ​​/ orta / son farketmez

Tarif ettiklerim ve şimdiye kadar gördüğümüz önceki uygulamalar arasındaki temel fark, kısacası, diskteki dosya boyutunu ve dosya dağılımını / entropisini gözlemlemek ve disk kullanımının zaman öğesini doğru bir şekilde hesaba katmak için [daha fazla] kullanmaktır.

(patent okuyucu için bir alıştırma olarak bırakılmıştır ...)


@Twisty Ben bitti, şimdi nasıl?
paIn

Çok daha iyi. Siteyi kullanırken iyi şanslar ve topluluğa katıldığınız için teşekkür ederiz.
Ben söylüyorum Monica

3

Bir şeyin ne kadar süreceğini tahmin etmeye çalıştığınız zaman birçok "bilinmeyen" değişken vardır. Örneğin, program 3500 dosya olduğunu ve dosyaların 3.5 GB (3500 MB) tutarında olduğunu bilse de, bu her dosyanın 1 MB olduğu anlamına mı geliyor? Şart değil. Çok fazla 4 KB dosya, bir sürü 100 MB dosya ve bir kısmı da olabilir. Ayrıca, dosyaların nereden geldiğini ve nereye gittiğini de göz önünde bulundurmalısınız (örneğin medya). En büyük tıkanıklık nedir? Bir VPN tüneli üzerinden bir HDD’den dosya kopyalamaya çalışırken nasıl bir hesabınız var ? En iyi durum senaryosunu veriyorsunuz ve ardından sayaçlarınızı gerçek zamanlı olarak ayarlıyorsunuz. Bu yüzden, bu ilerleme sayaçlarının anında değiştiğini görüyorsunuz.


2

Matematiksel olarak doğru model aslında saf ve ortalama bir değer bulma yapmaktır:

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

Bunun nedeni, Büyük Sayılar Yasası gereğince, yerel dalgalanmaların ortalama transfer hızında iptal edilmesi ve bunun size en istikrarlı sonucu vermesidir.

Microsoft'un yaptığı gibi , aktarım hızını en son zaman diliminde hesaplamak . Bu, her yerel dalgalanmanın sonucu önemli ölçüde değiştirdiği anlamına gelir.


2
Modeliniz paralel olarak diğer dosya aktarımlarını başlatmak gibi uzun süredir devam eden aksaklıklarla tam olarak başa çıkmayacak ve aynı miktarda veri sadece 20 dakika sürse de bana sadece 5 dakika süreceğini söylemeye devam edecek. Ağırlıklı bir hareketli ortalama daha doğru olabilir.
Daniel Beck

@DanielBeck: Tam olarak doğru değil. Beklenen zaman yavaş yavaş artacaktır. Sorun ne kadar hızlı artacak? Eh, geçen zamana bağlıdır. Uzun bir operasyon olsaydı, örneğin zaten 5 saat boyunca kopya yapıyordu, o zaman beklentiyi fazla arttırmayacaktı. Fakat 15 dakikalık yanlışlık 5 saatlik çalışma için önemli midir? Hayır. Önemli olan, göreceli hata açısından size en iyi yaklaşımı sağlamasıdır. Ayrıca her senaryoda daha iyi çalışacak bir şey yapamazsınız .
ybungalobill

2
Modelinizin sorunu, transferin ortasındaki transfer hızı değişikliklerine kesinlikle tepki vermemesidir. Bu, hızlı tepki veren Windows dosya aktarımı kadar yetersiz olacaktır. Örnek : İlk başta 10 MB / sn hızında 60 GB aktarım. Başlangıçta kalan süre: 100dk. 54GB aktarın ve 2 MB / s'ye düşürün. 90 dakika sonra: Tahmini süre 54GB: 10 dak . Gerçek zamanlı 54GB: 50dk. 115 dakika sonra : Tahmini süre 57GB: 6 dak . Gerçek zaman 57GB'ta kaldı: 25dk. 131.67 dakika sonra : Tahmini süre 59GB : 2.23 dakika. Gerçek zamanlı 59 GB'de bırakıldı: 8.33 dakika.
Daniel Beck

@DanielBeck: tüm transfer 150 dakika sürer, bu nedenle transferin başlangıcında daha iyi yapamayacağınız maksimum nispi hata% 50'dir. 54 GB’da toplamın ~ ~% 14 kadarı. (150 dakikanızı alıyorsa, neden 20 dakika önemli?) Aslında çok iyi bir tahmin ... Demek istediğimi anlıyorum. Bunu iyileştirmenin yolu ağırlıklı hareketli ortalama değildir çünkü pencerenin boyutu ne kadar olmalıdır (bu işlemin bir dosyayı kopyalamak gibi dakikalar alması bekleniyor mu
ybungalobill

veya 10 dakika 10 MB / sn ve 10 dakika 0 MB / sn elde edebileceğiniz bir p2p dosya paylaşım protokolü aracılığıyla saatlerce). Bunu iyileştirmenin yolu, ortalamaya büyüklüğüne göre değil zamana göre ağırlık almaktır.
ybungalobill

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

Roald van Doorn'un dediği gibi, temelde sadece tahmin ediyor. Tabii ki, bu daha iyi bir tahmin olamayacağı anlamına gelmez. Bunu hesaplamak için kullanılabilecek çok sayıda sezgisel tarama var.

  1. En iyi yol, en pahalı yol, önceki “kopyaların” geçmişini tutmak ve ardından bir tahminde hesaplama yapmak için yapay zeka algoritmalarını kullanmaktır.
  2. Kişi ne kadar sürmesi gerektiğine dair araştırmaya dayanan bir formül oluşturabilir. Dosya sistemi, dosya sayısı, dosya boyutu, disk arama zamanı, disk toplu okuma / yazma hızları, diskteki dosyaların konumu (parçalanma), mevcut disk kullanımı gibi şeyleri dikkate alabilirler.
  3. İkisinin bir karışımı. Yani. Belirli işlemlerin ne kadar sürdüğünü öğrenmek için bazı kriterler uygulayın ve bunları basit formüller için bir tarih olarak kullanın.

Açıkçası, bunların hiçbiri kolayca uygulanmıyor .. ve sadece dosya kopyalarından bahsettim. Her türlü transfer için de benzer çalışmalar yapılmalıdır.
Kendinize sormanız gereken soru - microsoft'un size daha iyi bir tahminde bulunma vakti mi harcayacağını mı yoksa dosyalarınızın daha hızlı transfer edilmesini mi tercih edersiniz?

Ancak, 7-zip ile bir şeyi sıkıştırırsanız, tahmin etmenin pencerelerden daha iyi olduğunu göreceksiniz. Biraz daha iyi bir tahminde bulunabilecek karmaşık bir şey yaptığından şüpheliyim.


1

Kısacası, hesaplama geçerli transfer hızına dayanır .

Örneğin: Aktarım hızınız , pencerelerin büyük miktarda küçük dosyaları kopyalaması nedeniyle batması nedeniyle, beklenen süre doğrusal olarak artar ve büyük dosyalar için bunun tersi olur .

Aktarım hızının tüm aktarım sürecinde ne olacağını tahmin etmek neredeyse imkansızdır , çünkü dosya boyutu, CPU kullanımı, iletim hataları vb. Gibi birçok faktöre bağlıdır.


1

MSDN blog yazısında bazı ilginç cevaplar var. Dosya yönetimi temellerimizin iyileştirilmesi: bununla ilgili kopyala, taşı, yeniden adlandır ve sil . Neden bu kadar zor:

Bir kopyayı tamamlamak için kalan süreyi tahmin etmek neredeyse kesin olarak imkansızdır, çünkü pek çok öngörülemeyen ve kontrol edilemeyen değişken vardır - örneğin, kopyalama işi için ne kadar ağ bant genişliği olacaktır? Anti-virüs yazılımınız açılır ve dosyaları taramaya başlar mı? Başka bir uygulamanın sabit sürücüye erişmesi gerekecek mi? Kullanıcı başka bir kopyalama işi başlatacak mı?

Ve nasıl geliştiklerini

Şu anki durumdan biraz daha az iyileşecek olan düşük güven tahminiyle çok fazla zaman harcamak yerine, güvendiğimiz bilgileri faydalı ve çekici bir şekilde sunmaya odaklandık. Bu, elimizdeki en güvenilir bilgileri, daha bilinçli kararlar vermenizi sağlar.

Bununla birlikte, yalnızca belirli bir tahminde bulunmak ve ilerleme çubuğunu olduğu gibi devam ettirmek istiyorsanız, Slashdot yorumunda önerilen bir şeyi yapabileceğinizi söyledi :

Dosya sistemindeki her depolama aygıtı için beklenen hız tablosunu koruyun. Dosya sistemi bilgilerini okumanın ne kadar süreceğini kaydedin. Bir cihaz monte edildiğinde, cihaz tipi için uygunsa, orada da hızları ölçerek, ortasına ve sonuna gidin. Konumlar arasında okuma ve yazma hızları için yaklaşık eğriler alın ve gelecekteki tahminler için bunları kullanın. Gelecekteki okuma ve yazma işlemleri için, nerede olduklarını ve ne kadar hızlı gittiklerini not alın ve eğrileri buna göre ayarlayın.

Bir işlem başladığında, ilgili cihazların giriş ve çıkış eğrilerine bakın. Hedef konum için beklenen hızı bulun. Tahmini için hangi hız düşükse kullanılmalıdır.


1

Sadece toplam dosya sayısının bir PC'deki dosya kopyalama işlemlerinin en fazla zaman alan faktör olduğunu kolayca eklemek istedim. Her zaman genç bir öğrenci olarak hatırlıyorum, kasıtlı olarak bilgisayar sınıfımdaki PC'nin başarısızlığını indükleyen 1 dosya olmadan başlayarak ve kopyalayarak, sonra 2 dosyayı seçip tekrar kopyalayarak hatırlıyorum. Yaklaşık 1024 dosya geçtikten sonra, dosya başlığı için hiçbir bilgi kaydedilmediğinde bile bir şey yapması çok zaman aldı. Yeni bir işletim sisteminde bile, üstel dosya kopyası kendiniz deneyin ve ne olacağını göreceksiniz. Düşünce için yiyecek.


İlginç olsa da, bu soruyu cevaplamıyor. Cevap vermeden önce Nasıl Cevaplanır bölümünü okuyun .
kullanıcı 99572,

0

200 GB’yı USB HDD’den ana sürücüme kopyaladım. Yaklaşık 130000 dosya vardı

İlk 4-5 dakika sonra şunu gözlemledim:

  • En küçük dosyalar için, oran yaklaşık 600KB / s'de saniyede yaklaşık 100 dosyadır.
  • Ve büyük dosyalar için 70 MB / sn gibiydi.

Başlangıçta pencereler, tahmini 1 saatten 5+ saate, ardından 1 saate kadar değiştirdi. Sonunda% 95'teki gibi hala tahminler 10 dakikadan 10+ saate değişiyordu. Bu yüzden daha doğru hale gelmek yerine daha az kesinleşiyordu.

Basit matematik gösterileri:

Saniyede 100 dosyada 130.000 dosya = 22 dakika

Saniyede 70 MB'ta 200.000 MB = 47 dakika

22 dakika - boyutu birkaç kilobayt olan dosyaları kopyalamak için zaman aramayı kaybetti. 47 dakika - arama süresi yoksa gerçek veriyi aktarması gereken süre.

22dk + 47dk toplamı, alabileceği mutlak maksimum süredir.

Açıkçası, tahmin 47 ila 69 dakika arasında bir yerde olmalı .

İletişim kutusunun yaklaşık% 90 gösterdiği: "Bazı küçük dosyaları 1 MB / sn'de kopyalıyorum, 20GB daha fazla veri var, tamamlanması 5:30 saat sürecek.

Birkaç saniye sonra: "Burada büyük bir dosyayı kopyalıyorum, 70 MB / sn'de tamamlanması 4 dakika alacaktır.

İnsan aslında aynı iletişim kutusundan gördüğü: 120.000 dosya ve 180GB zaten 40 dakika kopyalandı. Geri kalan 10000 dosya ve 20GB yaklaşık 5 dakika sürmelidir

İletişim kutusu, her saniye daha fazla ve daha doğru olan bir hesaplama yapmak için yeterli bilgiyi verir. Küçük dosyaların kopyalanma hızını bilir. Büyük dosyaların hangi hızda kopyalandığını bilir. Ayrıca kaç dosya ve kaç bayt kaldığını da bilir.

Sadece üst ve alt limitleri ayarlayarak doğru bir varsayım yapmak çok kolaydır.

İletişim kutusu, yalnızca büyük dosyaların küçük dosyalardan önce olması durumunda biraz daha doğru veriler gösterir. Bu durumda 40 dakikada başlar ve 30 dakika sonra küçük dosyaları kopyalamaya başlar ve "iyi 20 dakikaya ihtiyacım var" der.

Ancak başında küçük dosyalar ve büyük dosyaları sonunda. İletişim kutusu aslında "saniye başına dosya" nın küçük dosyaları aktardığı ile ilgilenmiyor. Küçük dosya sayısı sonsuz, ve sonsuza dek küçük olacakları gibi hesaplamasını yapar.


Bu aslında soruyu cevaplamıyor.
DavidPostill

Dikkatlice okuyorsanız, aslında cevap veriyor. Bunlar iki tür kötü tahmindir ve neden örnek bir ters mühendislik bakış açısıyla olduklarını açıkladım.
Xizario
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.