Через гігабітний зв’язок, Teracopy робить 31 Мб / с, але Windows 8 робить це при ~ 109 МБ в секунду?
Що саме викликає це? І чи можу я ввімкнути такі швидкості через Теракопію? Я справді копаю зайві функції, які має Teracopy, зараз їх точно пропустять: D
Два слова: перевірка та кеш
Технічне пояснення
Це загальна процедура копіювання файлу за допомогою Провідника Windows:
- Прочитайте фрагмент даних з вихідного диска в пам'ять
- Надіслати фрагмент через систему (и)
- Напишіть шматок до місця призначення
- Якщо цього ще не зроблено, поверніться до кроку 1
Це здається простим і коротким. За допомогою цього алгоритму передачі кожен байт файлу обробляється лише два рази: один читання, один запис.
Але крім того, Windows використовує пам'ять (як і сам диск) для кешування деяких даних. Тож замість того, щоб чекати, коли попередній фрагмент закінчить писати, а потім прочитати наступний фрагмент, можна прочитати новий шматок, поки він ще пишеться. Очевидно, що це не може затримати назавжди, але Windows може використовувати всю решту вільної пам'яті як тимчасовий буфер для зберігання більшості, якщо не всього файлу, який читається в пам'яті.
Ви можете бачити кешування, скопіювавши великий файл - або папку з великою кількістю файлів - з одного диска на інший, а потім відразу порівнявши два. Порівняння в цей момент буде набагато швидшим, ніж якщо ви це зробите пізніше, оскільки файли (файли) все ще зберігаються в пам'яті, тому насправді вони не читають їх з накопичувачів.
Оскільки пам’ять дуже велика, а швидкість читання, як правило, трохи швидша, ніж швидкість запису, кінцева швидкість передачі в кінцевому підсумку обмежується лише швидкістю запису на привідному диску.
Теракопія може зробити дві речі, які можуть уповільнити передачу файлів, які Explorer не робить:
На відміну від Провідника, який перевіряє лише основні помилки під час передачі, Teracopy може фактично перевірити, чи були дані записані правильно на накопичувальний диск, щоб запобігти пошкодженню даних, що може статися через проблеми в носії передачі (мережа / кабель накопичувача / тощо). ) або сам диск (поганий сектор тощо). Це означає, що він повинен прочитати файл з пункту призначення, щоб порівняти його з оригіналом.
Залежно від використовуваного алгоритму та розміру файлу, перевірку можна оптимізувати якнайменше (але не менше) трьох операцій диска для кожного файлу / фрагменту файлу на відміну від двох провідника: прочитайте файл із джерела, напишіть файл до місця призначення та прочитати файл із пункту призначення.
Подивіться, що станеться при копіюванні файлу за допомогою Teracopy (за алгоритмом, оптимізованим HDD):
- Прочитайте фрагмент з джерела диска
- Хеш-фрагмент, прочитаний з джерела диска
- Надіслати фрагмент через систему (и)
- Запишіть його на привід призначення
- Очистити кеші
- Прочитайте шматочок назад з пункту призначення
- Хеш-шматок від місця призначення
- Порівняйте хеші
- Визначте наступний крок
- Якщо хеші не відповідають, введіть помилку та запропонуйте користувачеві діяти
- Якщо хеші збігаються і не закінчені, поверніться до кроку 1
Проблема полягає в тому, що якщо ви кешуєте файли під час передачі, порівняння стає марним, оскільки ви не читаєте фактичних даних на цільовому накопичувачі, ви зчитуєте кешовану копію в пам'яті з джерела. Тому для правильної перевірки потрібно очистити кеш. Це можна зробити після кожного читання і запису (що є додатковою операцією, яка б закінчилася незмінною кількістю файлів будь-якого значного розміру) або лише один раз після того, як весь файл буде передано.
Згідно з наведеним нижче скріншотом, TeraCopy здійснює перевірку після передачі файлів, а не протягом. Це означає, що він використовує цей алгоритм передачі, оптимізований CPU / RAM:
- Прочитайте фрагмент з джерела диска
- Надіслати фрагмент через систему (и)
- Запишіть його на привід призначення
- Якщо цього ще не зроблено, поверніться до кроку 1
- Копія закінчена, настільки чіткі кеші та перевірка
- Прочитайте фрагмент з джерела диска
- Хеш-шматок від місця призначення
- Прочитайте шматок із пункту призначення
- Хеш-шматок від місця призначення
- Порівняйте хеші
- Визначте наступний крок
- Якщо хеші не відповідають, введіть помилку та запропонуйте користувачеві діяти
- Якщо хеші збігаються і не закінчені, поверніться до кроку 6
Хоча цей алгоритм трохи менше напружує процесор і оперативну пам’ять, він також створює набагато більше навантаження на накопичувачі, тому що тепер кожен файл повинен бути оброблений чотири рази: прочитайте весь файл з джерела, запишіть його до місця призначення , потім знову прочитайте його з джерела та знову з пункту призначення.
(Якщо TeraCopy були оптимізовані для мережевих передач, то це могло б уникнути надсилання всього файлу вдруге для перевірки та надсилати лише хеші, які значно менші, але це, як видається, не так, і мережеві драйвери обробляються однаково як локальний диск, тому він фактично перечитує джерело.)
За замовчуванням TeraCopy не перевіряє і не використовує кеш. Якщо не перевірити, це пришвидшить передачу (або, точніше, не сповільнить її), а якщо не використовувати кеш, то сповільнить її.
Застосування
Щоб визначити конкретні результати швидкості, вам доведеться перевірити свої настройки, щоб побачити, чи змінили ви їх. Тоді ви можете спробувати приблизно визначити, яку швидкість ви отримали з різними налаштуваннями (пам’ятайте, що вони, швидше за все, взаємодіють, тому це не просто питання додавання чи віднімання).
З цього приводу давайте зробимо короткий розрахунок, використовуючи ваші числа:
- Локальна передача файлів: 875 Мбіт / с (тобто швидкість приводу)
- Швидкість мережі: 1Gbps = 119,21 MBps
- Скопіюйте через Провідник Windows: 109 Мбіт / с
- Скопіюйте через TeraCopy: 34 Мбіт / с
Відразу ж ми бачимо, що передача файлів Explorer майже збільшує вашу мережеву пропускну здатність. 1Gbps посилання дорівнює 1000000000 біт в секунду, що в бінарних одиниць в байтах , є 119MBps. Провізор працює на 109 Мбіт / с, а решта 10 Мбіт / с (що досить забавно було вашим попереднім максимумом :^Þ
) можна легко врахувати за рахунок накладних витрат, фонового навантаження та фрагментації.
(Оскільки швидкість передачі майже дорівнює швидкості мережі, ми можемо припустити, що передача файлів Провідника одностороння, і лише одна копія кожного файлу надсилається.) Провідник отримує 110 Мбіт / с за два доступу до файлу на файл.
Тепер про TeraCopy. Схоже, TeraCopy отримує майже річну третину швидкості Explorer.
Залежно від того, чи точно вказується діалог його переваг, чи ні алгоритм, який він використовує, TeraCopy фактично може надсилати весь вихідний файл двічі, щоб він міг перевірити копію. Відразу це скорочує пропускну здатність навпіл. Якщо кеш увімкнено, це занадто зменшує швидкість, оскільки йому доведеться чекати, коли закінчиться кожен запис, перш ніж він може надіслати новий шматок. У поєднанні з верифікацією це може збити її ще більше.
Швидкість передачі даних в 34 Мбіт / с видається розумною, якщо у вас увімкнено підтвердження та вимкнено кешування Якщо вимкнути перевірку та кеш-пам’ять, ви повинні отримати приблизно те саме, що і Explorer (ви все одно можете отримати трохи менше або навіть трохи більше, залежно від того, наскільки код передачі файлів, який використовує TeraCopy, від того, який використовує Explorer).
Якщо ви готові перенести майже 10 Гб, ви також можете спробувати змінити налаштування та повторно перенести передачу для кожної з чотирьох перестановок і записати швидкість, яку ви отримаєте (щоб бути безпечною, замовіть її так, щоб кеш був між пробіжками:) V+C+, V+C-, V-C+, V-C-
.