Hộp thoại sao chép tập tin Windows: Tại sao ước tính lại quá BAD?


38

Ước lượng

xkcd

Tôi biết rằng hộp thoại sao chép Windows (trong Windows XP) trước tiên lưu trữ bản sao trong bộ nhớ và nó vẫn đang sao chép sau khi hộp thoại đóng lại, vì vậy thời gian sẽ tắt, nhưng tại sao lại ước tính thời gian cần thiết để tạo một bản sao không chính xác, ngay cả khi sao chép bộ nhớ đã bị vô hiệu hóa (trong Vista và Windows 7)? Có vẻ như quá độc đoán! Toàn bộ quy trình sao chép hoạt động như thế nào và tại sao Windows không thể ước tính chính xác?



Thanh tiến trình hiển thị # của các tệp đã hoàn thành, không phải là% thời gian hoàn thành, fyi.
Nhân tố huyền bí


3
Ngoài ra, điều này nên áp dụng cho bất kỳ HĐH nào , không chỉ Windows, vì tôi tin rằng các ràng buộc là phổ biến.
Đồng hồ-Muse

1
Cũng cần lưu ý là bài đăng trên blog của Mark Russinovich: blog.technet.com/b/markrussinovich/archive/2008/02/04/ trên
lướt

Câu trả lời:


29

Nói tóm lại: các thuật toán kém và ước lượng tăng vọt thực sự là một điểm yếu trong việc thực hiện.

Các công cụ khác như TeraCopy làm việc tốt hơn. Tôi nghĩ rằng nó không đáng để giải thích tại sao thực hiện của họ là không tốt. Họ sẽ nhận thấy nó và sẽ cải thiện.

Điều gì là khó khăn:

  1. Bạn phải tính đến biến động tài nguyên (chủ yếu là băng thông CPU / Mạng / tốc độ ổ cứng)
  2. Bạn cần ngoại suy thời gian cần thiết bằng cách dự đoán hành vi (những gì bản sao tệp Windows chắc chắn làm rất tệ ngay bây giờ).
  3. Thực hiện điều chỉnh theo thời gian theo ước tính ban đầu của bạn (ý tôi là những điều chỉnh nhỏ không giống như trong hình hài hước ở trên!)

Đối với điều này không chỉ số lượng byte mà cả số lượng tệp cần tạo đóng vai trò. Nếu bạn có một triệu tệp 1KB hoặc nghìn tệp 1 MB thì tình huống sẽ hoàn toàn khác vì trước đây có chi phí tạo ra nhiều tệp. Tùy thuộc vào hệ thống tập tin được sử dụng, việc này có thể mất nhiều thời gian hơn so với việc truyền dữ liệu thực sự.

Hộp thoại này khiến tôi phát điên cũng khá nhiều lần:

  • Trên hệ thống WinNT cũ hơn, nếu bạn có nhiều tệp nhỏ để sao chép, nó sẽ hiển thị tên và hình ảnh động đẹp cho mỗi tệp làm chậm toàn bộ quá trình để thực tế không thể sử dụng được.

Các công cụ sao chép Windows hiện đại không tốt hơn nhiều:

  • Để tính toán lượng dữ liệu cần truyền, nó dường như phải tìm kiếm trước tiên (đó là những gì tôi cho là như vậy) vì vậy sẽ mất nhiều thời gian nếu bạn chọn nhiều thư mục cho đến khi nó thực sự bắt đầu thực hiện công việc.
  • Một số thời gian chờ tích hợp sẽ luận tội các tệp lớn sẽ được sao chép (> khoảng 60 GB trên hệ thống của tôi). Điều đau đớn là nó cho bạn biết rằng sau khi đã sao chép hơn 30 GB qua mạng và điều này bị mất băng thông và thời gian vì bạn phải khởi động lại từ đầu!
  • Sao chép các tập tin từ máy tính này sang máy tính khác rất chậm vì một số lý do. (Ý tôi là so với băng thông mạng có sẵn, sử dụng các công cụ khác thì nó nhanh hơn nên không phải là giới hạn tính toán.)

Rất thú vị!
Maxim Zaslavsky

48

Raymond Chen đã viết một bài viết rất hay về điều này một lần. Về cơ bản, hộp thoại chỉ là đoán :).

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

"Bởi vì hộp thoại sao chép chỉ là phỏng đoán. Nó không thể dự đoán được tương lai, nhưng nó buộc phải thử. Và ngay từ đầu của bản sao, khi có rất ít lịch sử đi qua, dự đoán có thể rất tệ.

Đây là một sự tương tự: Giả sử ai đó nói với bạn, "Tôi sẽ đếm đến 100, và bạn cần đưa ra ước tính liên tục khi nào tôi sẽ hoàn thành." Họ bắt đầu, "một, hai, ba ...". Bạn nhận thấy họ đang đi với tốc độ khoảng một số mỗi giây, vì vậy bạn ước tính 100 giây. Uh-oh, bây giờ họ đang chậm lại. "Bốn ... ... ... năm ... ... ..." Bây giờ bạn phải thay đổi ước tính của mình thành có thể 200 giây. Bây giờ họ tăng tốc: "sáu bảy bảy chín" Bạn phải cập nhật lại ước tính của mình.

Bây giờ ai đó chỉ lắng nghe ước tính của bạn chứ không phải người đang đếm nghĩ rằng bạn đang rời xa rocker của mình. Ước tính của bạn đã đi từ 100 giây đến 200 giây đến 50 giây; vấn đề của bạn là gì? Tại sao bạn không thể đưa ra một ước tính tốt?

Sao chép tập tin là điều tương tự. Shell biết có bao nhiêu tệp và bao nhiêu byte sẽ được sao chép, nhưng nó không biết ổ cứng hoặc mạng hoặc internet sẽ chạy nhanh đến mức nào, vì vậy nó chỉ cần đoán. Nếu thông lượng sao chép thay đổi, ước tính cần thay đổi để đưa tốc độ truyền mới vào tài khoản. "


8
Sự tương tự mà anh ấy đưa ra có thể được tóm tắt trong một từ: Thống kê.
Surfasb

33

Tôi sẽ đếm đến mười, sẽ mất 1....2....3....4bao nhiêu chấm để đến 10?

5.6.7Bây giờ thì sao? Bạn có tính đến tất cả các dấu chấm trong quá khứ giữa các số và trung bình không, bạn chỉ lấy 4 khoảng thời gian cuối cùng và sử dụng mức trung bình đó, bạn chỉ nhìn vào khoảng cuối cùng?

Bạn có cùng một vấn đề với chuyển tập tin. Tốc độ truyền tệp không phải là hằng số, nó tăng tốc và chậm lại dựa trên rất nhiều yếu tố. Lý do con số nhảy xung quanh rất nhiều là do Microsoft nghiêng về phía "chỉ tính khoảng thời gian cuối cùng" của quang phổ.

Không có gì sai với phía bên kia của quang phổ, nó cung cấp cho bạn "giây trên giây" chính xác hơn (một giây trong thời gian thực làm cho bộ đếm giảm xuống một giây) nhưng điều này khiến tổng ETA của bộ đếm thời gian nhảy xung quanh rất nhiều .

Một ví dụ điển hình của phía đối diện là 7-Zip khi nó đang nén. Nếu tốc độ nén giảm khi nó xử lý, bạn có thể thấy rằng ETA không tăng vọt như ETA truyền tệp, nhưng có thể mất 2 đến 3 giây thực trước khi đồng hồ bấm giờ giảm xuống một giây (hoặc thậm chí có thể bắt đầu đếm ngược ) cho đến khi nó ổn định ở tốc độ mới.


2
Đánh bại tôi tại sao họ không làm trung bình di chuyển theo cấp số nhân hoặc thường xuyên ...
Mehrdad

@Mehrdad Tôi nghĩ rằng các phiên bản gần đây hơn của windows làm, thời gian ETA hoạt động giống như 7zip trong Windows 7 và mới hơn.
Scott Chamberlain

15

Thực sự có một câu trả lời gần như kinh điển của Raymond Chen của Microsoft về vấn đề này từ WAAAAAY trở lại, và có một vài mảnh cho câu đố.

Bởi vì hộp thoại sao chép chỉ là đoán. Nó không thể dự đoán tương lai, nhưng nó buộc phải thử. Và ngay từ đầu của bản sao, khi có rất ít lịch sử đi qua, dự đoán có thể thực sự tồi tệ.

Thứ nhất, Windows đó là đoán. Nó biết có bao nhiêu tệp và độ lớn của chúng, nhưng tốc độ truyền trên mỗi tệp rất khác nhau. Nó phụ thuộc vào những thứ như kích thước, hoặc thậm chí vị trí trên ổ đĩa trong một số trường hợp. Khi thời gian trôi qua, nó sẽ điều chỉnh dự đoán dựa trên các điều kiện hiện tại và quá khứ và do đó bạn có tốc độ truyền ước tính không chính xác trong điều kiện thực tế.


Thật thú vị, bình luận đầu tiên vào năm 2004 mô tả trình đơn thả xuống thông tin sao chép tệp chi tiết hiển thị các byte còn lại không được giới thiệu cho đến năm 2006 trong Vista.
Scott Chamberlain

2
Vâng, một người nào đó trên trò chuyện cũng chỉ ra điều này. Tôi muốn nói rằng giải quyết vấn đề của người dùng đang nhìn chằm chằm vào lúc hoàn thành, bằng cách đưa cho anh ta các biểu đồ đầy màu sắc để nhìn chằm chằm vào đó :)
Journeyman Geek

@JTHERmanGeek "ai đó đang trò chuyện" báo cáo! Phải, mặc dù đây là một nguồn khá có thẩm quyền, nhưng điều quan trọng cần ghi nhớ là từ năm 2004, và đã lỗi thời và có khả năng chỉ liên quan đến các thuật toán hiện tại được sử dụng trên Windows 8.
Bob

1
Đây là một bài đăng trên blog có liên quan trên Windows 8: "Ước tính thời gian còn lại để hoàn thành một bản sao gần như không thể thực hiện với bất kỳ độ chính xác nào ... Thay vì đầu tư nhiều thời gian với ước tính độ tin cậy thấp sẽ chỉ được cải thiện một chút so với hiện tại, chúng tôi tập trung vào việc trình bày thông tin mà chúng tôi tự tin về ... "
Kelly Thomas

12

Dưới đây là lời giải thích của Raymond Chen , Kỹ sư thiết kế phần mềm chính tại Microsoft:

Tại sao hộp thoại sao chép đưa ra ước tính khủng khiếp như vậy?

Bởi vì hộp thoại sao chép chỉ là đoán. Nó không thể dự đoán tương lai, nhưng nó buộc phải thử. Và ngay từ đầu của bản sao, khi có rất ít lịch sử đi qua, dự đoán có thể thực sự tồi tệ.

Đây là một sự tương tự: Giả sử ai đó nói với bạn, "Tôi sẽ đếm đến 100, và bạn cần đưa ra ước tính liên tục khi nào tôi sẽ hoàn thành." Họ bắt đầu, "một, hai, ba ...". Bạn nhận thấy họ đang đi với tốc độ khoảng một số mỗi giây, vì vậy bạn ước tính 100 giây. Uh-oh, bây giờ họ đang chậm lại. "Bốn ... ... ... năm ... ... ..." Bây giờ bạn phải thay đổi ước tính của mình thành có thể 200 giây. Bây giờ họ tăng tốc: "sáu bảy bảy chín" Bạn phải cập nhật lại ước tính của mình.

Bài đăng trên blog được trích dẫn ở trên có một cuộc thảo luận dài về vấn đề này, với một số bình luận thú vị.

Raymond Chen là một người huyền thoại, "Chuck Norris của Microsoft", tôi không cho rằng bạn sẽ nhận được một câu trả lời có thẩm quyền hơn. Tôi chắc rằng anh ấy ít nhất đã nhìn thấy mã trong câu hỏi.


9

Lý do rõ ràng là tốc độ chuyển tiền thay đổi theo thời gian và trung bình cũng vậy, và dự đoán cũng vậy. Để giải thích điều này với một người bạn không phải là công nghệ, tôi đã sử dụng một phép loại suy liên quan đến du lịch bằng đường hàng không. Bạn sẽ bay qua Đại Tây Dương. Khi bạn đến bằng taxi tại sân bay khởi hành, ETA của bạn là khoảng hai tháng. Khi bạn khởi hành tại sân bay đến, dựa trên tốc độ trung bình của bạn cho đến nay, bạn sẽ đến nhà của bạn mình sau 5 giây.

Nhưng bạn cần đánh giá cao tốc độ thực sự có thể thay đổi đến mức nào, ngay cả với những gì có vẻ như là một kịch bản có thể dự đoán được, như sao chép các tệp trong cùng một đĩa hoặc giữa hai đĩa cục bộ. Một trong những tính năng mới tôi thích trong Windows 8 là khả năng vẽ biểu đồ tốc độ theo thời gian nếu bạn nhấp vào "chi tiết hơn". Nếu bạn không có quyền truy cập vào máy Windows 8, hãy tìm kiếm hình ảnh cho hộp thoại sao chép Windows 8 để biết nhiều ví dụ. Nhiều người trong số họ khá bằng phẳng, nhưng nhiều người trong số họ cũng rất khó chịu, đến mức bạn tự hỏi liệu ổ cứng có thực sự khỏe mạnh hay không, khi nó giảm xuống không.

Một số sự cố này có thể là do sự thay đổi kích thước tệp Các trường nhỏ hơn mang lại nhiều lượt truy cập hơn, điều này làm chậm mọi thứ, đặc biệt là trên một ổ cứng cơ học phải tìm kiếm bằng cách di chuyển đầu đọc của nó, nhưng một số có thể chỉ là một ổ đĩa rẻ tiền quầy hàng trên các liên lạc nhẹ nhất để ngăn chặn thiệt hại cho các đĩa.

Có các thuật toán dự đoán ETA tốt hơn và tồi tệ hơn, nhưng để dự đoán chính xác, máy tính sẽ phải được biết tất cả. Rủi ro của việc cố gắng làm cho thuật toán trở nên "thông minh" là nó có thể tạo ra những trường hợp mới, không lường trước được, trong đó nó thậm chí còn sai lầm hơn.

Hộp thoại sao chép Windows 8

Hộp thoại sao chép Windows 8 2


4

Cách duy nhất để biết sẽ mất bao lâu để nén một tập tin là nén chúng. Đôi khi dự đoán tốt nhất của Windows là gần, đôi khi nó cực kỳ sai. Điều tương tự cũng đúng khi sao chép số lượng lớn tệp, vì tôi chắc chắn rằng bạn đã nhận thấy.

Đây không phải là một lỗi quá lớn khi hiển thị thông tin chính xác hiếm khi. Cách tốt nhất để khắc phục nó là nhắm mắt lại. Đừng để ý đến nó. ;-)

Có lẽ có một chương trình ngoài đó có thể sao chép / nén các tập tin và phát ra âm thanh báo động khi nó kết thúc. Điều đó sẽ thực sự hữu ích. Chúng tôi có thể có một giấc ngủ ngắn trong khi chờ Windows kết thúc việc dọn dẹp nhà cửa.


4

Tôi nghĩ lý do đã được giải thích độc đáo trong một trong những bình luận của bài đăng trên blog được liên kết bởi câu trả lời của Roald:

Nó có một thuật toán ước tính khủng khiếp. Không có lời bào chữa. Nếu phải sao chép 1000 tệp 1KB và 10 tệp 1 MB thì nó nghĩ rằng nó sẽ bận rộn với tệp 1 MB như với các tệp 1KB.

Lý do nó đưa ra ước tính khủng khiếp như vậy là nó không được thực hiện tốt. Rõ ràng nó không bao giờ có thể chính xác 100% nhưng nó có thể tốt hơn nhiều.


1
Biết một tệp lớn như thế nào trong các cửa sổ đòi hỏi phải mở nó và mở một tệp trong Windows có nghĩa là đọc nó. Và thay vì mở tất cả các tệp để xem chúng lớn đến mức nào để có được ước tính tốt về thời gian sao chép, Windows sẽ quyết định sử dụng thời gian thực sự sao chép các tệp - sau tất cả, đó là những gì bạn yêu cầu.
SecurityMatt

1
@SecurityMatt: Nếu đó là trường hợp, sẽ mất nhiều thời gian để có được một danh sách thư mục. Tôi chắc chắn kích thước tệp được lưu trữ trong thư mục và được cập nhật bất cứ khi nào tệp được thay đổi. Do đó, cần có một cách để có được ước tính nhanh chóng và khá chính xác về thời gian sao chép dựa trên kích thước tệp được liệt kê trong thư mục và một số giả định về tốc độ truyền. Một hệ điều hành thực sự thông minh sẽ chú ý đến tốc độ truyền trung bình theo thời gian và sử dụng nó trong các ước tính của nó.
RobH

4

Để đẩy nhanh quá trình sao chép (không mất quá nhiều thời gian để tính toán ước tính thời gian thay vì thực hiện các hoạt động liên quan đến sao chép), tiện ích sao chép windows được tích hợp trong Explorer duy trì một lượng thông tin hạn chế về tốc độ hoàn thành các thao tác ghi trước đó. Mỗi lần cần tính thời gian còn lại, nó chỉ tính ra thời gian trung bình của các thao tác ghi đã được thực hiện, và sau đó nhân với số lượng các thao tác ghi còn lại.

Vấn đề là lượng thời gian cần thiết để thực hiện thao tác ghi không phải là hằng số - nó thực sự có thể thay đổi đáng kể. Vì vậy, điều này, đến lượt nó, tạo ra những thay đổi đáng kể trong ước tính thời gian.


Tôi không nghĩ bạn hoàn toàn đúng về điều này - bạn có thể duy trì mức trung bình có thể sử dụng của ghi chỉ bằng 2 số - trung bình hiện tại [ A] và số điểm dữ liệu được sử dụng để lấy mức trung bình đó [ n]. Sau đó, để cập nhật nó, nó chỉ là một trường hợp (A*n + [New value])/[n+1]. Ngoài ra, vì các hoạt động sao chép hầu như luôn luôn bị ràng buộc IO không bị ràng buộc bởi CPU, nên một phép tính đơn giản như vậy cứ sau vài giây là không có gì. Mặt khác, việc giữ mức trung bình của lần nghi cuối cùng yêu cầu một mảng / hàng đợi / ngăn xếp các nphần tử - để bạn biết giá trị nào là do bị đuổi.
Cơ bản

Điểm tốt! Vậy tại sao cái quái đó lại ở khắp mọi nơi? : P
Brian Gradin

Tôi cho rằng họ đã cố gắng tỏ ra thông minh bằng cách thực hiện mức trung bình nhạy hơn, chỉ tính đến vài lần viết cuối cùng - và chọn quá ít. Điều đó nói rằng, tôi không có nguồn để ai biết?
Cơ bản

4

Có 3 yếu tố cần tính đến:

  1. Tổng kích thước của chuyển.
  2. Số lượng tập tin được chuyển.
  3. "Sự bận rộn" của phương tiện truyền thông, và có thể là kết nối.

Số 1 và 3 dường như có ảnh hưởng rõ ràng nhất đến việc tính toán thời gian chuyển, nhưng rất nhiều người không tính đến số 2. Điều này có thể ảnh hưởng rất lớn đến việc chuyển khoản sẽ mất bao lâu và rất khó để định lượng.

Về cơ bản, mỗi khi một tệp được ghi, hệ thống tệp cần ghi một chút siêu dữ liệu về tệp, ví dụ: quyền sở hữu, quyền, thời gian tạo / sửa đổi / truy cập, v.v. Tùy thuộc vào hệ thống tệp cụ thể, thông tin này có thể được ghi vào một phần của đĩa rất xa từ nơi chúng được ghi. Chi phí hệ thống tập tin này là những gì có thể khiến việc chuyển giao có vẻ đơn giản mất nhiều thời gian và / hoặc làm cho ước tính thời gian dao động dữ dội.

ví dụ: Truyền một tệp lớn, bạn sẽ nhận thấy rằng ước tính giữ ổn định và khá chính xác, nhưng chuyển hàng trăm tệp có kích cỡ khác nhau, nhưng cùng kích thước, có thể mất nhiều thời gian hơn và khiến ước tính thời gian phù hợp.


4

Có ba thiếu sót trong các thuật toán ước tính hiện tại.

Trái với niềm tin phổ biến, họ gần như không đủ khó khăn để giơ tay lên.

Lý do hầu hết mọi người viết blog và mọi người ở đây không nhận thức được khả năng này là tốt nhất như tôi có thể nói do lĩnh vực nghiên cứu và học tập rộng. Một biện pháp khiêm tốn nhưng cũng rất thoải mái nên có thể cho [một sinh viên tốt nghiệp được đào tạo gần đây hơn các nhà văn viết blog] [một công ty trị giá hàng tỷ đô la] Microsoft.

Tôi sẽ cố gắng để giải thích đại khái tại sao.


Những điểm thất bại như sau. Nhân:

1. không thể dự đoán đáng tin cậy tải IO trong tương lai do các trường hợp nằm ngoài phạm vi của kernel

  • không nên làm gì về vấn đề này vì đây là vấn đề P = NP rất không bị ràng buộc.

2. không theo dõi các heuristic IO ở bất kỳ mức độ chi tiết hữu ích nào. Sử dụng là một khái niệm rộng hơn nhiều so với tốc độ đọc / ghi đĩa / mạng .

  • rất ít cần phải làm về điều này, ít hơn là để theo dõi thông tin sử dụng IO cơ bản nhất

    • từ đĩa
      • tốc độ đọc trung bình 1a
      • tốc độ ghi trung bình của kích thước tệp 2a
    • trên cơ sở mỗi lượng tử * theo
      • kích thước của tập tin b
      • vị trí của tệp trên kích thước đĩa c
    • * được lượng tử hóa thành [có khả năng] không quá 3 loại. Giảm kích thước sẽ giúp chúng tôi xác định chắc chắn nhưng 3 nên rất nhiều cho các cơ chế dự đoán (có thể khá hiệu quả) tốt hơn là không có gì:
      • Kích thước tập tin
        • ánh sáng
        • Trung bình
        • nặng
      • địa điểm [thông báo về độ trễ tìm kiếm]
        • bắt đầu
        • ở giữa
        • bạn sẽ có được điểm
      • kích thước tệp và vị trí là dự phòng / chồng chéo với tốc độ đọc / ghi, đây là cố ý
    • chúng ta cần biết đĩa "bận" như thế nào để chúng ta có thể cho rằng nó sẽ tiếp tục là kích thước bận đó d
      • được tính toán từ số lượng tệp được đọc, được tích hợp với trọng số tương ứng của chúng
      • được sử dụng để ước tính thời gian khi bắt đầu sao chép ... hộp thoại dựa trên tải dự kiến ​​trong tương lai nếu mọi thứ khác ngoài hộp thoại sao chép này tiếp tục như bây giờ
    • các phương pháp ghi âm cho mục đích của ... ở đây là bằng sáng chế

3. họ đã được theo dõi , sẽ không được sử dụng cho các heuristic

  • một chút đã được thực hiện ở đây, nơi chúng tôi làm hầu hết công việc
  • đây là nơi chúng tôi đặt dữ liệu từ # 2 để sử dụng
    • phân tích thống kê sơ bộ về trọng lượng tệp và vị trí để xác định mức độ nhảy chúng ta sẽ làm. Trọng lượng + vị trí cho chúng ta một dự đoán
    • kết hợp với trọng lượng và vị trí tải đĩa hiện tại
    • để ước tính tốc độ đọc / ghi trung bình của số lượng tệp kích thước f sẽ là
    • mà chúng tôi so sánh để tinh chỉnh mô hình của chúng tôi
    • Điều này sẽ cho phép chúng tôi ước tính khá chính xác thanh tiến trình và thời gian hoàn thành
  • các phương pháp phân tích cho mục đích dự đoán ... ở đây là bằng sáng chế

Điểm của tất cả điều này là mô hình của chúng tôi chỉ có 2a = F * (bxc) + d phức tạp

Trong đó a, b và c có 3 trạng thái: mỗi trình quản lý tệp nhìn trộm các tệp (hoặc chỉ siêu dữ liệu) trước khi sao chép và F * (bxc) + d không phải là một tính toán đắt tiền; nếu bạn muốn một cái gì đó chính xác hơn, hãy sử dụng bảng tra cứu với nhiều trạng thái hơn - hầu như không có bất kỳ tính toán nào cả.

lưu ý: kích thước ở đây là dành cho đĩa, sẽ khác với SSD-- đầu / giữa / cuối sẽ không thành vấn đề

Sự khác biệt chính giữa những gì tôi đã mô tả và các triển khai trước đây mà chúng ta đã thấy cho đến nay là, ngắn gọn, quan sát kích thước tệp và phân phối tệp / entropy trên đĩa và sử dụng nó để [chính xác hơn] tính đến yếu tố thời gian sử dụng đĩa.

(bằng sáng chế được để lại như một bài tập cho người đọc ...)


@Twisty Tôi đã làm xong, làm thế nào bây giờ?
paIncreas

Tốt hơn nhiều. Chúc may mắn khi sử dụng trang web và cảm ơn vì đã tham gia cộng đồng.
Tôi nói Phục hồi Monica

3

Có rất nhiều biến số "chưa biết" khi bạn đang cố gắng dự đoán thời gian sẽ diễn ra. Ví dụ, trong khi chương trình biết rằng có 3500 tệp và các tệp có dung lượng lên tới 3,5 GB (3500 MB), điều đó có nghĩa là mỗi tệp là 1 MB? Không cần thiết. Có thể có rất nhiều tệp 4 KB và rất nhiều tệp 100 MB và một số tệp khác ở giữa. Ngoài ra, bạn phải xem xét các tệp đến từ đâu và chúng sẽ đi đâu (ví dụ: phương tiện truyền thông.) Nút thắt lớn nhất là gì? Làm thế nào để tài khoản của bạn cố gắng sao chép các tập tin từ ổ cứng thông qua một đường hầm VPN ? Bạn đưa ra một kịch bản trường hợp tốt nhất, và sau đó điều chỉnh bộ đếm của bạn trong thời gian thực. Đây là lý do tại sao bạn thấy những đồng hồ đo tiến độ thay đổi nhanh chóng.


2

Mô hình chính xác về mặt toán học là thực sự thực hiện phép tính trung bình và ngoại suy ngây thơ:

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

Lý do là bởi Luật số lớn, các dao động cục bộ sẽ hủy bỏ trong tốc độ truyền trung bình và điều này sẽ cho bạn kết quả ổn định nhất.

Những gì Microsoft dường như làm là tính toán tốc độ truyền tại khung thời gian mới nhất. Điều này có nghĩa là mỗi biến động cục bộ thay đổi kết quả đáng kể.


2
Mô hình của bạn sẽ không xử lý đúng các nhiễu trong thời gian dài, như bắt đầu chuyển các tệp khác song song và sẽ tiếp tục nói với tôi rằng sẽ chỉ mất thêm 5 phút nữa mặc dù cùng một lượng dữ liệu chỉ mất 20 phút. Một trung bình di chuyển có trọng số có thể chính xác hơn.
Daniel Beck

@DanielBeck: Không chính xác. Thời gian dự kiến ​​sẽ tăng dần. Câu hỏi là nó sẽ tăng nhanh như thế nào? Vâng, nó phụ thuộc vào thời gian trôi qua. Nếu đó là một hoạt động dài, ví dụ như nó đã được sao chép trong 5 giờ, thì nó sẽ không làm tăng sự mong đợi nhiều. Nhưng sự thiếu chính xác trong 15 phút cho hoạt động 5 giờ? Không. Vấn đề là nó mang lại cho bạn sự gần đúng nhất về sai số tương đối. Ngoài ra, bạn không thể làm một cái gì đó sẽ làm việc tốt hơn nhiều trong mọi kịch bản.
ybungalobill

2
Vấn đề của mô hình của bạn là nó hoàn toàn không phản ứng với thay đổi tốc độ truyền giữa chừng trong quá trình chuyển. Điều này sẽ không thể tách rời như việc truyền tệp Windows phản ứng nhanh Ví dụ : lần đầu tiên chuyển 60GB với tốc độ 10MB / giây. Thời gian còn lại khi bắt đầu: 100 phút. Chuyển 54GB và giảm xuống 2MB / s. Sau 90 phút: Thời gian dự kiến ​​còn lại ở mức 54GB: 10 phút. Thời gian thực còn lại ở mức 54GB: 50 phút. Sau 115 phút : Thời gian dự kiến ​​còn lại ở mức 57GB: 6 phút. Thời gian thực còn lại ở mức 57GB: 25 phút. Sau 131,67 phút : Thời gian dự kiến ​​còn lại là 59GB: 2,23 phút. Thời gian thực còn lại ở 59GB: 8,33 phút.
Daniel Beck

@DanielBeck: toàn bộ chuyển khoản kéo dài 150 phút, do đó, lỗi tương đối tối đa là 50% khi bắt đầu chuyển mà bạn không thể làm gì tốt hơn. Ở GB thứ 54, nó chỉ giảm ~ 14% tổng số. (nếu bạn mất 150 phút, tại sao 20 phút lại quan trọng?) Thật ra một ước tính rất tốt ... Điều đó nói rằng, tôi hiểu quan điểm của bạn. Cách để cải thiện điều này không phải là trung bình di chuyển có trọng số vì bạn không thể biết kích thước của cửa sổ sẽ như thế nào (thao tác này dự kiến ​​sẽ mất vài phút như sao chép tệp,
ybungalobill

hoặc giờ thông qua giao thức chia sẻ tệp p2p trong đó bạn nhận được 10 phút 10 MB / s và 10 phút 0 MB / s). Cách để cải thiện điều này là lấy trọng số trung bình theo thời gian chứ không phải theo kích thước.
ybungalobill

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

Như Roald van Doorn đã nói, về cơ bản, đó chỉ là phỏng đoán. Tất nhiên, điều đó không có nghĩa là nó không thể là một người đoán tốt hơn. Có rất nhiều phương pháp phỏng đoán có thể được sử dụng để tính toán điều này.

  1. Cách tốt nhất, cách đắt nhất, là giữ một lịch sử của các 'bản sao' trước đó và sau đó sử dụng thuật toán trí tuệ nhân tạo để tính toán dự đoán
  2. Người ta có thể xây dựng một công thức dựa trên nghiên cứu về việc phải mất bao lâu. Họ có thể tính đến những thứ như: hệ thống tệp, số lượng tệp, kích thước tệp, thời gian tìm đĩa, tốc độ đọc / ghi hàng loạt đĩa, vị trí của tệp trên đĩa (phân mảnh), sử dụng đĩa hiện tại.
  3. Một sự pha trộn của hai. I E. thực hiện một số điểm chuẩn để tìm hiểu các thao tác nhất định mất bao lâu và sau đó sử dụng các thao tác đó làm lịch sử cho các công thức đơn giản.

Rõ ràng không ai trong số này dễ dàng thực hiện .. và tôi chỉ đề cập đến các bản sao tệp. Công việc tương tự sẽ cần phải được thực hiện cho tất cả các loại chuyển.
Câu hỏi bạn phải tự hỏi - Bạn có muốn microsoft dành thời gian để đưa ra ước tính tốt hơn hay bạn muốn họ chuyển các tệp của mình nhanh hơn.

Tuy nhiên, nếu bạn nén thứ gì đó bằng 7-zip, bạn sẽ nhận thấy nó tốt hơn nhiều so với đoán so với cửa sổ. Tôi nghi ngờ nó đang làm một cái gì đó phức tạp, chỉ là một người đoán tốt hơn một chút.


1

Nói tóm lại, việc tính toán dựa trên tốc độ truyền hiện tại .

Ví dụ: Nếu tốc độ truyền của bạn chìm vì các cửa sổ phải sao chép số lượng lớn các tệp nhỏ, thời gian dự kiến ​​sẽ tăng tuyến tính và ngược lại đối với các tệp lớn.

Nó gần như không thể dự đoán những gì mà tốc độ truyền sẽ kết thúc quá trình chuyển giao toàn bộ, bởi vì nó phụ thuộc vào rất nhiều yếu tố như kích cỡ, sử dụng CPU, truyền erros, vv


1

Có một số câu trả lời thú vị trong bài đăng trên blog MSDN Cải thiện các vấn đề cơ bản về quản lý tệp của chúng tôi: sao chép, di chuyển, đổi tên và xóa về điều này. Về lý do tại sao nó khó:

Ước tính thời gian còn lại để hoàn thành một bản sao gần như không thể thực hiện được với bất kỳ độ chính xác nào vì có nhiều biến số không thể đoán trước và không thể kiểm soát được - ví dụ, băng thông mạng sẽ có sẵn bao nhiêu cho độ dài của công việc sao chép? Phần mềm chống vi-rút của bạn sẽ quay lên và bắt đầu quét các tệp? Một ứng dụng khác sẽ cần truy cập vào ổ cứng? Người dùng sẽ bắt đầu một công việc sao chép khác?

Và làm thế nào họ đang cải thiện,

Thay vì đầu tư nhiều thời gian để đưa ra ước tính độ tin cậy thấp sẽ chỉ được cải thiện đôi chút so với hiện tại, chúng tôi tập trung vào việc trình bày thông tin mà chúng tôi tự tin theo cách hữu ích và hấp dẫn. Điều này làm cho thông tin đáng tin cậy nhất chúng tôi có sẵn cho bạn để bạn có thể đưa ra quyết định sáng suốt hơn.

Điều đó nói rằng, nếu bạn thực sự muốn cải thiện chỉ ước tính đã cho và giữ thanh tiến trình như hiện tại, bạn có thể làm điều gì đó được đề xuất trong một nhận xét Slashdot :

Duy trì bảng tốc độ dự kiến ​​cho từng thiết bị lưu trữ trên hệ thống tệp. Ghi lại thời gian cần thiết để đọc thông tin hệ thống tập tin. Khi một thiết bị được gắn kết, nếu nó hợp lý với loại thiết bị, hãy tìm đến giữa và cuối, đo tốc độ ở đó. Nhận các đường cong gần đúng cho tốc độ đọc và ghi trên các vị trí và sử dụng các đường cong cho các ước tính trong tương lai. Đối với các hoạt động đọc và viết trong tương lai, hãy lưu ý vị trí của chúng và tốc độ chúng đi, và điều chỉnh các đường cong cho phù hợp.

Khi một hoạt động bắt đầu, hãy nhìn vào các đường cong cho đầu vào và đầu ra cho các thiết bị tương ứng. Tìm tốc độ dự kiến ​​cho vị trí mục tiêu. Bất kỳ tốc độ nào thấp hơn nên được sử dụng để ước tính.


1

Chỉ muốn thêm rằng tổng số tệp dễ dàng là yếu tố tốn thời gian nhất của các hoạt động sao chép tệp trên PC. Tôi luôn có thể nhớ khi còn là một sinh viên trẻ, cố tình gây ra sự thất bại của PC trong lớp máy tính của mình bằng cách bắt đầu với 1 tệp không có nội dung và sao chép nó, sau đó chọn 2 tệp và sao chép lại, v.v. Khi đã vượt qua khoảng 1024 tệp, nó bắt đầu mất một lượng lớn thời gian để làm bất cứ điều gì ngay cả khi nó đang sao chép không lưu thông tin cho tiêu đề tệp. Hãy tự mình thử ngay cả trên một hệ điều hành mới, sao chép tệp theo cấp số nhân và bạn sẽ thấy điều gì xảy ra. Thức ăn cho ý nghĩ.


Trong khi thú vị, điều này không trả lời câu hỏi. Đọc cách trả lời trước khi trả lời.
người dùng 99572 vẫn ổn vào

0

Tôi vừa sao chép 200GB từ USB HDD vào ổ đĩa chính của mình. Có khoảng 130000 tệp

Sau 4-5 phút đầu tiên tôi quan sát thấy rằng:

  • Đối với các tệp nhỏ nhất, tốc độ khoảng 100 tệp mỗi giây với tốc độ khoảng 600KB / giây
  • Và đối với các tệp lớn, nó là 70MB / s

Lúc đầu, các cửa sổ đã thay đổi ước tính từ 1 giờ thành 5+ giờ rồi quay lại 1 giờ và cứ thế. Cuối cùng, giống như trong 95%, nó vẫn thay đổi ước tính từ 10 phút đến hơn 10 giờ. Vì vậy, nó thay vì trở nên chính xác hơn, nó sẽ ngày càng ít chính xác hơn.

Toán học đơn giản cho thấy:

130.000 tệp với 100 tệp mỗi giây = 22 phút

200.000 MB với 70 MB mỗi giây = 47 phút

22 phút - mất thời gian tìm kiếm các tập tin sao chép có kích thước vài kilobyte. 47 phút - thời gian cần thiết để chuyển dữ liệu thực tế nếu không có thời gian tìm kiếm.

Tổng của 22 phút + 47 phút là thời gian tối đa tuyệt đối có thể có.

Vì vậy, rõ ràng ước tính nên ở đâu đó trong khoảng từ 47 đến 69 phút.

Hộp thoại hiển thị khoảng 90%: "Tôi đang sao chép một số tệp nhỏ với tốc độ 1MB / s, có thêm 20GB dữ liệu, sẽ mất 5:30 giờ để hoàn thành.

Vài giây sau: "Tôi đang sao chép một tệp lớn ở đây, với tốc độ 70mb / giây, sẽ mất 4 phút để hoàn thành.

Những gì con người thực sự nhìn thấy từ cùng một hộp thoại: 120.000 tệp và 180 GB đã được sao chép trong 40 phút. 10000 tệp còn lại và 20 GB sẽ mất khoảng 5 phút

Hộp thoại cung cấp đủ thông tin để thực hiện phép tính ngày càng chính xác hơn mỗi giây. Nó biết tốc độ mà các tập tin nhỏ được sao chép. Nó biết ở tốc độ nào các tập tin lớn được sao chép. Nó cũng biết có bao nhiêu tệp và còn lại bao nhiêu byte.

Thật đơn giản để đưa ra giả định chính xác như vậy chỉ bằng cách đặt giới hạn trên và dưới.

Hộp thoại hiển thị dữ liệu chính xác hơn một chút chỉ trong trường hợp khi các tệp lớn nằm trước các tệp nhỏ. Nếu đây là trường hợp, nó bắt đầu sau 40 phút và sau 30 phút, nó bắt đầu sao chép các tệp nhỏ và nói "tôi cũng cần thêm 20 phút nữa".

Nhưng khi các tệp nhỏ ở đầu và các tệp lớn ở cuối. Hộp thoại không thực sự quan tâm đến "tập tin mỗi giây" mà nó chuyển các tập tin nhỏ. Nó làm cho phép tính của nó giống như số tập tin nhỏ là vô cùng, và giống như chúng sẽ mãi mãi nhỏ.


Điều này không thực sự trả lời câu hỏi.
DavidPostill

Nó thực sự trả lời nó, nếu bạn đang đọc cẩn thận. Chúng là hai loại ước tính xấu và tôi đã giải thích lý do tại sao chúng xảy ra theo quan điểm kỹ thuật đảo ngược dựa trên ví dụ.
Xizario
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.