powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Windows [игнор отключен] [закрыт для гостей] / Оптимальный размер блока при записи файла на флэшку
25 сообщений из 155, страница 4 из 7
Оптимальный размер блока при записи файла на флэшку
    #39786381
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное, пора создавать блог и писать туда мысли по поводу сабжа и вообще копирования файлов.

Мысль первая:
Для того, чтобы быстро копировать, надо сделать три вещи:
1. Быстро читать
2. Быстро писать
3. Не давать медленной операции простаивать.

Первые два пункта решаются сравнительно просто, надо установить правильные флаги в функции CreateFile.

На третьем начинаются танцы. Если чтение и запись ведутся последовательно, ничего не сделаешь. Если параллельно - надо сделать упреждающее чтение. Но оно не поможет, если скорость чтения ощутимо меньше скорости записи. И получится, что ты напрасно выделил память под буфер А сравнить эти скорости можно только начав процесс копирования.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39786385
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TFlying-homeА кто-нибудь видел своими глазами скорость копирования по сети 100 мегабайт в секунду?
Почти 100

Точно! Надо будет еще и с Фаром посоревноваться.
А можно поинтересоваться, в каком окружении эта скорость была установлена? Какие винты и контроллеры на сервере и на клиенте?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39786386
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeЭто 0.8 гигабита в секунду, близко к пропускной способности гигабитной сетки. А может, и на пределе. Сколько там служебных байт надо самбе для передачи файла?
Гигабит это 2^30 бит/сек или 2^27 байт/сек или 128 Мб/сек. При копировании большого файла служебной инфы менее 1%, т.е. предельная скорость должна быть около 125 Мб/сек.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39786392
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeDima Tпропущено...

Почти 100

Точно! Надо будет еще и с Фаром посоревноваться.
А можно поинтересоваться, в каком окружении эта скорость была установлена? Какие винты и контроллеры на сервере и на клиенте?
Cервер SSD, клиент обычный HDD. Сетевухи встроенные. Роутер Zyxel Keenetic Ultra
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39786397
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С сервера на клиента без сохранения на диск 109 Мб/сек
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39786473
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
С сервера на клиента без сохранения на диск 109 Мб/сек

"Без сохранения на диск" - это как? Чистая скорость чтения?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39786474
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какой версией Фара пользуются благородные доны?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39786478
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeDima T
С сервера на клиента без сохранения на диск 109 Мб/сек

"Без сохранения на диск" - это как? Чистая скорость чтения?
Вместо пути куда пишешь nul, т.е. дословно "в никуда".
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39786482
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeА какой версией Фара пользуются благородные доны?
Древняя, 2003 год: The FAR manager, version 1.70 beta 5 (build 1634)

Есть посвежее: Far Manager, version 3.0 (build 4949) x64. В ней 113.2 Мб/сек копирование в nul
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39786643
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TFlying-homeА какой версией Фара пользуются благородные доны?
Древняя, 2003 год: The FAR manager, version 1.70 beta 5 (build 1634)

Есть посвежее: Far Manager, version 3.0 (build 4949) x64. В ней 113.2 Мб/сек копирование в nul
А у него есть какие-то настройки копирования? Или алгоритм полностью универсальный?
В ТоталКоммандере есть:
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39786752
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeА у него есть какие-то настройки копирования? Или алгоритм полностью универсальный?
Там из всех настроек одна галка "Use system copy routine" и она стоит. Т.е. использет виндовые средства. Вот топик по этому вопросу

Попробовал галку снять - скорость упала со 113 до 87 Мб/с
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39787096
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть ещё прога teracopy http://codesector.com/teracopy , хорошо и быстро копирует, да ещё и может проверить скопированное.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39787482
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяесть ещё прога teracopy http://codesector.com/teracopy , хорошо и быстро копирует, да ещё и может проверить скопированное.
Посмотрим.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39787487
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ситуация:
Копируем файлы с жесткого диска на SSD.
Скорость записи SSD заметно выше скорости чтения HDD, операции чтения на простаивают.
Все файлы небольшие, от 200 КБ до 19 МБ, 600 штук
Чтение безбуферное.

В первом случае читаются блоками по 2 МБ, в блок больше одного файла не читается.
Количество чтений - 1694

Во втором случае читаются блоками по 32 МБ, в блок может быть прочитано несколько файлов.
Количество чтений - 683

В обоих случаях остановок (пауз между операциями чтения) нет. Почему второй метод проигрывает 2% по скорости?

Если объем файлов увеличить в два раза, то и разница во времени копирования увеличивается в два раза.

Если скопировать эти файлы на тот же диск так, чтобы их фрагментация уменьшилась, то в обоих случаях скорость возрастает, но первый метод выигрывает те же 2%.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39787490
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты в эксперимент внёс ещё несколько неизвестных.

Когда копируешь 1 большой файл то можно достичь
Пропускной скорости диска.

Когда копируешь россыпь мелких то читающий
И пишущий диски начинают роутинг дискового каталога. А это движение по древовидными
Структурам. В игру включаются seek вызовы
И это сбивает основной алгоритм.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39787532
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeВ обоих случаях остановок (пауз между операциями чтения) нет. Почему второй метод проигрывает 2% по скорости?
ИМХО большим блоком ты мешаешь каким-то фоновым оптимизациям внутри ОС. Например упреждающее чтение: прочитав маленький блок, пока ты пишешь - ОС готовит тебе следующий блок, а при большом блоке ты тупо ждешь пока ОС тебе его прочитает.
При записи тоже есть нечто подобное.

1. Уменьши блок до 32-64 Кб.
2. Замерь скорость встроенных средств: CopyFile() CopyFileEx()
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39787573
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяесть ещё прога teracopy http://codesector.com/teracopy , хорошо и быстро копирует, да ещё и может проверить скопированное.
Школьная поделка.
Сходу проиграла мне 7%. 13 файлов, общий объем 8.5 ГБ. Мое время - 155 сек, ее - 167 (по ее данным).
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39787576
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТы в эксперимент внёс ещё несколько неизвестных.

Когда копируешь 1 большой файл то можно достичь
Пропускной скорости диска.

Когда копируешь россыпь мелких то читающий
И пишущий диски начинают роутинг дискового каталога. А это движение по древовидными
Структурам. В игру включаются seek вызовы
И это сбивает основной алгоритм.

Размер блока в данном случае не имеет значения.
В первом случае я читаю 4-метровый файл за два последовательных прохода, которые, скорее всего, винчестер объединяет.
Во втором случае я читаю 4-метровый файл за один проход.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39787581
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TFlying-homeВ обоих случаях остановок (пауз между операциями чтения) нет. Почему второй метод проигрывает 2% по скорости?
ИМХО большим блоком ты мешаешь каким-то фоновым оптимизациям внутри ОС. Например упреждающее чтение: прочитав маленький блок, пока ты пишешь - ОС готовит тебе следующий блок, а при большом блоке ты тупо ждешь пока ОС тебе его прочитает.
При записи тоже есть нечто подобное.

1. Уменьши блок до 32-64 Кб.
2. Замерь скорость встроенных средств: CopyFile() CopyFileEx()
Это все справедливо для буферизированных операций. У меня чтение безбуферное, ось мне ничего не готовит.
Виндовые функции копирования CopyFile() и CopyFileEx() уже давно курят в сторонке.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39787592
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитай про IoCompletionPort . У Рихтера неплохо было написано про него в "Windows via C/C++".
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39787639
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПочитай про IoCompletionPort . У Рихтера неплохо было написано про него в "Windows via C/C++".
Уже было предложено и было мной прочитано.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39787664
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотел бы в двух словах описать (как я это понимаю), как происходят безбуферные дисковые операции, чтобы исключить в дальнейшем предложения уменьшить размер буфера до 64К.

Что у Рихтера на эту тему

Виндовс, когда видит, что файл создан (или открыт) с флагом FILE_FLAG_NO_BUFFERING, делает две вещи: отменяет собственную буферизацию и говорит винчестеру, что хочет, чтобы он читал данные посекторно.
Так вот, если винчестер это понимает и может, если файл (или свободное пространство, если речь идет о записи) несильно фрагментированы, ты мы можем получить прирост скорости операции до 50%. Пример такого прироста мы видим в работе ФАРа (несколько постов выше). Для таких операций (при достаточно больших файлах) размер блока должен быть побольше. Из моих наблюдений скорость операций перестает расти после 16, 32 и 64 МБ. Интересно, что этот механизм работает и по сети.

Я не занимаюсь копированием файлов размером меньше 128 КБ, выделяю их копирование в отдельную задачу и использую CopyFile(). Получается быстрее, чем если копировать их вместе с большими файлами. Это потому что создание файла в файловой системе занимает больше времени, чем запись в него. Так же при создании файла головки винчестера делают лишние телодвижения для работы с MFT.

Но с файлами размером 2 МБ приходится возиться.

Почему я вообще этим занялся: из всех копировалок, которые я видел, ни одна не копировала бесшовно. И ни одна не пыталась использовать побольше памяти для упреждающего чтения. Я решил, что смогу на этих двух пунктах выиграть и уже выигрываю.
Бесшовно - значит без паузы межу файлами. К тому времени, когда пишущий поток закрывает очередной записанный файл, читающий поток уже должен прочитать ему первый блок следующего файла.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39787677
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeЭто потому что создание файла в файловой системе занимает больше времени, чем запись в него. Так же при создании файла головки винчестера делают лишние телодвижения для работы с MFT.
Я добавлю что в старых файловых системах (FAT32 для дискет и флешек) каталог с файлами
представляет собой несортированный список. И когда количество файлов превышает за тыщу
вы испытываете ощутимый тормоз при добавлении нового файла.

Если отформатировать флешку на ExFat или NTFS тогда этот эффект нивелируется но возможно
будут новые более сложные эффекты которые не всегда можно спрогнозировать. В целом
MS рекомендует делать ExFat и я-бы сказал что глупо спорить. Есть табличка.
http://www.ntfs.com/ntfs_vs_fat.htm где можно почитать про некоторые сравнительные фичи.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39787756
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Свежая статья на похожую тему https://habr.com/ru/post/444036/
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39787849
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот иллюстрация к тому, что я говорил выше.
Это копирование кучи mp3-шек в сеть.

кол-во файлов кол-во блоков размер блока общий размер (байт) миллисекунды КБ/С МБ/С552 27 16 777 216 4 690 054 068 0 51 870 88 300.19 86.23552 15 33 554 432 4 690 054 068 0 48 298 94 830.65 92.61552 7 67 108 864 4 690 054 068 0 47 767 95 884.84 93.64TeraCopy4 690 054 068 77 000 59 482.22 58.09
Самый большой файл - 40 МБ, средний размер - 8 МБ.
Как видим, для безбуферных операций главная задача - уменьшить количество чтений/записи. А дальше уже вся надежда на винчестер и фрагментированность файлов / свободного места.
...
Рейтинг: 0 / 0
25 сообщений из 155, страница 4 из 7
Форумы / Windows [игнор отключен] [закрыт для гостей] / Оптимальный размер блока при записи файла на флэшку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]