Почему Linux в 30 раз быстрее, чем Windows 10 при копировании файлов?

20

Я получил 20,3 гигабайта файлов и папок общим объемом более 100 тыс. Штук. Я скопировал все эти файлы в один каталог из Windows 10, и мне потребовались мучительные 3 часа копирования. Выполнено.

На днях я загрузился в Linux Fedora 24, заново скопировал ту же папку и bam! Мне потребовалось всего 5 минут, чтобы скопировать его в том же месте, но в другом каталоге.

Почему Linux так быстр? А винда кропотливо медленная?

Здесь есть похожий вопрос

Является ли (Ubuntu) алгоритм копирования файлов Linux лучше, чем Windows 7?

Но принятого ответа совершенно не хватает.

Джонс Г
источник
Вы не используете «Windows» или «Linux» для копирования файлов, вы используете какую-то определенную программу, работающую в каждой из этих операционных систем. Программы сильно различаются по методам, которые они используют, и компромиссам, которые они делают. Какие из них вы использовали? И как?
kreemoweet
5
@kreemoweet: То же самое делают и операционные системы - известно, что NTFS в Windows очень плохо справляется с большим количеством мелких файлов по сравнению с большинством других файловых систем.
user1686 15.09.16
2
И хороший downvote от поклонника Windows, да. Видите ли, копирование файлов, хотя и простое, имеет множество приложений - от резервного копирования данных в бизнесе до научных исследований. Например, в CERN есть петабайты данных, с которыми медленное копирование будет неприемлемым.
Джонс Г
По той же ссылке - проверьте 2-й ответ снизу. Linux кэширует все файлы в доступную оперативную память и записывает их на диск, когда они могут, - следовательно, почему это выглядит быстрее (поскольку сейчас нужно только читать и писать, когда они могут).
Дарий
@DominicGuana Файловые системы играют свою роль (ext3 / ext4 могут выделять куски по 100 Мб за один раз). Вы считаете, что антивирус под Windows тоже может играть (замедляющую) роль? Кстати, для подобных проблем с потоком сбора данных SLAC (после триггера 1-го уровня было слишком много данных) мы научились писать на HDD параллельно ...
Hastur

Ответы:

25

Его основы разбиты на несколько ключевых компонентов всей системы: элемент пользовательского интерфейса (графическая часть), само ядро ​​(что говорит с оборудованием) и формат, в котором хранятся данные (то есть файловая система). ).

Возвращаясь назад, NTFSде-факто для Windows уже некоторое время, а для основных вариантов Linux де-факто - extфайловая система. Сама файловая система NTFS не изменилась со времени Windows XP (2001), многие функции, которые существуют (такие как сжатие / восстановление разделов, транзакционная NTFS и т. Д.), Являются функциями ОС (Windows Vista / 7/8/10). а не сама NTFS. В 2008 году у extфайловой системы был последний стабильный выпуск ( ext4). Поскольку сама файловая система определяет, как и где осуществляется доступ к файлам, если вы используете, ext4есть вероятность, что вы заметите улучшение скорости по сравнению с NTFS; однако, обратите внимание, если вы использовали, ext2вы можете заметить, что он сопоставим по скорости.

Также может быть так, что один раздел отформатирован небольшими порциями, чем другой. По умолчанию для большинства систем используется размер кластера 4096 byte 1 , 2 , но если вы отформатировали ext4раздел как-то 16k 3, то при каждом чтении в ext4системе данные будут в 4 раза выше, чем в системе NTFS (что может означать 4-кратное увеличение числа файлов в зависимости от того, что хранится). где / как и как большой и т. д.). Фрагментация файлов также может играть роль в скорости. NTFS обрабатывает фрагментацию файлов совсем по-другому, чем extфайловая система, и с более чем 100k файлами существует большая вероятность фрагментации.

Следующим компонентом является само ядро ​​(не пользовательский интерфейс, а код, который фактически взаимодействует с аппаратным обеспечением, с настоящей ОС). Здесь, честно говоря, нет большой разницы. Оба ядра могут быть настроены на выполнение определенных задач, таких как кэширование / буферизация диска, для ускорения чтения и восприятия записи, но эти конфигурации обычно имеют одинаковые компромиссы независимо от ОС; например, кеширование может значительно увеличить скорость копирования / сохранения, но если вы потеряете энергию во время записи в кеш (или извлеките USB-накопитель), то вы потеряете все данные, которые фактически не записаны на диск, и, возможно, даже поврежденные данные, уже записанные на диск.

Например, скопируйте много файлов на USB-диск в формате FAT в Windows и Linux. В Windows это может занять 10 минут, в то время как в Linux это займет 10 секунд; сразу после того, как вы скопировали файлы, безопасно извлеките диск, извлекая его. В Windows он будет немедленно извлечен из системы, и, таким образом, вы сможете извлечь диск из порта USB, в то время как в Linux может потребоваться 10 минут, прежде чем вы действительно сможете извлечь диск; это происходит из-за кеширования (то есть Linux записывает файлы в ОЗУ, а затем записывает их на диск в фоновом режиме, в то время как без кэш-памяти Windows записывает файлы сразу на диск).

Последний - это пользовательский интерфейс (графическая часть, с которой взаимодействует пользователь). Пользовательский интерфейс мог бы быть симпатичным окном с некоторыми классными графиками и хорошими столбиками, которые дают мне общее представление о том, сколько файлов копируется и каков их размер и сколько времени это может занять; пользовательский интерфейс также может быть консолью, которая не печатает никакой информации, кроме случаев, когда это сделано. Если пользовательский интерфейс должен сначала просмотреть каждую папку и файл, чтобы определить, сколько их файлов, плюс их размер и дать приблизительную оценку, прежде чем он сможет фактически начать копирование, тогда процесс копирования может занять больше времени из-за того, что пользовательский интерфейс должен сделай это. Опять же, это верно независимо от ОС.

Вы можете настроить некоторые вещи на равные (например, кеширование диска или размер кластера), но на самом деле все сводится к тому, как все части связаны друг с другом, чтобы заставить систему работать, и более конкретно, как часто эти части кода обновляются. ОС Windows прошла долгий путь со времени Windows XP, но дисковая подсистема - это область, в которой в течение многих лет не было много TLC в ОС во всех версиях (по сравнению с экосистемой Linux, которая, похоже, видит какую-то новую FS). или улучшение довольно часто).

Надеюсь, что это добавляет ясности.

txtechhelp
источник
Ужасный ответ по моему и проголосовал вниз. Вы вводите различия там, где их нет. Никто не спросил, как по-разному работают диски. Конечно, вопрос сосредоточен на предписании «все остальные равны». Я могу выбрать fs для 8 nvme raid0 любым способом с родной скоростью чтения более 16 гигабайт в секунду, но при этом копия файла Windows в любое время достигает максимальной скорости 1,4-1,5 гигабайта. Не имеет ничего общего с кэшированием, FS, разделами, но больше с ограничениями ОС Windows.
Матиас Вольф
@ Matt, в какой файловой системе вы форматируете RAID-массив? Если это NTFS, это может объяснить замедление ... но если у вас есть больше информации для предоставления, вы можете добавить соответствующий ответ, особенно если у вас есть какой-либо исходный код (а не дамп сборки) для основной ОС Windows. прямо объяснить, почему происходит замедление (мне, в частности, это особенно интересно!).
txtechhelp
Я использую ntfs, что лучше, как fs на сервере Windows?
Матиас Вольф
Я связывался с MSFT и много раз обсуждал и много лет пытался, и никогда не получал, чтобы он превышал 1,5 ГБ / с, несмотря на то, что на каждой машине было 100 Гбит / с и все остальные данные трафика на инструменты профилирования Mellanox показывают, что соединения работают отлично. Пропускная способность 94-95 Гбит / с. Никаких замедлений между машинами Linux, но как только машина с ОС Windows работает, я вижу эти узкие места
Матиас Вольф
Я говорю об однократной передаче файлов, все однопоточные. Здесь нет узкого места в оборудовании, оно основано исключительно на ОС.
Матиас Вольф