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

И еще. Подумал, что надо бы создать пару-тройку потоков, чтобы стояли в очереди с уже прочитанными данными и ждали, пока первый поток не запишет свои. Разумно?

Речь идет о копировании файлов по 50 - 300 МБ количеством от 10 до 100. Цель - максимальная скорость.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39756402
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поток сознания какой-то. Ты подумал так и так, сделал выводы, выжимки из них привел, ... а мы тут при чем?

Пытаюсь ванговать: писать лучше последовательно, т.к. канал один и распараллеливание будет тормозом.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39756413
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T Поток сознания какой-то . Ты подумал так и так, сделал выводы, выжимки из них привел, ... а мы тут при чем?

Пытаюсь ванговать: писать лучше последовательно, т.к. канал один и распараллеливание будет тормозом.

Ну может быть. Выходные все-таки.

Основной вопрос по размеру блоков. Какими блоками лучше копировать?

По потокам: понятно, что писать надо одним потоком. Я подумал, не попытаться ли сделать упреждающее чтение с помощью потоков. Наверное, его можно и по-другому сделать.
Зачем это делать: если блоки будут достаточно большими и делать все последовательно, то сразу после записи очередного блока будет возникать потеря времени на чтение следующего блока.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39756414
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное, можно весь файл в оперативку загружать оттуда уже записывать.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39756418
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeЧто-то слабо гуглится. Все, что нагулилось - в разбросе от 80 КБ до 2 МБ.
Кто-нибудь уже решал подобный вопрос? Что выбрать, если времени на тестирование нет? Или на что надо посмотреть перед копированием?

И еще. Подумал, что надо бы создать пару-тройку потоков, чтобы стояли в очереди с уже прочитанными данными и ждали, пока первый поток не запишет свои. Разумно?

Речь идет о копировании файлов по 50 - 300 МБ количеством от 10 до 100. Цель - максимальная скорость.
Технологии меняются. И то что мы знали о флешках лет 10 назад сегодня может быть уже не совсем актуально.

По теме несколько мыслей.

1) Посмотри как ты ее форматируешь. extFS? NTFS? Можно попробовать варианты.
Для россыпи мелких файлов - можно попробовать сархивировать 7zip-ом
без сжатия и просто указать destination а флешку. Или TAR-ом.

2) Посмотри https://en.wikipedia.org/wiki/Flash_file_system может какие-то мысли будут.

3) Посмотри как ты ее включаешь? USB2.0 и USB3.0 это разные стандарты скоростей. Для тройки слот покрашен в синий.

4) Посмотри ... в магазинах комп-техники обычно пишут класс памяти. Ну.. для SD точно пишут. Обычно этот
класс и определяет предельную скорость. Если ты уперся в него то уже никакие многопоточки не помогу.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39756453
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonFlying-homeЧто-то слабо гуглится. Все, что нагулилось - в разбросе от 80 КБ до 2 МБ.
Кто-нибудь уже решал подобный вопрос? Что выбрать, если времени на тестирование нет? Или на что надо посмотреть перед копированием?

И еще. Подумал, что надо бы создать пару-тройку потоков, чтобы стояли в очереди с уже прочитанными данными и ждали, пока первый поток не запишет свои. Разумно?

Речь идет о копировании файлов по 50 - 300 МБ количеством от 10 до 100. Цель - максимальная скорость.
Технологии меняются. И то что мы знали о флешках лет 10 назад сегодня может быть уже не совсем актуально.

По теме несколько мыслей.

1) Посмотри как ты ее форматируешь. extFS? NTFS? Можно попробовать варианты.
Для россыпи мелких файлов - можно попробовать сархивировать 7zip-ом
без сжатия и просто указать destination а флешку. Или TAR-ом.

2) Посмотри https://en.wikipedia.org/wiki/Flash_file_system может какие-то мысли будут.

3) Посмотри как ты ее включаешь? USB2.0 и USB3.0 это разные стандарты скоростей. Для тройки слот покрашен в синий.

4) Посмотри ... в магазинах комп-техники обычно пишут класс памяти. Ну.. для SD точно пишут. Обычно этот
класс и определяет предельную скорость. Если ты уперся в него то уже никакие многопоточки не помогу.
Не, нужно решение под "просто какую-то флэшку".
То есть, сделать программную оптимизацию под неизвестно что. Неизвестно, что будет за комп, будет ли у него USB 3.0, неизвестно, что будет за ось, неизвестно, что будет за флэшка.
Все, на чем можно сыграть - то, с чего я начал топик. Размер блока и упреждающее чтение.
А комп может оказаться и хрюшей с 512 МБ, и десятка с 16 ГБ оперативки.

В первом приближении это давно реализовано в Тотал коммандере. У него в настройках есть варианты копирования "по хорошему" и "как в проводнике".
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39756463
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну за 10 экспериментов с разным размером блока ты можешь найти оптимальный.

А мы тебе чем тут поможем?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39756479
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНу за 10 экспериментов с разным размером блока ты можешь найти оптимальный.

А мы тебе чем тут поможем?
А зачем форумы вообще нужны?
Любому вопрошающему можно сказать, что потрудившись и почитав справку он сам найдет нужное решение.

Может, кто-то уже решал подобную задачу?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39756481
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homemaytonНу за 10 экспериментов с разным размером блока ты можешь найти оптимальный.

А мы тебе чем тут поможем?
А зачем форумы вообще нужны?
Любому вопрошающему можно сказать, что потрудившись и почитав справку он сам найдет нужное решение.

Может, кто-то уже решал подобную задачу?
Покажи свой сорц.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39756496
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНу за 10 экспериментов с разным размером блока ты можешь найти оптимальный.Даже если этот оптимум существует (в чем я сомневаюсь), то это будет оптимум конкретной модели флешки. Для другой модели/ревизии/firmware он может быть другим.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39756501
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть и другие критерии - физический размер блока на чипе памяти например (которые между делом имеют ограниченное число циклов записи, поэтому переписывать блоки которуе не обязательно переписывать - черевато преждевременным износом)
размер блока смотреть надо кратный размеру блока чипа (через целый множитель), хотя здесь стандарт - так что не промазать

на современных чипах flash памяти размер блока начинается от 512Кб+ (смотришь сколько страниц на чипе, делишь объём)
дальше нюансы, к примеру по файлам - если файлы по 2кб - то писать их (если каждый отдельно, последовательно, потом переход к следующему, а не группой) блоками по 64Кб может быть дороговато.

с другой стороны - ставь USB 3.2 (ту которая 2x2 , т.е. 2.5 GB/sec) или 3.1 (1.25 GB/sec) и забудь об этих мелочах.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39756503
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С точки зрения бизнеса. Как звучит постановка. Если надо просто скопировать файл - то это фигня.
Потому что финал этой операции находится не здесь. А после отмонтирования флешки.

Тоесть мне как конечному пользователю системы неинтересно быстро или медленно копирует
процесс. Мне интересно чтобы я смог быстро нажать мышкой Unmount. И сброс буферов
произошёл-бы максимально быстро.

Тоесть мы имеем дело со сложным стеком технологий Операционка+софт+драйвер флешки
и просто так угадать какой нужен размер блока практически невозможно.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39756512
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeЗачем это делать: если блоки будут достаточно большими и делать все последовательно, то сразу после записи очередного блока будет возникать потеря времени на чтение следующего блока.
Так это не зависит от размера блока. Используй overlapped I/O или читай и пиши разными потоками. Двух буферов по мегабайту хватит наверняка. Ну и экстремальные виды оптимизации типа FILE_FLAG_NO_BUFFERING (O_DIRECT) не забудь.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39757523
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем.

Я маленькие файлы пока не рассматриваю. Размер - от 50 МБ. Соответственно, и буферы рассматриваю большие (кратные 4КБ).

При копировании с одного сата-диска на другой по моей (пока недостаточной) статистике оптимальным представляется буфер 40 или 80 МБ. Может, и больше.

Думаю вот, насколько такие буферы применимы к флэшкам? Если у нее свободное пространство фрагментировано, что будет?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39757525
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovFlying-homeЗачем это делать: если блоки будут достаточно большими и делать все последовательно, то сразу после записи очередного блока будет возникать потеря времени на чтение следующего блока.
Так это не зависит от размера блока. Используй overlapped I/O или читай и пиши разными потоками. Двух буферов по мегабайту хватит наверняка. Ну и экстремальные виды оптимизации типа FILE_FLAG_NO_BUFFERING (O_DIRECT) не забудь.
Я пока думаю о двух потоках.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39757526
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну... сорцов мы не дождались. Так ште... good luck.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39757607
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если речь о простом копировании файлов в виндовсе, то есть штатные средства CopyFile() и CopyFileEx()
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39757940
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeПри копировании с одного сата-диска на другой по моей (пока недостаточной) статистике оптимальным представляется буфер 40 или 80 МБ.
Совершенно избыточны такие буфера. Скорость копирования перестаёт расти уже на 64 кб.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39758120
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНу... сорцов мы не дождались. Так ште... good luck.
Дык, их еще просто нет. Я обычно сперва вопросы задаю, а потом уже что-то пишу.
ЗЫ А зачем тебе сорцы?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39758125
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homemaytonНу... сорцов мы не дождались. Так ште... good luck.
Дык, их еще просто нет. Я обычно сперва вопросы задаю, а потом уже что-то пишу.
ЗЫ А зачем тебе сорцы?
В этом форуме обычно обсуждают предмет программирвоания. А он как ни странно
связан с сорцами. Тем более что в вашем случае мы имеем дело даже не с алгоритмом
которого здесь нет. А с кодингом под Windows.

Читайте Джефа Рихтера. У него был пример быстрого копирования.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39758126
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovFlying-homeПри копировании с одного сата-диска на другой по моей (пока недостаточной) статистике оптимальным представляется буфер 40 или 80 МБ.
Совершенно избыточны такие буфера. Скорость копирования перестаёт расти уже на 64 кб.
У меня на 40 МБ перестала расти. Может, у меня какой-то не общий случай, может с размерами файлов какая-то коллизия произошла, надо будет еще посмотреть.

С одной стороны, чем больше буфер, тем больше можно выиграть на "бесшовном" копировании группы файлов, с другой - в задаче файлы от 50 МБ, и если их два, то смысла в бОльших буферах действительно нет.

Кстати, можно еще выиграть время на начальном чтении. Начинать копировать маленькими буферами и постепенно увеличивать размер до рабочего.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39758128
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonFlying-homeпропущено...

Дык, их еще просто нет. Я обычно сперва вопросы задаю, а потом уже что-то пишу.
ЗЫ А зачем тебе сорцы?
В этом форуме обычно обсуждают предмет программирвоания. А он как ни странно
связан с сорцами. Тем более что в вашем случае мы имеем дело даже не с алгоритмом
которого здесь нет. А с кодингом под Windows.

Читайте Джефа Рихтера. У него был пример быстрого копирования.
Ну, я сейчас обдумываю именно алгоритм. Потому и зашел в общий топик. Если бы были вопросы по Дельфе, пошел бы туда.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39758129
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homemaytonпропущено...

В этом форуме обычно обсуждают предмет программирвоания. А он как ни странно
связан с сорцами. Тем более что в вашем случае мы имеем дело даже не с алгоритмом
которого здесь нет. А с кодингом под Windows.

Читайте Джефа Рихтера. У него был пример быстрого копирования.
Ну, я сейчас обдумываю именно алгоритм. Потому и зашел в общий топик. Если бы были вопросы по Дельфе, пошел бы туда.
И какой у вас сейчас алгоритм?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39758192
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во стыдоба...
Перепутал все, что можно было перепутать. Большее с меньшим, размеры буфера...
Праздники удались.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39758386
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home,

наверное надо прыгать от самой распространённой FS на флэш-накопителях: Fat32
викиРазмер кластера по умолчанию для файловой системы FAT32 составляет от 512 байт до 32 КБ в зависимости от размера тома и конкретной версии ОС[2].При использовании размера кластера, равного 32768 байт, максимальный размер тома составит чуть менее 8 ТБ[3]. Хотя размер сектора может быть любым, традиционно он считается равным 1 сектору диска и равен 512 байт и т.к. эта величина не менялась с момента создания — она может считаться некоторым ПО как константа.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39758480
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeУ меня на 40 МБ перестала расти. Может, у меня какой-то не общий случай, может с размерами файлов какая-то коллизия произошла, надо будет еще посмотреть.
С алгоритмом у тебя коллизия скорее всего произошла. На 40 мегабайтах разница по времени между логической записью в кэш и физическим обменом с флэшкой стала достаточной для того, чтобы следующий блок успел прочитаться с винта.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39762046
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovFlying-homeУ меня на 40 МБ перестала расти. Может, у меня какой-то не общий случай, может с размерами файлов какая-то коллизия произошла, надо будет еще посмотреть.
С алгоритмом у тебя коллизия скорее всего произошла. На 40 мегабайтах разница по времени между логической записью в кэш и физическим обменом с флэшкой стала достаточной для того, чтобы следующий блок успел прочитаться с винта.
Я еще до флэшки не дошел, пока только с сата винчестерами балуюсь. И до FILE_FLAG_NO_BUFFERING тоже еще не добрался. Рихтера уже начал читать. Очень доходчиво пишет, респект ему.

Чтобы было с чем сравнивать, я сделал эталон:
Использую виндовый буфер, применяю FILE_FLAG_SEQUENTIAL_SCAN, принудительно сбрасываю буфера по очереди после того, как вся группа файлов формально скопируется. Недостаток этого метода в том, что винда сбрасывает буфера когда захочет и делает это параллельно, это заметно снижает скорость записи на диск. Тут я ничего поделать не могу. Алгоритм копирования тут особого значения не имеет, поскольку запись идет всегда в память и начинает задерживаться только когда буфер переполняется.

С этим эталоном я сравниваю свой алгоритм:
Чтение с использованием буфера, запись - "через буфер" (FILE_FLAG_WRITE_THROUGH) алгоритм для одного жесткого диска - один поток, один блок, для разных дисков - два потока, два блока. Играю размерами блоков, вижу, что чем больше, тем лучше. 64 МБ - самое то. У эталона выигрываю 8% на одном диске и 15% на разных дисках.
Это я сделал, потому что думал, что винда правильно и качественно сбрасывает буфера. Кто ей мешает, например, использовать для этого тот же алгоритм, что и в FILE_FLAG_NO_BUFFERING, и делать все последовательно? Но нет.

Пока еще у меня все сырое, но буду держать вас в курсе.
:)
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39762048
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Набросал тут мысли по поводу:

Что зависит от программиста:

Алгоритм копирования:

один поток, один блок (полезно для копирования на тот же диск)

два потока, несколько блоков (для копирования на другой диск)

Соответственно, можно играть с размерками блоков и их количеством. Можно копировать файлы с помощью соответствующего виндового диалога

Способы открытия файлов:


для чтения: с буфером, без буфера

для записи: с буфером, "через буфер", без буфера

Для вариантов с буфером полезен флаг FILE_FLAG_SEQUENTIAL_SCAN, при использовании буфера можно принудительно сбрасывать буфера на диск, можно не сбрасывать.


Специфика окружения, от которой может зависеть выбор алгоритма и способа открытия файлов:

Источник и целевой файлы могут находиться


на одном физическом носителе

на разных носителях


Источник и целевой файлы могут находиться


на жестком диске

на твердотельном накопителе

на RAID массиве

на компакт, DVD диске

на съемном флэш-накопителе (для которого винда либо включила буферизацию, либо нет)

в локальной сети

на подключенном к компьютеру смартфоне (носители которого либо распознаются системой как диски, либо нет)

Носители могут иметь различные


файловые системы

размеры сектора

размеры кластера

Про сектора наверное, можно забыть и оперировать только размерами кластера (подгонять под них размеры блоков)

Продвинутость пользователя
Одного пользователя можно ненавязчиво спросить, расположены ли C:\ и D:\ на одном HDD, другого - нельзя.

Ограничения операционной системы
Еще не пробовал, но кажется, програмная попытка получить ответ на предыдущий вопрос под ограниченным в правах пользователем с включенным УАКом может потерпеть крах и / или испугать пользователя.
Тоже самое с попыткой выяснить размер кластера и количество свободного места на диске (предполагаю)
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39762054
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл сказать, что при копировании двумя потоками у меня упреждающее чтение работает и между файлами.
То есть, когда записывающий поток заканчивает с одним файлом, читающий уже начинает со следующим.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39762057
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще я пока не вижу преимуществ overlapped I/O. Если у меня и так все длительные операции в отдельных потоках и у пользователя ГУИ не тормозит, зачем он может быть нужен?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39762097
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeИ еще я пока не вижу преимуществ overlapped I/O. Если у меня и так все длительные операции в отдельных потоках и у пользователя ГУИ не тормозит, зачем он может быть нужен?
AFAIK & IMHO overlapped IO позволяет уменьшить кол-во потоков. Если у тебя 2-3 потока - то все нормально, а если 200-300 потоков, то тогда уже на переключении потоков будет overhead.

AFAIK & IMHO для обычных дисков, до 1 Mb рост скорости от увеличения буфера вполне чувствуется без всяких замеров, до 8 Mb уже не столь существеннено. Больше (для обычных дисков) может потребоваться только если чтение и запись идет одновременно с одного и того же диска (уменьшаем перемешение головок), но тут приделов нету. И до 512 Mb можно выгоду почувствовать

На SSD-флешке головок нет, мне кажется 64 Mb тут сильно лишнее.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39762122
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevмне кажется 64 Mb тут сильно лишнее.
А чем плохо? Только тем, что перед копированием надо узнать, сколько некэшируемой оперативки может выделить система приложению? Может, действительно, три блока по 64 МБ будет тяжело?


Leonid KudryavtsevЕсли у тебя 2-3 потока - то все нормально, а если 200-300 потоков, то тогда уже на переключении потоков будет overhead.
У меня всего 2 потока. Зачем больше? Для упреждающего чтения достаточно количество блоков увеличить.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39762123
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, кстати.
Рихтер пишет, что для выделения блоков использует VirtualAlloc, потому что так данные выравниваются в памяти правильно. А что, обычный GetMem не будет выравнивать?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39762125
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeна компакт, DVD диске
Интерсно, как лучше с них читать? Думаю, с обычной буферизацией.

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

Я, например, много лет назад заглянул в настройки Тоталкоммандера, увидел там разные размеры блока для одного и двух дисков, сказал "Ого", оставил все как есть и больше эти настройки не открывал. А теперь я копирую быстрее него. Как мне кажется, у Джислера во всех случаях однопоточное копирование. По крайней мере в шестой версии.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39762148
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эту тему можно переносить в Windows.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39762411
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeИ еще я пока не вижу преимуществ overlapped I/O. Если у меня и так все длительные операции в отдельных потоках и у пользователя ГУИ не тормозит, зачем он может быть нужен?
Overlapped I/O нужна для того чтобы НЕ использовать потоки. Это древняя технология, появившаяся ещё до многопоточности.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39762415
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home, почитай про "Порт завершения ввода/вывода" IO Completion Port
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39762434
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovFlying-homeИ еще я пока не вижу преимуществ overlapped I/O. Если у меня и так все длительные операции в отдельных потоках и у пользователя ГУИ не тормозит, зачем он может быть нужен?
Overlapped I/O нужна для того чтобы НЕ использовать потоки. Это древняя технология, появившаяся ещё до многопоточности.да вроде одинаково они появились, иначе было просто нельзя мультимедиа и прочее фоновое поддерживать
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39763487
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЭту тему можно переносить в Windows.
Windows - подраздел "Администрирования".
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39763492
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разные тонкости:

При чтении файла открытого с флагом FILE_FLAG_NO_BUFFERING параметр nNumberOfBytesToRead всегда надо указывать кратным размеру сектора. Даже в конце файла, когда известно, что прочитано будет меньше.


Возникло ощущение, что VirtualAlloc с флагом PAGE_NOCACHE замедляет работу. Пока еще не придумал, как поточнее замерить потери. А в какой момент винда решает, что страницы можно начинать кэшировать? Если со страницами постоянно идет работа, она подождет?

Модератор: Тема перенесена из форума "Программирование".
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39766869
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще одна проблемка всплыла.
Как узнать размер кластера на дисках:
1. каталоги которых подключены через хардлинк.
2. которые монтированы как NTFS папки других дисков.

Функции GetDiskFreeSpace надо указывать корень диска да и сомнительная она, функции GetDiskFreeSpaceEx можно указывать каталог, но она не не показывает размер кластера.

Открывать диск функцией CreateFile не хочется, надо повышать права.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39766901
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри fsutil
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39766990
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПосмотри fsutil

Ее может не быть на клиентском компе.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39766995
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeЕще одна проблемка всплыла.
Как узнать размер кластера на дисках:
1. каталоги которых подключены через хардлинк.
2. которые монтированы как NTFS папки других дисков.

Функции GetDiskFreeSpace надо указывать корень диска да и сомнительная она, функции GetDiskFreeSpaceEx можно указывать каталог, но она не не показывает размер кластера.

Открывать диск функцией CreateFile не хочется, надо повышать права.1. хардлинк может быть только на этот же том

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

Ее может не быть на клиентском компе.
Эта утилита использует API который тебе нужен. Типа fsutil fsinfo ntfsinfo [drive]
Или поищи сорцы или описание у Рихтера или Руссиновича. Полюбому они
должны были пройтись краями по этой теме.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39767045
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonFlying-homeпропущено...


Ее может не быть на клиентском компе.
Эта утилита использует API который тебе нужен. Типа fsutil fsinfo ntfsinfo [drive]
Или поищи сорцы или описание у Рихтера или Руссиновича. Полюбому они
должны были пройтись краями по этой теме.
Угу.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39767095
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)1. хардлинк может быть только на этот же том
Да. Я имел в виду junction points
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39767152
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если все делать правильно, то надо отказываться от GetDiskFreeSpace.
Использовать DeviceIoControl с операцией IOCTL_DISK_GET_DRIVE_GEOMETRY
Эта функция требует хэндл диска, открытого с помощью CreateFile, что в свою очередь требует повышения прав.

По поводу симлинков: наверное, придется проверять каждую папку в пути на то, не является ли она ссылкой, и если является, смотреть, куда она указывает.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39767171
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, можно обойтись меньшей кровью? Без повышения прав? Задачи-то простые.

1. Есть файл, доступный для чтения. Теоретически доступа к корню диска, на котором он расположен, может не быть. Диск может быть компакт-диском. Надо узнать размер кластера файловой системы диска.

2. Есть каталог, в который предстоит писать файлы. Права на запись в каталог есть. Доступа к корню диска может не быть. Опять же, надо узнать размер кластера.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39768622
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще вопрос всплыл.
Если флэшка отформатирована под exFAT с размером кластера 32 МБ (у меня такая есть, исключительно для больших файлов), на нее что, в принципе нельзя писать маленькими блоками? Она будет каждый кластер переписывать по несколько раз?
И с HDD, и с SSD аналогичный вопрос.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39769217
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeЕсли флэшка отформатирована под exFAT с размером кластера 32 МБ (у меня такая есть, исключительно для больших файлов), на нее что, в принципе нельзя писать маленькими блоками? Она будет каждый кластер переписывать по несколько раз?Вообще запись буферизуется. То есть, если кластер 1Кб, и если записать 1000 раз по одному байту, то будет записан один блок размером в 1Кб
Если же закрывать файл после записи каждого байта, то тут зависит от настроек кеширования ОС, может и 1000 раз переписать блок.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39769411
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если файл был открыт для записи с флагом FILE_FLAG_NO_BUFFERING?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39769476
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home,

а можно ещё и папку заместо файла открыть, если "постараться"
зачем банальности спрашивать
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39769938
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Flying-home,

а можно ещё и папку заместо файла открыть, если "постараться"
зачем банальности спрашивать
Я-то не знаю, что там в контроллере флэшки. Может, защита от дурака есть?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39769944
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще интересный момент:
Windows Server 2003, зеркало на контроллере LSI
Файл открывался для чтения с флагом FILE_FLAG_NO_BUFFERING, размер блока - 64 МБ
При попытке сделать первое чтение выскочила ошибка 1450 - недостаточно системных ресурсов для завершения операции.

Почитал про ошибку. Похоже, это связано не с сервером и не с контроллером, а с фрагментацией файла.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39769947
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homekealon(Ruslan)Flying-home,

а можно ещё и папку заместо файла открыть, если "постараться"
зачем банальности спрашивать
Я-то не знаю, что там в контроллере флэшки. Может, защита от дурака есть?
Кстати, если предположить, что при записи блоков в 16 МБ на флэшку с кластером в 32 МБ кластера будут переписываться по два раза, то мы должны будем получить падение скорости записи примерно в 2 раза. На практике я этого не вижу.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39770130
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeЕще интересный момент:
Windows Server 2003, зеркало на контроллере LSI
Файл открывался для чтения с флагом FILE_FLAG_NO_BUFFERING, размер блока - 64 МБ
При попытке сделать первое чтение выскочила ошибка 1450 - недостаточно системных ресурсов для завершения операции.

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

Внезапно обнаружил, что при прочих равных я проигрываю Тотал Коммандеру при копировании "на тот же диск" примерно 4% по скорости.
Искал причину два дня. Когда уже почти отчаялся, вспомнил, что ТС не устанавливает размер файла сразу, а копирует как есть, размер файла растет по мере записи в него. А у меня эта фича стояла по умолчанию. Убрал ее и сразу вышел в ноль.

В общем: при безбуферной записи установка конечного размера файла при его создании может навредить.
Не исключено, что в моем конкретном случае это связано с последовательными чтениями и записями на одном диске.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39774975
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще одна странность, присущая, как мне кажется, Windows 7.

Если выделять память под блоки с флагом NO_CACHE (В MSDN сказано, конечно, что этот флаг не надо без нужды использовать, но другого способа предотвратить сбрасывание страниц в своп я пока не вижу), скорость копирования падает с 58 МБ/c до 32 МБ/с. Почти в два раза. Это при безбуферном чтении и безбуферной записи.

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

1.

Лет десяток назад когда я активно качал торрентами я заметил что файловая система достаточно интеллектуальна
в части аллокации дискового файла. Грубо говоря созданный пустой файл с нулями при перемотке seek хоть на терабайт вперед
не аллоцирует места (sparse file). После этого я стал пристально изучать возможности NTFS, XFS, ZFS и потерял веру в человечество
и файловый API. Сюда-же идут и буфера записи. Вобщем если кто-то хочет бенчмаркать диск, флешки, SD карты то нужно сказать всем файловым
системам - "идите на йух". Нужно подключать сырое устройство без всякой разметки. И мерять его самым низкоуровневым
API которое только доступно. В этом случае мы замеряем реальную скорость записи информации.

2.

Одна из моих флешек 64G определенно буферизирует трафик. Причем этот эффект заметен как на Windows так и на Linux.
СНачала копирования - высокая скорость. Потом - падает чуть ли не до нуля. А потом поднимается на 10% и так и копирует
до конца. Бенчмаркал через $ dd (disk duplicate)

Другая старенькая на 8G. Копирует всегда медленно но стабильно.

3.

Флешки - микрокомьютеры с контроллерами внутри. Не просто плоская память. И мы не знаем как они работают
и какие делают оптимизации для сбережения ресурса памяти по записи. Отсюда вобщем-то непрогнозируемая
скорость записи. Можем в среднем прикинуть. Но не дать гарантий.
зависит от разных внутренних состояний.

Флешки
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39775004
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНесколько наблюдений.

1.

Лет десяток назад когда я активно качал торрентами я заметил что файловая система достаточно интеллектуальна
в части аллокации дискового файла. Грубо говоря созданный пустой файл с нулями при перемотке seek хоть на терабайт вперед
не аллоцирует места (sparse file). После этого я стал пристально изучать возможности NTFS, XFS, ZFS и потерял веру в человечество
и файловый API. Сюда-же идут и буфера записи. Вобщем если кто-то хочет бенчмаркать диск, флешки, SD карты то нужно сказать всем файловым
системам - "идите на йух". Нужно подключать сырое устройство без всякой разметки. И мерять его самым низкоуровневым
API которое только доступно. В этом случае мы замеряем реальную скорость записи информации.

2.

Одна из моих флешек 64G определенно буферизирует трафик. Причем этот эффект заметен как на Windows так и на Linux.
СНачала копирования - высокая скорость. Потом - падает чуть ли не до нуля. А потом поднимается на 10% и так и копирует
до конца. Бенчмаркал через $ dd (disk duplicate)

Другая старенькая на 8G. Копирует всегда медленно но стабильно.

3.

Флешки - микрокомьютеры с контроллерами внутри. Не просто плоская память. И мы не знаем как они работают
и какие делают оптимизации для сбережения ресурса памяти по записи. Отсюда вобщем-то непрогнозируемая
скорость записи. Можем в среднем прикинуть. Но не дать гарантий.
зависит от разных внутренних состояний.

Флешки
Да. Интересно было бы ту твою большую флэшку потестить насчет FILE_FLAG_NO_BUFFERING. У меня сейчас две 32-гиговые, не знаю, насколько умные, при записи на них стабильно выигрывается 5-10% безбуферной записью. И скорость записи не плавает.

Еще я заметил по копированию из сети (запись на локальный диск безбуферная, чтение - с буферизацией Виндовс): Первые 8 гигов копируются с быстро, почти 70 МБ/с, потом скорость падает до 30 МБ/с. Вот как такое может быть? Файл-сервер - 2003 сервак, клиент - семерка. 8 гигов, Карл! На 8 гигах кто-то из них решает, что хватит буферизировать?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39777645
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через два месяца мучений я понял, что эту работу нельзя закончить. Только прекратить.
Сделаю копировалку, чтобы можно было прикрутить к Тоталкоммандеру, может, интеграцию в проводник, внедрю в проект, ради которого все затевалось, и пока все.

На десятке пока не было возможности детально все потестить, но, похоже, ее проводник умеет довольно быстро копировать. С ней еще придется посоревноваться. У семерки я выигрываю от 30 до 50 процентов.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39777670
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня появилась новая noname флешка на 8Г. Можно потестить. На корпусе толком надписей нету. Большие буквы "SP" и размер.
Более современная. Надо полагать быстрее чем другие.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
$ lsusb
....
Bus 001 Device 007: ID 8644:8005 Intenso GmbG

$ hdparm /dev/sdb1

/dev/sdb1:
SG_IO: bad/missing sense data, sb[]:  70 00 05 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 multcount     =  0 (off)
 readonly      =  0 (off)
 readahead     = 256 (on)
 geometry      = 1023/247/62, sectors = 15669216, start = 32

$ mount 
.....
/dev/sdb1 on /media/mayton/0012-D687 type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)



Попробуем сгенерировать 1 Гб случайного шума и записать на нее.

Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
$ head -c 1G < /dev/urandom > /centos/random-1g.dat

$ rsync -av --progress /centos/random-1g.dat .
sending incremental file list
random-1g.dat
  1,073,741,824 100%    6.35MB/s    0:02:41 (xfr#1, to-chk=0/1)
rsync: chown "/media/mayton/0012-D687/.random-1g.dat.asQqsm" failed: Operation not permitted (1)

sent 1,074,004,060 bytes  received 136 bytes  4,805,387.90 bytes/sec
total size is 1,073,741,824  speedup is 1.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1196) [sender=3.1.2]



Ситуация в динамике - такая-же как и в 64Гб флешке. Первые несколько секунд - скорость 70 Мб в сек. И потом
падает до 5Мб и до конца идет так.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39777725
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeЦель - максимальная скорость.Если речь идёт только о флеше, то кроме высокоуровневых вещей нужно не забыть и низкоуровневые:
Форматирование флешевых накопителей с выравниванием кластера на границу блока
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39783069
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknown,

Спасибо. Чем дальше в лес, тем больше дров.

2all

Хотите посмеяться? Я на новогодних праздниках написал простенькую прогу, которой в лучшем случае будут пользоваться пара тысяч старых пердунов из Канады и Новой Зеландии. Так вот, когда я ее написал, и решил приступить к написанию справки, я подумал: "Надо бы сделать и свое копирование файликов. Граничные условия узкие, должно получиться хорошее ускорение по сравнению с виндовыми операциями. Пусть старики порадуются."

Так вот я уже два месяца занимаюсь этим копированием, и конца этому не видно. Я уже не знаю, на чем остановиться.

Не, я продвинулся в мультипоточном программировании, разобрался с абстрактными методами, это хорошо. Но хотелось бы видеть горизонт, за которым этот проект можно будет остановить в приемлемом виде.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39783076
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСитуация в динамике - такая-же как и в 64Гб флешке. Первые несколько секунд - скорость 70 Мб в сек. И потом
падает до 5Мб и до конца идет так.
А можно посчитать, сколько байт уходит на флэшку за эти "несколько секунд"? А в доке по флэшке есть информация о буфере? А может это буфер оси? Я стараюсь где можно отказываться от чужой буферизации.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39783081
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это я работал поверх файловой системы.

Сегодня приду домой попробую на уровень "block device". Там буфера ОС точно нелетают.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39784458
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Несколько наблюдений по чтению из сети.

Получатель - новый диск на 64-битной семерке (локальный), скорость записи значительно превышает скорость чтения.
Сетка - гигабит через убиквити едж свитч.
Источник - тот же самый 2003 сервак с зеркалом на LSI контроллере.
копируется группа из 8 файлов от 24 МБ до 3 ГБ. Общий размер - 8 ГБ.

Изначально, при курении MSDN я пришел к следующему выводу: флаги (используемые при открытии файла на чтение) FILE_FLAG_NO_BUFFERING и FILE_FLAG_SEQUENTIAL_SCAN взаимно исключающие. То есть, даже если их указать вместе, работать будет только один из них. Вывод логичный, поскольку один флаг полностью отменяет буферизацию, а второй - управляет ею. Увидел в интернетах, что кто-то использует их вместе, решил поэкспериментировать. Мало ли, если винда по каким-то причинам не может применить один флаг, она попытается применить другой? Нет.

FILE_FLAG_SEQUENTIAL_SCAN - скорость 100 МБ в сек, размер блока большого значения не имеет. Лучшие значения - 8 и 16 МБ.

FILE_FLAG_NO_BUFFERING - скорость от 50 до 60 МБ в сек.

FILE_FLAG_NO_BUFFERING и FILE_FLAG_SEQUENTIAL_SCAN - скорость от 50 до 60 МБ в сек.

FILE_ATTRIBUTE_NORMAL без всякой оптимизации - 100 МБ в сек. Проигрывает FILE_FLAG_SEQUENTIAL_SCAN буквально на два процента и то не факт. Статистики мало.

Отсюда выводы:

1. FILE_FLAG_NO_BUFFERING по локалке может навредить почти в два раза.

2. Не надо надеяться на винду и подсовывать ей все возможные варианты оптимизации. Надо самому убедиться, что ты читаешь из сети и применять FILE_FLAG_SEQUENTIAL_SCAN, он по крайней мере не помешает.

Еще одно замечание. Если в группу файлов включить файл 25 ГБ, скорость падает до 30-40 МБ в сек. Никакие флаги не помогают. Кто тут больше виноват, Microsoft или LSI, пока не ясно.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39784597
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А при чтении с 2008 сервера все лучше.
FILE_FLAG_NO_BUFFERING дает прирост в 4%.
проблем с файлами больше 4 ГБ не наблюдается.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39784602
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не забывай про чистое время копирования + отмонтирование флешки.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39784603
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Было бы неплохо узнать, какие флаги были реально применены виндой при создании файла.
Типа, говоришь ей: FILE_FLAG_NO_BUFFERING, а она тебе в ответ: "Нифига, попробуй другой вариант".
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39784609
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНе забывай про чистое время копирования + отмонтирование флешки.
Да я помню. Это все также связано с буферизацией. Даже провел опыт, когда под рукой был ноут с десяткой. Скопировал файлы своей прогой, будучи уверен, что буферизация отключена. Потом скопировал файлы виндовым проводником и выдернул флэшку сразу после завершения операции. Все файлы на флэшке оказались целыми. Значит, десятка при копировании на флэшку буферизацию не использует. Скорее всего.
Да, и по скорости я ничего не выиграл.

Когда файлов много, к чистому времени копирования еще прибавляется время, затраченное на расчет общего размера с "кластерными хвостами". И еще надо тратить время на расчет так называемых "секторных хвостов" для безбуферных операций.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39786367
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А кто-нибудь видел своими глазами скорость копирования по сети 100 мегабайт в секунду?
Я вчера увидел и немного офигел. Правда, до этого я и не задавался этими вопросами.
Это 0.8 гигабита в секунду, близко к пропускной способности гигабитной сетки. А может, и на пределе. Сколько там служебных байт надо самбе для передачи файла?
ЗЫ размер блока - 32 МБ.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39786377
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeА кто-нибудь видел своими глазами скорость копирования по сети 100 мегабайт в секунду?
Почти 100
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #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
Оптимальный размер блока при записи файла на флэшку
    #39787856
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonFlying-homeЭто потому что создание файла в файловой системе занимает больше времени, чем запись в него. Так же при создании файла головки винчестера делают лишние телодвижения для работы с MFT.
Я добавлю что в старых файловых системах (FAT32 для дискет и флешек) каталог с файлами
представляет собой несортированный список. И когда количество файлов превышает за тыщу
вы испытываете ощутимый тормоз при добавлении нового файла.

Если отформатировать флешку на ExFat или NTFS тогда этот эффект нивелируется но возможно
будут новые более сложные эффекты которые не всегда можно спрогнозировать. В целом
MS рекомендует делать ExFat и я-бы сказал что глупо спорить. Есть табличка.
http://www.ntfs.com/ntfs_vs_fat.htm где можно почитать про некоторые сравнительные фичи.

Был промежуток времени, когда я не знал о существовании ExFat, а хранить большие файлы на флэшках уже надо было. Форматировал в NTFS, обманывая винду (отключая кэширование в свойствах съемного накопителя и форматируя из командной строки).
А потом узнал про ExFat далеко-далеко от цивилизации, в лесу, с Экспишкой на ноуте. Надо было срочно скопировать данные с карточки на диск. А Экспишка просто так ExFat не понимает. Я вышел из положения. На ноуте стояла RStudio, которая понимала ExFat.
:)

NTFS для флэшек не менее жесток, чем FAT32. Там куча операций с MFT, а она хранится в одном месте.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39787946
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У этой ТераКопи совершенно непродуманный ГУИ. Надо внедряться в контекстное меню проводника и добавлять меню вставки файлов рядом со стандартной вставкой. Типа "Вставить используя ТераКопи". А дальше анализировать содержимое буфера обмена и запускать процесс копирования. Я себе именно так и сделаю.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39789397
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще два наблюдения:

Собирать статистику скорости копирования в зависимости от параметров надо аккуратно и осмотрительно: например, копировать всегда в одно и тоже место диска.
Вчера сливал все скачанные с торрентов киношки с нескольких дисков на один терабайтник. В начале скорость была 138 МБ/с, запись обгоняла чтение. В конце скорость снизилась до 85 МБ/с, чтение стало обгонять запись.
Терабайтник одноблиновый, так что все понятно.

Для чтения с компакт или DVD диска файлы надо читать в том порядке, в котором они записаны на диск. Как это сделать? Как получить полный список файлов на диске, отсортированный в нужном порядке? И сколько времени займет получение этого списка? А если файлов много, а пользователь копирует только часть из них?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39789460
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeДля чтения с компакт или DVD диска файлы надо читать в том порядке, в котором они записаны на диск. Как это сделать? Как получить полный список файлов на диске, отсортированный в нужном порядке? И сколько времени займет получение этого списка? А если файлов много, а пользователь копирует только часть из них?
Какой у нас есть Api для DVD? Это тот-же самый файловый итератор findfirst/findnext для unix, FindFirstFile/FindNextFile для Windows.
И я не очень понимаю о какой сортировке идет речь. Предполагаю что в том порядке как выдает итератор так и надо
обрабатывать. Optimal way.

Альтернативный API - это копировать образ диска. Но это КМК другая задача.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39789490
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeЕще два наблюдения:

Собирать статистику скорости копирования в зависимости от параметров надо аккуратно и осмотрительно: например, копировать всегда в одно и тоже место диска.
Вчера сливал все скачанные с торрентов киношки с нескольких дисков на один терабайтник. В начале скорость была 138 МБ/с, запись обгоняла чтение. В конце скорость снизилась до 85 МБ/с, чтение стало обгонять запись.
Терабайтник одноблиновый, так что все понятно.
Да. Лет 10 назад была такая утилитка. HDTune. И она графиками подтверждает этот факт.

...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790226
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknownFlying-homeЦель - максимальная скорость.Если речь идёт только о флеше, то кроме высокоуровневых вещей нужно не забыть и низкоуровневые:
Форматирование флешевых накопителей с выравниванием кластера на границу блока
Помучил эту тему. Более-менее вменяемый мануал нашел аж на 56 странице.

Есть две флэшки, на которые каждый день записываются большие файлы общим объемом 30 ГБ.
Одна была отформатирована ExFAT с размером кластера 8 МБ (файлы-то большие, чего мелочиться)
Вторая - ExFAT с размером кластера 32 МБ.
Средняя скорость записи на обе флэшки - 22.8 МБ/с на одном компе и 23.2 МБ/c на другом. Думаю, разница в USB контроллерах. Запись безбуферная, блоками по 8 - 32 МБ.

Взял одну, проверил по предложенной методике. Обнаружил смещение, повозился с BOOTICE, избавился от смещения, отформатировал в ExFAT с размером кластера 32 КБ. Окончательный тест DFB показал скорость записи не меньше 56 МБ/с.
Чем и как ни пробовал, реальная скорость записи осталась прежней, 23 МБ/с.
Виндой, ТоталКоммандером, своей прогой с разными параметрами.

Интересно, как у DFB организована запись? Где он взял такие цифры?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790231
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИ я не очень понимаю о какой сортировке идет речь
Ну как, на компакт-диске всего одна дорожка. Для оптимального чтения надо сделать так, чтобы каретка с лазером двигалась вдоль дорожки и делала минимум переходов туда-сюда. А FindFirst/FindNext в каком порядке нам список файлов даст?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790237
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homemaytonИ я не очень понимаю о какой сортировке идет речь
Ну как, на компакт-диске всего одна дорожка. Для оптимального чтения надо сделать так, чтобы каретка с лазером двигалась вдоль дорожки и делала минимум переходов туда-сюда. А FindFirst/FindNext в каком порядке нам список файлов даст?
Я понимаю откуда идёт твой вопрос.

Надо почитать устройство компакт-диска. Стандарт DVD/BlueRay. Я думаю - закопаешся на пару месяцев.
Вангую что не будет практической пользы от ответа который ты найдешь.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790239
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeнадо сделать так, чтобы каретка с лазером двигалась вдоль дорожки и делала минимум переходов туда-сюда
А для этого надо читать файлы в том порядке, в котором они находятся на этой самой дорожке.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790242
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonFlying-homeпропущено...

Ну как, на компакт-диске всего одна дорожка. Для оптимального чтения надо сделать так, чтобы каретка с лазером двигалась вдоль дорожки и делала минимум переходов туда-сюда. А FindFirst/FindNext в каком порядке нам список файлов даст?
Я понимаю откуда идёт твой вопрос.

Надо почитать устройство компакт-диска. Стандарт DVD/BlueRay. Я думаю - закопаешся на пару месяцев.
Вангую что не будет практической пользы от ответа который ты найдешь.
Да уж. Перфекционизм он такой.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790264
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из далеких двухтысячных. Я помню что копирование CD на 700 мб. занимало много времени
когда в диске было дохрена мелких файлов. Спасали утилиты типа DaemonTools e.t.c.
Они позволяли копировать образ диска.

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

Очень сомнительно что ты создашь системную утилиту копирования дисков. Это
поле уже испахано. А даже если и создашь то никто за нее не заплатит. Вообще..
кто платит за разработку системного софта?

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

Помучил эту тему. Более-менее вменяемый мануал нашел аж на 56 странице.

Есть две флэшки, на которые каждый день записываются большие файлы общим объемом 30 ГБ.
Одна была отформатирована ExFAT с размером кластера 8 МБ (файлы-то большие, чего мелочиться)
Вторая - ExFAT с размером кластера 32 МБ.
Средняя скорость записи на обе флэшки - 22.8 МБ/с на одном компе и 23.2 МБ/c на другом. Думаю, разница в USB контроллерах. Запись безбуферная, блоками по 8 - 32 МБ.

Взял одну, проверил по предложенной методике. Обнаружил смещение, повозился с BOOTICE, избавился от смещения, отформатировал в ExFAT с размером кластера 32 КБ. Окончательный тест DFB показал скорость записи не меньше 56 МБ/с.
Чем и как ни пробовал, реальная скорость записи осталась прежней, 23 МБ/с.
Виндой, ТоталКоммандером, своей прогой с разными параметрами.

Интересно, как у DFB организована запись? Где он взял такие цифры?
Кажется, я понял. Я упираюсь в пропускную способность USB контроллера. А у DFB блоки, которыми он тестирует запись, настолько маленькие, и их так мало, что... Непонятно что.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790267
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИз далеких двухтысячных. Я помню что копирование CD на 700 мб. занимало много времени
когда в диске было дохрена мелких файлов. Спасали утилиты типа DaemonTools e.t.c.
Они позволяли копировать образ диска.

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

Очень сомнительно что ты создашь системную утилиту копирования дисков. Это
поле уже испахано. А даже если и создашь то никто за нее не заплатит. Вообще..
кто платит за разработку системного софта?

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

1. Уменьши блок до 32-64 Кб.
2. Замерь скорость встроенных средств: CopyFile() CopyFileEx()
Должен извиниться, ты кое в чем прав. В природе существуют диски, которым нравится, когда с них читают маленькими блоками. На моем "стенде" уменьшение блока вплоть до 256 КБ дает стабильный прирост скорости. Дальше уменьшать блок нет смысла, потому что начнут играть роль мои собственные накладные расходы.
Но только на одном винчестере. Не исключено, что 32-64 КБ - для него будет оптимальным размером.
Но ПОЧЕМУ???
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790577
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeDima Tпропущено...

ИМХО большим блоком ты мешаешь каким-то фоновым оптимизациям внутри ОС. Например упреждающее чтение: прочитав маленький блок, пока ты пишешь - ОС готовит тебе следующий блок, а при большом блоке ты тупо ждешь пока ОС тебе его прочитает.
При записи тоже есть нечто подобное.

1. Уменьши блок до 32-64 Кб.
2. Замерь скорость встроенных средств: CopyFile() CopyFileEx()
Должен извиниться, ты кое в чем прав. В природе существуют диски, которым нравится, когда с них читают маленькими блоками. На моем "стенде" уменьшение блока вплоть до 256 КБ дает стабильный прирост скорости. Дальше уменьшать блок нет смысла, потому что начнут играть роль мои собственные накладные расходы.
Но только на одном винчестере. Не исключено, что 32-64 КБ - для него будет оптимальным размером.
Но ПОЧЕМУ???
То что ты называешь винчестером - это технологический стек. Который состоит из цепочки
последовательно соединенных устройств. И выбрать для них оптимальный режим работы - большое исскусство есть.
Я даже думаю что задача твоя немного бесконечна и нерешаема. Как раз из-за разнообразия техники.
Главный поинт - блочное копирование параллельно через разделяемую память для процесса чтения и записи
ты вроде-бы уже сделал. Молодец. Дальнейшее улучшене - это подбор или "угадывание" оптимального размера
блока. +Кластер файловой системы. Для Windows NTFS к примеру есть формула (или табличка) где размер диска примерно
линейно связан с размером выбираемого кластера (автоматически) при форматировании. Грубо говоря - мелкие
диски получат мелкий кластер. А 10Терабайтник получит побольше.

Самое сложное в твоих экспериментах - это зафикировать начальные условия. И отделить мух от котлет. Тоесть
понять какие технологические аспекты влияют (антивирус или параллельно работающий индексатор файлов от Windows)
на скорость а какие не влияют никак.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790580
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже вот она

https://support.microsoft.com/en-us/help/140365/default-cluster-size-for-ntfs-fat-and-exfat

Насчет 4Кб на Ntfs5 я-бы поспорил. Я точно помню что форматировал в 2000х диски (толстого на тот
момент) размера 1-2 Гб и получал уже 8К кластер... ну да ладно. Пока приму как рекомендацию.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790611
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМолодец.
Дык. Кто бы сомневался.

maytonКластер файловой системы. Для Windows NTFS к примеру есть формула (или табличка) где размер диска примерно
линейно связан с размером выбираемого кластера (автоматически) при форматировании. Грубо говоря - мелкие
диски получат мелкий кластер. А 10Терабайтник получит побольше.

Тут такой интересный момент... Для чтения и записи размер кластера не имеет никакого значения. Кластер - это атом хранения, а не операции.
Если операции безбуферные, то имеет значение только физический размер сектора, нельзя выбирать размер блока меньше его, или некратным ему. Можно, например, смело писать блоками по 1 МБ на раздел, отформатированный с размером кластера 4 МБ.
Если операции используют файловый буфер виндовс, то тогда вообще можно забыть про кластеры и сектора, все за тебя сделает винда.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790615
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeВ природе существуют диски, которым нравится, когда с них читают маленькими блоками.
Вот, даже диаграммку нарисовал.

Желтеньким - читались фотографии от 160 КБ до 12 МБ с винта 1

Дальше читались три большие файла общим размером 4,5 ГБ

Синеньким - с винта 1
Розовым - с винта 2

Винт 2 - старая 320-ка Сигейт.
Ну и как работать с таким непредсказуемым материалом?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790618
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homemaytonМолодец.
Дык. Кто бы сомневался.

maytonКластер файловой системы. Для Windows NTFS к примеру есть формула (или табличка) где размер диска примерно
линейно связан с размером выбираемого кластера (автоматически) при форматировании. Грубо говоря - мелкие
диски получат мелкий кластер. А 10Терабайтник получит побольше.

Тут такой интересный момент... Для чтения и записи размер кластера не имеет никакого значения. Кластер - это атом хранения, а не операции.
Если операции безбуферные, то имеет значение только физический размер сектора, нельзя выбирать размер блока меньше его, или некратным ему. Можно, например, смело писать блоками по 1 МБ на раздел, отформатированный с размером кластера 4 МБ.
Если операции используют файловый буфер виндовс, то тогда вообще можно забыть про кластеры и сектора, все за тебя сделает винда.
Да. Но когда ты делаешь copy/move/delete дерева каталогов в NTFS - работают механизмы аллокации дисковой
памяти для тела файла и для структуры каталога. И в этот момент размер кластера важен. Это единца аллокации.
И это влияет на performance.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790629
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДа. Но когда ты делаешь copy/move/delete дерева каталогов в NTFS - работают механизмы аллокации дисковой
памяти для тела файла и для структуры каталога. И в этот момент размер кластера важен. Это единца аллокации.
И это влияет на performance.
Можно помедленней поподробнее?
Я концентрируюсь на двух операциях: чтение и запись. Преимущественно над большими файлами. С файлами размером, скажем, от 512 КБ тоже приходится возиться. Создание каталогов для меня - неизбежный накладной расход, который пока игнорируется.
Цель у меня - максимально сократить время между открытием файла на чтение и закрытием его и созданием файла для записи в него и закрытием его. Каким образом процитированное может влиять на сабжект?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790631
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Механизм аллокации каждого нового файла действует у меня просто: при создании файла ему сразу устанавливается размер - размер файла плюс его секторный хвост.
Секторный - потому что этого требует операция безбуферной записи. А с последним кластером файловая система сама как-нибудь разберется, ей достаточно пометить весь кластер как занятый.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790647
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прогнал на другом винчестере серию тестов на чтение с маленькими файлами.
Все так, как я рассуждаю здесь 21835484 . Чем больше блок, тем выше скорость.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790648
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeПрогнал на другом винчестере серию тестов на чтение с маленькими файлами.
Все так, как я рассуждаю здесь 21835484 . Чем больше блок, тем выше скорость.
В смысле, желтенькая линия с картинки не убывает, а растет.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790653
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeПрогнал на другом винчестере серию тестов на чтение с маленькими файлами.
Все так, как я рассуждаю здесь 21835484 . Чем больше блок, тем выше скорость.
Я немного запутался. Ты уже перешел с флешек на жесткие диски?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790758
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonFlying-homeПрогнал на другом винчестере серию тестов на чтение с маленькими файлами.
Все так, как я рассуждаю здесь 21835484 . Чем больше блок, тем выше скорость.
Я немного запутался. Ты уже перешел с флешек на жесткие диски?
Неожиданно для себя расширил область интересов.

С флэшками мои изыски пока на таком уровне:
Если упираемся в пропускную способность USB контроллера, то ничего сделать нельзя. Если не упираемся, то скорость записи от размера блока почти не зависит, безбуферная запись рулит, но незначительно. Статистики мало. А насколько правильно отформатирована флэшка 21817015 - вопрос к владельцу флэшки.

Но если исходить из "Трех китов",
Я1. Быстро читать
2. Быстро писать
3. Не давать медленной операции простаивать.

То пункты 1 и 3 для изначально заявленной проблемы актуальны. Потому что пользователю может прийти в голову копировать на флэшку файлы с поцарапанного CD, с древнего IDE винта, скорость чтения которого может оказаться ниже скорости записи новой флэшки, с другой флэшки и разное другое. Так что вопрос быстрого чтения с винчестера вполне себе может обсуждаться.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790819
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С дисками еще посложнее. У них - нелинейных эффектов больше. Механика головок. И различные умные кеши.
Но самое главное - класс устройства. Старый IDE, который стоит на бабушкиных компах. SATA1/2/3.
Размер блинчика. 2.5 или 3.5. И скорость кручения. 5 тыщ. 7 тыщ. 12 тыщ (для серверных).
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790928
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonС дисками еще посложнее. У них - нелинейных эффектов больше. Механика головок. И различные умные кеши.
Но самое главное - класс устройства. Старый IDE, который стоит на бабушкиных компах. SATA1/2/3.
Размер блинчика. 2.5 или 3.5. И скорость кручения. 5 тыщ. 7 тыщ. 12 тыщ (для серверных).
Да я вот начинаю вникать и офигеваю.
Вот чтение с достаточно распространенного WD Black, 500 GB
Смешанные файлы. Фотки, Музыка, пара видео.
Прирост скорости на маленьких размерах блока - за счет маленьких файлов.
На больших - за счет больших файлов.

Предположу, что винчестер при поступлении на него большой очереди запросов на чтение маленькими блоками, оптимизирует порядок их выполнения и выигрывает на чтении фрагментированных файлов.

А с большими файлами есть еще один момент. У меня они, скорее всего фрагментированы минимально. Поэтому так заметен прирост скорости при чтении большими блоками. Где бы достать много больших фрагментированных файлов для опытов?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790931
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeПредположу, что винчестер при поступлении на него большой очереди запросов на чтение маленькими блоками, оптимизирует порядок их выполнения и выигрывает на чтении фрагментированных файлов.

Вот может это даст какое-то прояснение https://en.wikipedia.org/wiki/Native_Command_Queuing
Я тоже почитаю.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39790942
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, соврал. Это была старая 320-ка.
500-ка вот
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791078
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonFlying-homeПредположу, что винчестер при поступлении на него большой очереди запросов на чтение маленькими блоками, оптимизирует порядок их выполнения и выигрывает на чтении фрагментированных файлов.

Вот может это даст какое-то прояснение https://en.wikipedia.org/wiki/Native_Command_Queuing
Я тоже почитаю.
Очень похоже на правду, но.
Вот две ситуации:
1. Я отправляю на винт серию команд на чтение по 64 КБ
2. Я отправляю на винт одну команду на чтение 32 МБ

Почему мы должны думать, что во втором случае NCQ не работает?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791084
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homemaytonпропущено...

Вот может это даст какое-то прояснение https://en.wikipedia.org/wiki/Native_Command_Queuing
Я тоже почитаю.
Очень похоже на правду, но.
Вот две ситуации:
1. Я отправляю на винт серию команд на чтение по 64 КБ
2. Я отправляю на винт одну команду на чтение 32 МБ

Почему мы должны думать, что во втором случае NCQ не работает?
В смысле, кучу команд он оптимизирует (как следует из названия технологии), а одну большую команду оптимизировать не будет?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791142
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeFlying-homeпропущено...

Очень похоже на правду, но.
Вот две ситуации:
1. Я отправляю на винт серию команд на чтение по 64 КБ
2. Я отправляю на винт одну команду на чтение 32 МБ

Почему мы должны думать, что во втором случае NCQ не работает?
В смысле, кучу команд он оптимизирует (как следует из названия технологии), а одну большую команду оптимизировать не будет?
Смотри. В твоём кейсе (копирование большого толстого файла (БТФ)) я считаю что NCQ - бесполезен.
Его основное назначение - соптимизировать хаос команд которые летят на диск когда он под современной
операционкой с кучей фоновых задач бомбит бедный диск операциями (типичная ситуация - прогрев Windows-7
или старт антивируса или индексатора файлов). В этом случае без NCQ блок головок (БГ) будет двигатся хаотично
обслуживая сиюсекундные хотелки всех-всех запущенных процессов. Типичная картинка. Мощный проц. Много
памяти а ОС стартует 15 минут. В случае с NCQ (теоретически это все SATA-шники) движения БГ от рандомного
шума должны подойти к "лесенке вверх" и лесенке вниз (это идеал). В реальности скорее всего NCQ просто
сортирует команды в монотонном порядке cylinders и исполняет их следя за консистенстностью. Ну чтоб
запись не сбила чтение.

Тоесть копированию БТФ - пофиг на NCQ, но если параллельно с этим копированием периодически прилетают
шумящие команды от других процессов то NCQ полезен.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791151
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonFlying-homeпропущено...

В смысле, кучу команд он оптимизирует (как следует из названия технологии), а одну большую команду оптимизировать не будет?
Смотри. В твоём кейсе (копирование большого толстого файла (БТФ)) я считаю что NCQ - бесполезен.
Его основное назначение - соптимизировать хаос команд которые летят на диск когда он под современной
операционкой с кучей фоновых задач бомбит бедный диск операциями (типичная ситуация - прогрев Windows-7
или старт антивируса или индексатора файлов). В этом случае без NCQ блок головок (БГ) будет двигатся хаотично
обслуживая сиюсекундные хотелки всех-всех запущенных процессов. Типичная картинка. Мощный проц. Много
памяти а ОС стартует 15 минут. В случае с NCQ (теоретически это все SATA-шники) движения БГ от рандомного
шума должны подойти к "лесенке вверх" и лесенке вниз (это идеал). В реальности скорее всего NCQ просто
сортирует команды в монотонном порядке cylinders и исполняет их следя за консистенстностью. Ну чтоб
запись не сбила чтение.

Тоесть копированию БТФ - пофиг на NCQ, но если параллельно с этим копированием периодически прилетают
шумящие команды от других процессов то NCQ полезен.
Получается, надо разбить файлы на две группы, например, меньше 8 МБ и больше. Первую группу читать блоками по 64 КБ в надежде на NCQ, вторую - большими блоками в надежде на их нефрагментированность.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791156
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще из моих наблюдений на рэйдах этот NCQ то-ли не работает, то-ли работает как-то не так. С маленькими файлами прироста скорости с уменьшением блока нет. Но там вообще фиг разберешься, что оптимизирует винт, а что - рэйд-контроллер.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791158
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И по сабжу.
Сегодня держал в руках флэшку USB 2.0
На FILE_FLAG_NO_BUFFERING она вообще не реагирует, имеет на борту буфер в 8 МБ. При записи на нее больших файлов она просто принимала в буфер порцию, потом записывала его, как сама считала нужным. И так далее.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791163
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://habr.com/ru/post/95384/
В далеком 2010 году человек пытался собирать бенчмарки по флэшкам. Но видно, что-то пошло не так.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791166
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeИ по сабжу.
Сегодня держал в руках флэшку USB 2.0
Уже год не держал флэшку в руках. Отмирают они как дисководы. Сейчас проще через облака всякие перегнать данные, чем использовать флэшку.

Мне кажется ты занимаешься тюнингом паровоза в эпоху электромобилей.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791167
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homemaytonпропущено...

Смотри. В твоём кейсе (копирование большого толстого файла (БТФ)) я считаю что NCQ - бесполезен.
Его основное назначение - соптимизировать хаос команд которые летят на диск когда он под современной
операционкой с кучей фоновых задач бомбит бедный диск операциями (типичная ситуация - прогрев Windows-7
или старт антивируса или индексатора файлов). В этом случае без NCQ блок головок (БГ) будет двигатся хаотично
обслуживая сиюсекундные хотелки всех-всех запущенных процессов. Типичная картинка. Мощный проц. Много
памяти а ОС стартует 15 минут. В случае с NCQ (теоретически это все SATA-шники) движения БГ от рандомного
шума должны подойти к "лесенке вверх" и лесенке вниз (это идеал). В реальности скорее всего NCQ просто
сортирует команды в монотонном порядке cylinders и исполняет их следя за консистенстностью. Ну чтоб
запись не сбила чтение.

Тоесть копированию БТФ - пофиг на NCQ, но если параллельно с этим копированием периодически прилетают
шумящие команды от других процессов то NCQ полезен.
Получается, надо разбить файлы на две группы, например, меньше 8 МБ и больше. Первую группу читать блоками по 64 КБ в надежде на NCQ, вторую - большими блоками в надежде на их нефрагментированность.
Делить файлы на 2 категории - мысль здравая. Плюсую.

По поводу NCQ. Надо курить документацию по дискам и понять какой смысл вкладывается в NCQ-command. Если
это 1 сектор то это одно. Если это цепочка секторов - тогда надо думать по другому.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791170
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeЕще из моих наблюдений на рэйдах этот NCQ то-ли не работает, то-ли работает как-то не так. С маленькими файлами прироста скорости с уменьшением блока нет. Но там вообще фиг разберешься, что оптимизирует винт, а что - рэйд-контроллер.
Я-ж говорю. Сложное это дело. Если в стеке у нас еще и стоит к примеру RAID-контроллер в зеркале (это кажется режим десятка)
тогда у нас на чтение контроллер будет разбрасывать транзакции на 2 диска равномерно по их готовности.
Это вообще путает все карты! Мы уже тюним 3 устройства в стеке!
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791172
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeИ по сабжу.
Сегодня держал в руках флэшку USB 2.0
На FILE_FLAG_NO_BUFFERING она вообще не реагирует, имеет на борту буфер в 8 МБ. При записи на нее больших файлов она просто принимала в буфер порцию, потом записывала его, как сама считала нужным. И так далее.
Ты обращал внимание что когда втыкаешь новую флешку - то операционка ставит
для нее драйвер? Причем для каждого вендора флешки может быть новый драйвер.
Рискну предположить что флешка - это не просто матрица памяти. Ну... наше понимание
в этом вопросе будет поверхностным если мы флешку будем опускать на такой уровень.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791173
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TFlying-homeИ по сабжу.
Сегодня держал в руках флэшку USB 2.0
Уже год не держал флэшку в руках. Отмирают они как дисководы. Сейчас проще через облака всякие перегнать данные, чем использовать флэшку.

Мне кажется ты занимаешься тюнингом паровоза в эпоху электромобилей.
Через неделю я буду заниматься тюнингом своего нового AMD. В основном
в части дележа дисков. Куда чё положить. Короче дисковый пасьянс.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791179
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЧерез неделю я буду заниматься тюнингом своего нового AMD. В основном
в части дележа дисков. Куда чё положить. Короче дисковый пасьянс.
SSD там будет?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791181
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока нет. Куплю позже. Щас у меня идея фикс - собрать программное зеркало для хранения
домашних семейных фото-архивов. Почему зеркало? Да достало копии делать. Всё равно
забываешь. И что с..ка характерно. Все винты разного размера. Двушка. единичка. и 0.5 терабайт.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791188
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonFlying-homeЕще из моих наблюдений на рэйдах этот NCQ то-ли не работает, то-ли работает как-то не так. С маленькими файлами прироста скорости с уменьшением блока нет. Но там вообще фиг разберешься, что оптимизирует винт, а что - рэйд-контроллер.
Я-ж говорю. Сложное это дело. Если в стеке у нас еще и стоит к примеру RAID-контроллер в зеркале (это кажется режим десятка)
тогда у нас на чтение контроллер будет разбрасывать транзакции на 2 диска равномерно по их готовности.
Это вообще путает все карты! Мы уже тюним 3 устройства в стеке!
Да, кстати, надо будет поплотнее потестить это "разбрасывание". Кажется, при безбуферных операциях его нет.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791246
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПока нет. Куплю позже. Щас у меня идея фикс - собрать программное зеркало для хранения
домашних семейных фото-архивов. Почему зеркало? Да достало копии делать. Всё равно
забываешь. И что с..ка характерно. Все винты разного размера. Двушка. единичка. и 0.5 терабайт.

Ну вот, приехали :) Бекап и зеркало это - разные вещи. Оно не защитит ни от усер эррор, ни от шифровальщиков.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791263
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПока нет. Куплю позже. Щас у меня идея фикс - собрать программное зеркало для хранения
домашних семейных фото-архивов. Почему зеркало? Да достало копии делать. Всё равно
забываешь. И что с..ка характерно. Все винты разного размера. Двушка. единичка. и 0.5 терабайт.
SSD недорогие нынче, достаточно 240 Гб под системный диск. Комп летать будет.
Для бэкапа лучше роутер с HDD и туда сливать. А чтобы не забывать можно по заданию запускать батник, а в нем xcopy или robocopy только новых файлов.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791274
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проснулся и понял. Понял, что ничего не понятно.

Я не использую технологию IOCP, я читаю последовательно. При таком подходе NCQ не должно давать этого самого "эффекта маленьких файлов", при котором мелкие файлы читаются быстрее при маленьких размерах блока. Зато если задействовать IOCP... Интересно будет посмотреть на результаты.

В общем, вопрос остается открытым.
Сформулирую его еще раз:
При последовательном чтении больших файлов на безбуферных операциях наблюдается стабильный прирост скорости чтения с увеличением размера блока. Вплоть до 16 и 32 МБ.
При последовательном чтении сравнительно маленьких файлов (размером до 8 МБ) на SATA винчестерах наблюдается обратный эффект: скорость чтения растет с уменьшением блока вплоть до 132 КБ.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791293
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeВ общем, вопрос остается открытым.Попробуйте uni_ata . В нём есть какое-то логгирование . Вдруг, поможет.

Вопрос с количеством потоков- интересный. Неясно, как его решить в общем случае. На RAID или некоторых SSD это может ускорить, но определить конфигурацию в общем смысле, видимо- непросто.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791361
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic HuntermaytonПока нет. Куплю позже. Щас у меня идея фикс - собрать программное зеркало для хранения
домашних семейных фото-архивов. Почему зеркало? Да достало копии делать. Всё равно
забываешь. И что с..ка характерно. Все винты разного размера. Двушка. единичка. и 0.5 терабайт.

Ну вот, приехали :) Бекап и зеркало это - разные вещи. Оно не защитит ни от усер эррор, ни от шифровальщиков.
У меня узер один. Это я. И шифровать не буду. Кому нужны мои домашние фотки?
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791366
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonПока нет. Куплю позже. Щас у меня идея фикс - собрать программное зеркало для хранения
домашних семейных фото-архивов. Почему зеркало? Да достало копии делать. Всё равно
забываешь. И что с..ка характерно. Все винты разного размера. Двушка. единичка. и 0.5 терабайт.
SSD недорогие нынче, достаточно 240 Гб под системный диск. Комп летать будет.
Для бэкапа лучше роутер с HDD и туда сливать. А чтобы не забывать можно по заданию запускать батник, а в нем xcopy или robocopy только новых файлов.
xcopy только новых файлов это не метод. Это я уже проходил. Потом после восстановления
жена тебе скажет - "я же тебя просила удалить эту фотку где я - толстая/больная/или в
некрасивом платье"

Удаление и переименовывание файлов должно накатываться на бэкап именно так-же как
и транзакции в БД.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791402
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИ шифровать не буду. Кому нужны мои домашние фотки?
Он про вирусы шифровальщики.
maytonУдаление и переименовывание файлов должно накатываться на бэкап именно так-же как
и транзакции в БД.
xcopy плюс удалить в бэкапе то, чего нет в оригинале. Написать не сложно, скорее всего уже что-то готовое есть.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791418
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonИ шифровать не буду. Кому нужны мои домашние фотки?
Он про вирусы шифровальщики.
xcopy плюс удалить в бэкапе то, чего нет в оригинале. Написать не сложно, скорее всего уже что-то готовое есть.
Вирусы шифровальщики под Linux. Возможно. Надо погуглить.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791421
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Txcopy плюс удалить в бэкапе то, чего нет в оригинале. Написать не сложно, скорее всего уже что-то готовое есть.
Я буду искать коробочное решение. Надо посмотреть как работает rzync и lzop.
У них были богатые возможности по инкрементальному обновлению хранилищ.
...
Рейтинг: 0 / 0
Оптимальный размер блока при записи файла на флэшку
    #39791581
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonxcopy только новых файлов это не метод. Это я уже проходил. Потом после восстановления
жена тебе скажет - "я же тебя просила удалить эту фотку где я - толстая/больная/или в
некрасивом платье"
Видел прогу, которая делала правильные накопительные файловые бэкапы. Прямо как MS SQL.
Кажется, в винде есть такая фича.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Оптимальный размер блока при записи файла на флэшку
    #39950336
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще в топике не тестировали копирование на f2fs. Проведу серию экспериментов.
Копирование 1 толстого файла. И копирование пачки мелких.
...
Рейтинг: 0 / 0
155 сообщений из 155, показаны все 7 страниц
Форумы / Windows [игнор отключен] [закрыт для гостей] / Оптимальный размер блока при записи файла на флэшку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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