Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Windows Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3 4 5 6 7      [все]
 Оптимальный размер блока при записи файла на флэшку  [new]
Flying-home
Member

Откуда: nas.vrostove.net
Сообщений: 14782
Что-то слабо гуглится. Все, что нагулилось - в разбросе от 80 КБ до 2 МБ.
Кто-нибудь уже решал подобный вопрос? Что выбрать, если времени на тестирование нет? Или на что надо посмотреть перед копированием?

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

Речь идет о копировании файлов по 50 - 300 МБ количеством от 10 до 100. Цель - максимальная скорость.
6 янв 19, 20:32    [21779223]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
Dima T
Member

Откуда:
Сообщений: 13713
Поток сознания какой-то. Ты подумал так и так, сделал выводы, выжимки из них привел, ... а мы тут при чем?

Пытаюсь ванговать: писать лучше последовательно, т.к. канал один и распараллеливание будет тормозом.
6 янв 19, 20:43    [21779232]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
Flying-home
Member

Откуда: nas.vrostove.net
Сообщений: 14782
Dima T
Поток сознания какой-то. Ты подумал так и так, сделал выводы, выжимки из них привел, ... а мы тут при чем?

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


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

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

По потокам: понятно, что писать надо одним потоком. Я подумал, не попытаться ли сделать упреждающее чтение с помощью потоков. Наверное, его можно и по-другому сделать.
Зачем это делать: если блоки будут достаточно большими и делать все последовательно, то сразу после записи очередного блока будет возникать потеря времени на чтение следующего блока.
6 янв 19, 21:48    [21779253]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
Flying-home
Member

Откуда: nas.vrostove.net
Сообщений: 14782
Наверное, можно весь файл в оперативку загружать оттуда уже записывать.
6 янв 19, 21:52    [21779254]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
mayton
Member

Откуда: loopback
Сообщений: 41027
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 точно пишут. Обычно этот
класс и определяет предельную скорость. Если ты уперся в него то уже никакие многопоточки не помогу.
6 янв 19, 22:12    [21779261]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
Flying-home
Member

Откуда: nas.vrostove.net
Сообщений: 14782
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 точно пишут. Обычно этот
класс и определяет предельную скорость. Если ты уперся в него то уже никакие многопоточки не помогу.

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

В первом приближении это давно реализовано в Тотал коммандере. У него в настройках есть варианты копирования "по хорошему" и "как в проводнике".
7 янв 19, 05:33    [21779321]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
mayton
Member

Откуда: loopback
Сообщений: 41027
Ну за 10 экспериментов с разным размером блока ты можешь найти оптимальный.

А мы тебе чем тут поможем?
7 янв 19, 10:56    [21779339]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
Flying-home
Member

Откуда: nas.vrostove.net
Сообщений: 14782
mayton
Ну за 10 экспериментов с разным размером блока ты можешь найти оптимальный.

А мы тебе чем тут поможем?

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

Может, кто-то уже решал подобную задачу?
7 янв 19, 13:22    [21779377]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
mayton
Member

Откуда: loopback
Сообщений: 41027
Flying-home
mayton
Ну за 10 экспериментов с разным размером блока ты можешь найти оптимальный.

А мы тебе чем тут поможем?

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

Может, кто-то уже решал подобную задачу?

Покажи свой сорц.
7 янв 19, 13:24    [21779379]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
miksoft
Member

Откуда:
Сообщений: 37551
mayton
Ну за 10 экспериментов с разным размером блока ты можешь найти оптимальный.
Даже если этот оптимум существует (в чем я сомневаюсь), то это будет оптимум конкретной модели флешки. Для другой модели/ревизии/firmware он может быть другим.
7 янв 19, 13:57    [21779401]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
vikkiv
Member

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

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

с другой стороны - ставь USB 3.2 (ту которая 2x2 , т.е. 2.5 GB/sec) или 3.1 (1.25 GB/sec) и забудь об этих мелочах.
7 янв 19, 14:16    [21779410]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
mayton
Member

Откуда: loopback
Сообщений: 41027
С точки зрения бизнеса. Как звучит постановка. Если надо просто скопировать файл - то это фигня.
Потому что финал этой операции находится не здесь. А после отмонтирования флешки.

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

Тоесть мы имеем дело со сложным стеком технологий Операционка+софт+драйвер флешки
и просто так угадать какой нужен размер блока практически невозможно.
7 янв 19, 14:41    [21779420]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47674
Flying-home
Зачем это делать: если блоки будут достаточно большими и делать все последовательно, то сразу после записи очередного блока будет возникать потеря времени на чтение следующего блока.

Так это не зависит от размера блока. Используй overlapped I/O или читай и пиши разными потоками. Двух буферов по мегабайту хватит наверняка. Ну и экстремальные виды оптимизации типа FILE_FLAG_NO_BUFFERING (O_DIRECT) не забудь.
7 янв 19, 15:09    [21779449]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
Flying-home
Member

Откуда: nas.vrostove.net
Сообщений: 14782
Спасибо всем.

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

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

Думаю вот, насколько такие буферы применимы к флэшкам? Если у нее свободное пространство фрагментировано, что будет?
9 янв 19, 22:10    [21781065]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
Flying-home
Member

Откуда: nas.vrostove.net
Сообщений: 14782
Dimitry Sibiryakov
Flying-home
Зачем это делать: если блоки будут достаточно большими и делать все последовательно, то сразу после записи очередного блока будет возникать потеря времени на чтение следующего блока.

Так это не зависит от размера блока. Используй overlapped I/O или читай и пиши разными потоками. Двух буферов по мегабайту хватит наверняка. Ну и экстремальные виды оптимизации типа FILE_FLAG_NO_BUFFERING (O_DIRECT) не забудь.

Я пока думаю о двух потоках.
9 янв 19, 22:12    [21781067]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
mayton
Member

Откуда: loopback
Сообщений: 41027
Ну... сорцов мы не дождались. Так ште... good luck.
9 янв 19, 22:13    [21781068]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
Dima T
Member

Откуда:
Сообщений: 13713
Если речь о простом копировании файлов в виндовсе, то есть штатные средства CopyFile() и CopyFileEx()
10 янв 19, 07:22    [21781198]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47674
Flying-home
При копировании с одного сата-диска на другой по моей (пока недостаточной) статистике оптимальным представляется буфер 40 или 80 МБ.

Совершенно избыточны такие буфера. Скорость копирования перестаёт расти уже на 64 кб.
10 янв 19, 15:05    [21781714]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
Flying-home
Member

Откуда: nas.vrostove.net
Сообщений: 14782
mayton
Ну... сорцов мы не дождались. Так ште... good luck.

Дык, их еще просто нет. Я обычно сперва вопросы задаю, а потом уже что-то пишу.
ЗЫ А зачем тебе сорцы?
10 янв 19, 20:02    [21782144]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
mayton
Member

Откуда: loopback
Сообщений: 41027
Flying-home
mayton
Ну... сорцов мы не дождались. Так ште... good luck.

Дык, их еще просто нет. Я обычно сперва вопросы задаю, а потом уже что-то пишу.
ЗЫ А зачем тебе сорцы?

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

Читайте Джефа Рихтера. У него был пример быстрого копирования.
10 янв 19, 20:19    [21782155]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
Flying-home
Member

Откуда: nas.vrostove.net
Сообщений: 14782
Dimitry Sibiryakov
Flying-home
При копировании с одного сата-диска на другой по моей (пока недостаточной) статистике оптимальным представляется буфер 40 или 80 МБ.

Совершенно избыточны такие буфера. Скорость копирования перестаёт расти уже на 64 кб.

У меня на 40 МБ перестала расти. Может, у меня какой-то не общий случай, может с размерами файлов какая-то коллизия произошла, надо будет еще посмотреть.

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

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

К сообщению приложен файл (статистика.xls - 48Kb) cкачать
10 янв 19, 20:20    [21782156]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
Flying-home
Member

Откуда: nas.vrostove.net
Сообщений: 14782
mayton
Flying-home
пропущено...

Дык, их еще просто нет. Я обычно сперва вопросы задаю, а потом уже что-то пишу.
ЗЫ А зачем тебе сорцы?

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

Читайте Джефа Рихтера. У него был пример быстрого копирования.

Ну, я сейчас обдумываю именно алгоритм. Потому и зашел в общий топик. Если бы были вопросы по Дельфе, пошел бы туда.
10 янв 19, 20:24    [21782160]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
mayton
Member

Откуда: loopback
Сообщений: 41027
Flying-home
mayton
пропущено...

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

Читайте Джефа Рихтера. У него был пример быстрого копирования.

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

И какой у вас сейчас алгоритм?
10 янв 19, 20:25    [21782162]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
Flying-home
Member

Откуда: nas.vrostove.net
Сообщений: 14782
Во стыдоба...
Перепутал все, что можно было перепутать. Большее с меньшим, размеры буфера...
Праздники удались.
11 янв 19, 00:54    [21782336]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4819
Flying-home,

наверное надо прыгать от самой распространённой FS на флэш-накопителях: Fat32
вики
Размер кластера по умолчанию для файловой системы FAT32 составляет от 512 байт до 32 КБ в зависимости от размера тома и конкретной версии ОС[2].При использовании размера кластера, равного 32768 байт, максимальный размер тома составит чуть менее 8 ТБ[3]. Хотя размер сектора может быть любым, традиционно он считается равным 1 сектору диска и равен 512 байт и т.к. эта величина не менялась с момента создания — она может считаться некоторым ПО как константа.
11 янв 19, 12:39    [21782677]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47674
Flying-home
У меня на 40 МБ перестала расти. Может, у меня какой-то не общий случай, может с размерами файлов какая-то коллизия произошла, надо будет еще посмотреть.

С алгоритмом у тебя коллизия скорее всего произошла. На 40 мегабайтах разница по времени между логической записью в кэш и физическим обменом с флэшкой стала достаточной для того, чтобы следующий блок успел прочитаться с винта.
11 янв 19, 15:05    [21782916]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
Flying-home
Member

Откуда: nas.vrostove.net
Сообщений: 14782
Dimitry Sibiryakov
Flying-home
У меня на 40 МБ перестала расти. Может, у меня какой-то не общий случай, может с размерами файлов какая-то коллизия произошла, надо будет еще посмотреть.

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

Я еще до флэшки не дошел, пока только с сата винчестерами балуюсь. И до FILE_FLAG_NO_BUFFERING тоже еще не добрался. Рихтера уже начал читать. Очень доходчиво пишет, респект ему.

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

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

Пока еще у меня все сырое, но буду держать вас в курсе.
:)
20 янв 19, 14:22    [21789636]     Ответить | Цитировать Сообщить модератору
 Re: Оптимальный размер блока при записи файла на флэшку  [new]
Flying-home
Member

Откуда: nas.vrostove.net
Сообщений: 14782
Набросал тут мысли по поводу:

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

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

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

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

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

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

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


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

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

  • на одном физическом носителе
  • на разных носителях


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

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

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

  • файловые системы
  • размеры сектора
  • размеры кластера

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

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

    Ограничения операционной системы
    Еще не пробовал, но кажется, програмная попытка получить ответ на предыдущий вопрос под ограниченным в правах пользователем с включенным УАКом может потерпеть крах и / или испугать пользователя.
    Тоже самое с попыткой выяснить размер кластера и количество свободного места на диске (предполагаю)
  • 20 янв 19, 14:32    [21789639]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Забыл сказать, что при копировании двумя потоками у меня упреждающее чтение работает и между файлами.
    То есть, когда записывающий поток заканчивает с одним файлом, читающий уже начинает со следующим.
    20 янв 19, 14:46    [21789648]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    И еще я пока не вижу преимуществ overlapped I/O. Если у меня и так все длительные операции в отдельных потоках и у пользователя ГУИ не тормозит, зачем он может быть нужен?
    20 янв 19, 14:54    [21789652]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Leonid Kudryavtsev
    Member

    Откуда:
    Сообщений: 7700
    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 тут сильно лишнее.
    20 янв 19, 16:54    [21789723]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Leonid Kudryavtsev
    мне кажется 64 Mb тут сильно лишнее.

    А чем плохо? Только тем, что перед копированием надо узнать, сколько некэшируемой оперативки может выделить система приложению? Может, действительно, три блока по 64 МБ будет тяжело?


    Leonid Kudryavtsev
    Если у тебя 2-3 потока - то все нормально, а если 200-300 потоков, то тогда уже на переключении потоков будет overhead.

    У меня всего 2 потока. Зачем больше? Для упреждающего чтения достаточно количество блоков увеличить.
    20 янв 19, 18:36    [21789776]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    А, кстати.
    Рихтер пишет, что для выделения блоков использует VirtualAlloc, потому что так данные выравниваются в памяти правильно. А что, обычный GetMem не будет выравнивать?
    20 янв 19, 18:39    [21789778]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Flying-home
    на компакт, DVD диске

    Интерсно, как лучше с них читать? Думаю, с обычной буферизацией.

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

    А кто-нибудь сталкивался с подобной задачей? Последние Андроиды как правило, не дают системе нормально примонтировать свои носители. Но в проводнике они видны (не как диски) и копировать файлы туда-сюда все-таки можно.
    20 янв 19, 18:46    [21789780]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Что самое смешное, что большинству пользователей вся эта оптимизация нафиг не нужна.

    Я, например, много лет назад заглянул в настройки Тоталкоммандера, увидел там разные размеры блока для одного и двух дисков, сказал "Ого", оставил все как есть и больше эти настройки не открывал. А теперь я копирую быстрее него. Как мне кажется, у Джислера во всех случаях однопоточное копирование. По крайней мере в шестой версии.
    20 янв 19, 18:58    [21789785]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Эту тему можно переносить в Windows.
    20 янв 19, 21:35    [21789837]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Dimitry Sibiryakov
    Member

    Откуда:
    Сообщений: 47674
    Flying-home
    И еще я пока не вижу преимуществ overlapped I/O. Если у меня и так все длительные операции в отдельных потоках и у пользователя ГУИ не тормозит, зачем он может быть нужен?

    Overlapped I/O нужна для того чтобы НЕ использовать потоки. Это древняя технология, появившаяся ещё до многопоточности.
    21 янв 19, 15:13    [21790330]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13713
    Flying-home, почитай про "Порт завершения ввода/вывода" IO Completion Port
    21 янв 19, 15:32    [21790353]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    kealon(Ruslan)
    Member

    Откуда: Нижневартовск
    Сообщений: 4819
    Dimitry Sibiryakov
    Flying-home
    И еще я пока не вижу преимуществ overlapped I/O. Если у меня и так все длительные операции в отдельных потоках и у пользователя ГУИ не тормозит, зачем он может быть нужен?

    Overlapped I/O нужна для того чтобы НЕ использовать потоки. Это древняя технология, появившаяся ещё до многопоточности.
    да вроде одинаково они появились, иначе было просто нельзя мультимедиа и прочее фоновое поддерживать
    21 янв 19, 16:07    [21790386]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    mayton
    Эту тему можно переносить в Windows.

    Windows - подраздел "Администрирования".
    23 янв 19, 14:23    [21792161]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Разные тонкости:

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


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

    Модератор: Тема перенесена из форума "Программирование".
    23 янв 19, 14:26    [21792171]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Еще одна проблемка всплыла.
    Как узнать размер кластера на дисках:
    1. каталоги которых подключены через хардлинк.
    2. которые монтированы как NTFS папки других дисков.

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

    Открывать диск функцией CreateFile не хочется, надо повышать права.
    30 янв 19, 09:58    [21797474]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Посмотри fsutil
    30 янв 19, 10:49    [21797534]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    mayton
    Посмотри fsutil


    Ее может не быть на клиентском компе.
    30 янв 19, 13:05    [21797710]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    kealon(Ruslan)
    Member

    Откуда: Нижневартовск
    Сообщений: 4819
    Flying-home
    Еще одна проблемка всплыла.
    Как узнать размер кластера на дисках:
    1. каталоги которых подключены через хардлинк.
    2. которые монтированы как NTFS папки других дисков.

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

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

    2. это софтлинк, общего механизма нет, в общем случае драйвер может послать куда угодно взять данные откуда угодно, даже виртуальные файлы "придумать"
    30 янв 19, 13:11    [21797715]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Flying-home
    mayton
    Посмотри fsutil


    Ее может не быть на клиентском компе.

    Эта утилита использует API который тебе нужен. Типа fsutil fsinfo ntfsinfo [drive]
    Или поищи сорцы или описание у Рихтера или Руссиновича. Полюбому они
    должны были пройтись краями по этой теме.
    30 янв 19, 14:11    [21797780]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    mayton
    Flying-home
    пропущено...


    Ее может не быть на клиентском компе.

    Эта утилита использует API который тебе нужен. Типа fsutil fsinfo ntfsinfo [drive]
    Или поищи сорцы или описание у Рихтера или Руссиновича. Полюбому они
    должны были пройтись краями по этой теме.

    Угу.
    30 янв 19, 14:39    [21797815]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    kealon(Ruslan)
    1. хардлинк может быть только на этот же том

    Да. Я имел в виду junction points
    30 янв 19, 15:16    [21797886]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Если все делать правильно, то надо отказываться от GetDiskFreeSpace.
    Использовать DeviceIoControl с операцией IOCTL_DISK_GET_DRIVE_GEOMETRY
    Эта функция требует хэндл диска, открытого с помощью CreateFile, что в свою очередь требует повышения прав.

    По поводу симлинков: наверное, придется проверять каждую папку в пути на то, не является ли она ссылкой, и если является, смотреть, куда она указывает.
    30 янв 19, 15:53    [21797962]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Может, можно обойтись меньшей кровью? Без повышения прав? Задачи-то простые.

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

    2. Есть каталог, в который предстоит писать файлы. Права на запись в каталог есть. Доступа к корню диска может не быть. Опять же, надо узнать размер кластера.
    30 янв 19, 16:09    [21797983]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Вот еще вопрос всплыл.
    Если флэшка отформатирована под exFAT с размером кластера 32 МБ (у меня такая есть, исключительно для больших файлов), на нее что, в принципе нельзя писать маленькими блоками? Она будет каждый кластер переписывать по несколько раз?
    И с HDD, и с SSD аналогичный вопрос.
    2 фев 19, 10:47    [21800333]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    alexeyvg
    Member

    Откуда: Moscow
    Сообщений: 28735
    Flying-home
    Если флэшка отформатирована под exFAT с размером кластера 32 МБ (у меня такая есть, исключительно для больших файлов), на нее что, в принципе нельзя писать маленькими блоками? Она будет каждый кластер переписывать по несколько раз?
    Вообще запись буферизуется. То есть, если кластер 1Кб, и если записать 1000 раз по одному байту, то будет записан один блок размером в 1Кб
    Если же закрывать файл после записи каждого байта, то тут зависит от настроек кеширования ОС, может и 1000 раз переписать блок.
    4 фев 19, 14:06    [21801282]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    А если файл был открыт для записи с флагом FILE_FLAG_NO_BUFFERING?
    4 фев 19, 21:46    [21801591]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    kealon(Ruslan)
    Member

    Откуда: Нижневартовск
    Сообщений: 4819
    Flying-home,

    а можно ещё и папку заместо файла открыть, если "постараться"
    зачем банальности спрашивать
    5 фев 19, 08:01    [21801683]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    kealon(Ruslan)
    Flying-home,

    а можно ещё и папку заместо файла открыть, если "постараться"
    зачем банальности спрашивать

    Я-то не знаю, что там в контроллере флэшки. Может, защита от дурака есть?
    6 фев 19, 09:34    [21802367]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Еще интересный момент:
    Windows Server 2003, зеркало на контроллере LSI
    Файл открывался для чтения с флагом FILE_FLAG_NO_BUFFERING, размер блока - 64 МБ
    При попытке сделать первое чтение выскочила ошибка 1450 - недостаточно системных ресурсов для завершения операции.

    Почитал про ошибку. Похоже, это связано не с сервером и не с контроллером, а с фрагментацией файла.
    6 фев 19, 09:44    [21802376]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Flying-home
    kealon(Ruslan)
    Flying-home,

    а можно ещё и папку заместо файла открыть, если "постараться"
    зачем банальности спрашивать

    Я-то не знаю, что там в контроллере флэшки. Может, защита от дурака есть?

    Кстати, если предположить, что при записи блоков в 16 МБ на флэшку с кластером в 32 МБ кластера будут переписываться по два раза, то мы должны будем получить падение скорости записи примерно в 2 раза. На практике я этого не вижу.
    6 фев 19, 09:47    [21802379]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Flying-home
    Еще интересный момент:
    Windows Server 2003, зеркало на контроллере LSI
    Файл открывался для чтения с флагом FILE_FLAG_NO_BUFFERING, размер блока - 64 МБ
    При попытке сделать первое чтение выскочила ошибка 1450 - недостаточно системных ресурсов для завершения операции.

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

    Нет. С фрагментацией это не связано, или связано очень слабо.
    И это проблема, которую надо решать.
    Ситуация следующая:
    С файлами, открытыми с флагом FILE_FLAG_NO_BUFFERING вообще невозможны операции блоками больше 16 МБ. Ни чтение, ни запись.
    6 фев 19, 13:30    [21802648]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Еще один интересный момент:

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

    В общем: при безбуферной записи установка конечного размера файла при его создании может навредить.
    Не исключено, что в моем конкретном случае это связано с последовательными чтениями и записями на одном диске.
    9 фев 19, 20:33    [21805401]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Еще одна странность, присущая, как мне кажется, Windows 7.

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

    Похоже, память выделяется как-то не так, как надо функциям записи и чтения, работающими с FILE_FLAG_NO_BUFFERING.
    16 фев 19, 19:20    [21811772]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Несколько наблюдений.

    1.

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

    2.

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

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

    3.

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

    Флешки
    16 фев 19, 19:49    [21811794]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    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 гигах кто-то из них решает, что хватит буферизировать?
    16 фев 19, 21:32    [21811834]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Через два месяца мучений я понял, что эту работу нельзя закончить. Только прекратить.
    Сделаю копировалку, чтобы можно было прикрутить к Тоталкоммандеру, может, интеграцию в проводник, внедрю в проект, ради которого все затевалось, и пока все.

    На десятке пока не было возможности детально все потестить, но, похоже, ее проводник умеет довольно быстро копировать. С ней еще придется посоревноваться. У семерки я выигрываю от 30 до 50 процентов.
    21 фев 19, 22:27    [21816904]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    У меня появилась новая noname флешка на 8Г. Можно потестить. На корпусе толком надписей нету. Большие буквы "SP" и размер.
    Более современная. Надо полагать быстрее чем другие.

    $ 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 Гб случайного шума и записать на нее.

    $ 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Мб и до конца идет так.
    22 фев 19, 01:37    [21816947]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    tunknown
    Member

    Откуда:
    Сообщений: 648
    Flying-home
    Цель - максимальная скорость.
    Если речь идёт только о флеше, то кроме высокоуровневых вещей нужно не забыть и низкоуровневые:
    Форматирование флешевых накопителей с выравниванием кластера на границу блока
    22 фев 19, 09:15    [21817015]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    tunknown,

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

    2all

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

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

    Не, я продвинулся в мультипоточном программировании, разобрался с абстрактными методами, это хорошо. Но хотелось бы видеть горизонт, за которым этот проект можно будет остановить в приемлемом виде.
    6 мар 19, 16:09    [21826475]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    mayton
    Ситуация в динамике - такая-же как и в 64Гб флешке. Первые несколько секунд - скорость 70 Мб в сек. И потом
    падает до 5Мб и до конца идет так.

    А можно посчитать, сколько байт уходит на флэшку за эти "несколько секунд"? А в доке по флэшке есть информация о буфере? А может это буфер оси? Я стараюсь где можно отказываться от чужой буферизации.
    6 мар 19, 16:12    [21826483]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Это я работал поверх файловой системы.

    Сегодня приду домой попробую на уровень "block device". Там буфера ОС точно нелетают.
    6 мар 19, 16:19    [21826493]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Несколько наблюдений по чтению из сети.

    Получатель - новый диск на 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, пока не ясно.
    11 мар 19, 13:52    [21829149]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    А при чтении с 2008 сервера все лучше.
    FILE_FLAG_NO_BUFFERING дает прирост в 4%.
    проблем с файлами больше 4 ГБ не наблюдается.
    11 мар 19, 16:49    [21829456]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Не забывай про чистое время копирования + отмонтирование флешки.
    11 мар 19, 16:59    [21829474]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Было бы неплохо узнать, какие флаги были реально применены виндой при создании файла.
    Типа, говоришь ей: FILE_FLAG_NO_BUFFERING, а она тебе в ответ: "Нифига, попробуй другой вариант".
    11 мар 19, 17:00    [21829475]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    mayton
    Не забывай про чистое время копирования + отмонтирование флешки.

    Да я помню. Это все также связано с буферизацией. Даже провел опыт, когда под рукой был ноут с десяткой. Скопировал файлы своей прогой, будучи уверен, что буферизация отключена. Потом скопировал файлы виндовым проводником и выдернул флэшку сразу после завершения операции. Все файлы на флэшке оказались целыми. Значит, десятка при копировании на флэшку буферизацию не использует. Скорее всего.
    Да, и по скорости я ничего не выиграл.

    Когда файлов много, к чистому времени копирования еще прибавляется время, затраченное на расчет общего размера с "кластерными хвостами". И еще надо тратить время на расчет так называемых "секторных хвостов" для безбуферных операций.
    11 мар 19, 17:18    [21829499]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    А кто-нибудь видел своими глазами скорость копирования по сети 100 мегабайт в секунду?
    Я вчера увидел и немного офигел. Правда, до этого я и не задавался этими вопросами.
    Это 0.8 гигабита в секунду, близко к пропускной способности гигабитной сетки. А может, и на пределе. Сколько там служебных байт надо самбе для передачи файла?
    ЗЫ размер блока - 32 МБ.
    15 мар 19, 08:16    [21833242]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13713
    Flying-home
    А кто-нибудь видел своими глазами скорость копирования по сети 100 мегабайт в секунду?

    + Почти 100
    Картинка с другого сайта.
    15 мар 19, 08:28    [21833254]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Наверное, пора создавать блог и писать туда мысли по поводу сабжа и вообще копирования файлов.

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

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

    На третьем начинаются танцы. Если чтение и запись ведутся последовательно, ничего не сделаешь. Если параллельно - надо сделать упреждающее чтение. Но оно не поможет, если скорость чтения ощутимо меньше скорости записи. И получится, что ты напрасно выделил память под буфер А сравнить эти скорости можно только начав процесс копирования.
    15 мар 19, 08:36    [21833258]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Dima T
    Flying-home
    А кто-нибудь видел своими глазами скорость копирования по сети 100 мегабайт в секунду?

    + Почти 100
    Картинка с другого сайта.

    Точно! Надо будет еще и с Фаром посоревноваться.
    А можно поинтересоваться, в каком окружении эта скорость была установлена? Какие винты и контроллеры на сервере и на клиенте?
    15 мар 19, 08:40    [21833262]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13713
    Flying-home
    Это 0.8 гигабита в секунду, близко к пропускной способности гигабитной сетки. А может, и на пределе. Сколько там служебных байт надо самбе для передачи файла?

    Гигабит это 2^30 бит/сек или 2^27 байт/сек или 128 Мб/сек. При копировании большого файла служебной инфы менее 1%, т.е. предельная скорость должна быть около 125 Мб/сек.
    15 мар 19, 08:42    [21833263]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13713
    Flying-home
    Dima T
    пропущено...

    + Почти 100
    Картинка с другого сайта.

    Точно! Надо будет еще и с Фаром посоревноваться.
    А можно поинтересоваться, в каком окружении эта скорость была установлена? Какие винты и контроллеры на сервере и на клиенте?

    Cервер SSD, клиент обычный HDD. Сетевухи встроенные. Роутер Zyxel Keenetic Ultra
    15 мар 19, 08:47    [21833269]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13713
    + С сервера на клиента без сохранения на диск 109 Мб/сек
    Картинка с другого сайта.
    15 мар 19, 08:55    [21833274]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Dima T
    + С сервера на клиента без сохранения на диск 109 Мб/сек
    Картинка с другого сайта.

    "Без сохранения на диск" - это как? Чистая скорость чтения?
    15 мар 19, 10:42    [21833390]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    А какой версией Фара пользуются благородные доны?
    15 мар 19, 10:44    [21833392]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13713
    Flying-home
    Dima T
    + С сервера на клиента без сохранения на диск 109 Мб/сек
    Картинка с другого сайта.

    "Без сохранения на диск" - это как? Чистая скорость чтения?

    Вместо пути куда пишешь nul, т.е. дословно "в никуда".
    15 мар 19, 10:48    [21833398]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13713
    Flying-home
    А какой версией Фара пользуются благородные доны?

    Древняя, 2003 год: The FAR manager, version 1.70 beta 5 (build 1634)

    Есть посвежее: Far Manager, version 3.0 (build 4949) x64. В ней 113.2 Мб/сек копирование в nul
    15 мар 19, 10:52    [21833405]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    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

    А у него есть какие-то настройки копирования? Или алгоритм полностью универсальный?
    В ТоталКоммандере есть:

    К сообщению приложен файл. Размер - 98Kb
    15 мар 19, 13:07    [21833673]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13713
    Flying-home
    А у него есть какие-то настройки копирования? Или алгоритм полностью универсальный?

    Там из всех настроек одна галка "Use system copy routine" и она стоит. Т.е. использет виндовые средства. Вот топик по этому вопросу

    Попробовал галку снять - скорость упала со 113 до 87 Мб/с
    15 мар 19, 14:29    [21833878]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    вадя
    Member

    Откуда: Екатеринбург
    Сообщений: 15847
    есть ещё прога teracopy http://codesector.com/teracopy , хорошо и быстро копирует, да ещё и может проверить скопированное.
    16 мар 19, 09:01    [21834483]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    вадя
    есть ещё прога teracopy http://codesector.com/teracopy , хорошо и быстро копирует, да ещё и может проверить скопированное.

    Посмотрим.
    17 мар 19, 23:54    [21835477]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Ситуация:
    Копируем файлы с жесткого диска на SSD.
    Скорость записи SSD заметно выше скорости чтения HDD, операции чтения на простаивают.
    Все файлы небольшие, от 200 КБ до 19 МБ, 600 штук
    Чтение безбуферное.

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

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

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

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

    Если скопировать эти файлы на тот же диск так, чтобы их фрагментация уменьшилась, то в обоих случаях скорость возрастает, но первый метод выигрывает те же 2%.
    18 мар 19, 00:04    [21835484]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Ты в эксперимент внёс ещё несколько неизвестных.

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

    Когда копируешь россыпь мелких то читающий
    И пишущий диски начинают роутинг дискового каталога. А это движение по древовидными
    Структурам. В игру включаются seek вызовы
    И это сбивает основной алгоритм.
    18 мар 19, 00:10    [21835489]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Dima T
    Member

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

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

    1. Уменьши блок до 32-64 Кб.
    2. Замерь скорость встроенных средств: CopyFile() CopyFileEx()
    18 мар 19, 08:35    [21835573]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    вадя
    есть ещё прога teracopy http://codesector.com/teracopy , хорошо и быстро копирует, да ещё и может проверить скопированное.

    Школьная поделка.
    Сходу проиграла мне 7%. 13 файлов, общий объем 8.5 ГБ. Мое время - 155 сек, ее - 167 (по ее данным).
    18 мар 19, 10:23    [21835639]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    mayton
    Ты в эксперимент внёс ещё несколько неизвестных.

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

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


    Размер блока в данном случае не имеет значения.
    В первом случае я читаю 4-метровый файл за два последовательных прохода, которые, скорее всего, винчестер объединяет.
    Во втором случае я читаю 4-метровый файл за один проход.
    18 мар 19, 10:28    [21835642]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Dima T
    Flying-home
    В обоих случаях остановок (пауз между операциями чтения) нет. Почему второй метод проигрывает 2% по скорости?

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

    1. Уменьши блок до 32-64 Кб.
    2. Замерь скорость встроенных средств: CopyFile() CopyFileEx()

    Это все справедливо для буферизированных операций. У меня чтение безбуферное, ось мне ничего не готовит.
    Виндовые функции копирования CopyFile() и CopyFileEx() уже давно курят в сторонке.
    18 мар 19, 10:31    [21835647]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13713
    Почитай про IoCompletionPort. У Рихтера неплохо было написано про него в "Windows via C/C++".
    18 мар 19, 10:42    [21835659]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Dima T
    Почитай про IoCompletionPort. У Рихтера неплохо было написано про него в "Windows via C/C++".

    Уже было предложено и было мной прочитано.
    18 мар 19, 11:43    [21835727]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Хотел бы в двух словах описать (как я это понимаю), как происходят безбуферные дисковые операции, чтобы исключить в дальнейшем предложения уменьшить размер буфера до 64К.

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

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

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

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

    Почему я вообще этим занялся: из всех копировалок, которые я видел, ни одна не копировала бесшовно. И ни одна не пыталась использовать побольше памяти для упреждающего чтения. Я решил, что смогу на этих двух пунктах выиграть и уже выигрываю.
    Бесшовно - значит без паузы межу файлами. К тому времени, когда пишущий поток закрывает очередной записанный файл, читающий поток уже должен прочитать ему первый блок следующего файла.
    18 мар 19, 12:12    [21835765]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Flying-home
    Это потому что создание файла в файловой системе занимает больше времени, чем запись в него. Так же при создании файла головки винчестера делают лишние телодвижения для работы с MFT.

    Я добавлю что в старых файловых системах (FAT32 для дискет и флешек) каталог с файлами
    представляет собой несортированный список. И когда количество файлов превышает за тыщу
    вы испытываете ощутимый тормоз при добавлении нового файла.

    Если отформатировать флешку на ExFat или NTFS тогда этот эффект нивелируется но возможно
    будут новые более сложные эффекты которые не всегда можно спрогнозировать. В целом
    MS рекомендует делать ExFat и я-бы сказал что глупо спорить. Есть табличка.
    http://www.ntfs.com/ntfs_vs_fat.htm где можно почитать про некоторые сравнительные фичи.
    18 мар 19, 12:24    [21835784]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13713
    Свежая статья на похожую тему https://habr.com/ru/post/444036/
    18 мар 19, 13:44    [21835921]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Вот иллюстрация к тому, что я говорил выше.
    Это копирование кучи mp3-шек в сеть.

    кол-во файлов кол-во блоков размер блока общий размер (байт) миллисекунды КБ/С МБ/С
    552 27 16 777 216 4 690 054 068 0 51 870 88 300.19 86.23
    552 15 33 554 432 4 690 054 068 0 48 298 94 830.65 92.61
    552 7 67 108 864 4 690 054 068 0 47 767 95 884.84 93.64
    TeraCopy4 690 054 068 77 000 59 482.22 58.09

    Самый большой файл - 40 МБ, средний размер - 8 МБ.
    Как видим, для безбуферных операций главная задача - уменьшить количество чтений/записи. А дальше уже вся надежда на винчестер и фрагментированность файлов / свободного места.
    18 мар 19, 15:32    [21836113]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    mayton
    Flying-home
    Это потому что создание файла в файловой системе занимает больше времени, чем запись в него. Так же при создании файла головки винчестера делают лишние телодвижения для работы с MFT.

    Я добавлю что в старых файловых системах (FAT32 для дискет и флешек) каталог с файлами
    представляет собой несортированный список. И когда количество файлов превышает за тыщу
    вы испытываете ощутимый тормоз при добавлении нового файла.

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


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

    NTFS для флэшек не менее жесток, чем FAT32. Там куча операций с MFT, а она хранится в одном месте.
    18 мар 19, 15:40    [21836129]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    У этой ТераКопи совершенно непродуманный ГУИ. Надо внедряться в контекстное меню проводника и добавлять меню вставки файлов рядом со стандартной вставкой. Типа "Вставить используя ТераКопи". А дальше анализировать содержимое буфера обмена и запускать процесс копирования. Я себе именно так и сделаю.
    18 мар 19, 17:05    [21836278]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Еще два наблюдения:

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

    Для чтения с компакт или DVD диска файлы надо читать в том порядке, в котором они записаны на диск. Как это сделать? Как получить полный список файлов на диске, отсортированный в нужном порядке? И сколько времени займет получение этого списка? А если файлов много, а пользователь копирует только часть из них?
    21 мар 19, 10:21    [21839217]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Flying-home
    Для чтения с компакт или DVD диска файлы надо читать в том порядке, в котором они записаны на диск. Как это сделать? Как получить полный список файлов на диске, отсортированный в нужном порядке? И сколько времени займет получение этого списка? А если файлов много, а пользователь копирует только часть из них?

    Какой у нас есть Api для DVD? Это тот-же самый файловый итератор findfirst/findnext для unix, FindFirstFile/FindNextFile для Windows.
    И я не очень понимаю о какой сортировке идет речь. Предполагаю что в том порядке как выдает итератор так и надо
    обрабатывать. Optimal way.

    Альтернативный API - это копировать образ диска. Но это КМК другая задача.
    21 мар 19, 11:19    [21839322]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Flying-home
    Еще два наблюдения:

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

    Да. Лет 10 назад была такая утилитка. HDTune. И она графиками подтверждает этот факт.

    Картинка с другого сайта.
    21 мар 19, 12:01    [21839394]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    tunknown
    Flying-home
    Цель - максимальная скорость.
    Если речь идёт только о флеше, то кроме высокоуровневых вещей нужно не забыть и низкоуровневые:
    Форматирование флешевых накопителей с выравниванием кластера на границу блока

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

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

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

    Интересно, как у DFB организована запись? Где он взял такие цифры?
    22 мар 19, 17:24    [21841146]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    mayton
    И я не очень понимаю о какой сортировке идет речь

    Ну как, на компакт-диске всего одна дорожка. Для оптимального чтения надо сделать так, чтобы каретка с лазером двигалась вдоль дорожки и делала минимум переходов туда-сюда. А FindFirst/FindNext в каком порядке нам список файлов даст?
    22 мар 19, 17:29    [21841155]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Flying-home
    mayton
    И я не очень понимаю о какой сортировке идет речь

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

    Я понимаю откуда идёт твой вопрос.

    Надо почитать устройство компакт-диска. Стандарт DVD/BlueRay. Я думаю - закопаешся на пару месяцев.
    Вангую что не будет практической пользы от ответа который ты найдешь.
    22 мар 19, 17:34    [21841169]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Flying-home
    надо сделать так, чтобы каретка с лазером двигалась вдоль дорожки и делала минимум переходов туда-сюда

    А для этого надо читать файлы в том порядке, в котором они находятся на этой самой дорожке.
    22 мар 19, 17:35    [21841172]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    mayton
    Flying-home
    пропущено...

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

    Я понимаю откуда идёт твой вопрос.

    Надо почитать устройство компакт-диска. Стандарт DVD/BlueRay. Я думаю - закопаешся на пару месяцев.
    Вангую что не будет практической пользы от ответа который ты найдешь.

    Да уж. Перфекционизм он такой.
    22 мар 19, 17:36    [21841177]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Из далеких двухтысячных. Я помню что копирование CD на 700 мб. занимало много времени
    когда в диске было дохрена мелких файлов. Спасали утилиты типа DaemonTools e.t.c.
    Они позволяли копировать образ диска.

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

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

    Вот за прикладной - платят.
    22 мар 19, 18:08    [21841239]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    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 блоки, которыми он тестирует запись, настолько маленькие, и их так мало, что... Непонятно что.
    22 мар 19, 18:11    [21841241]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    mayton
    Из далеких двухтысячных. Я помню что копирование CD на 700 мб. занимало много времени
    когда в диске было дохрена мелких файлов. Спасали утилиты типа DaemonTools e.t.c.
    Они позволяли копировать образ диска.

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

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

    Вот за прикладной - платят.

    Да понятно. Если и буду копать в эту сторону, то не скоро.
    22 мар 19, 18:12    [21841244]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Dima T
    Flying-home
    В обоих случаях остановок (пауз между операциями чтения) нет. Почему второй метод проигрывает 2% по скорости?

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

    1. Уменьши блок до 32-64 Кб.
    2. Замерь скорость встроенных средств: CopyFile() CopyFileEx()

    Должен извиниться, ты кое в чем прав. В природе существуют диски, которым нравится, когда с них читают маленькими блоками. На моем "стенде" уменьшение блока вплоть до 256 КБ дает стабильный прирост скорости. Дальше уменьшать блок нет смысла, потому что начнут играть роль мои собственные накладные расходы.
    Но только на одном винчестере. Не исключено, что 32-64 КБ - для него будет оптимальным размером.
    Но ПОЧЕМУ???
    24 мар 19, 12:40    [21841972]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Flying-home
    Dima T
    пропущено...

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

    1. Уменьши блок до 32-64 Кб.
    2. Замерь скорость встроенных средств: CopyFile() CopyFileEx()

    Должен извиниться, ты кое в чем прав. В природе существуют диски, которым нравится, когда с них читают маленькими блоками. На моем "стенде" уменьшение блока вплоть до 256 КБ дает стабильный прирост скорости. Дальше уменьшать блок нет смысла, потому что начнут играть роль мои собственные накладные расходы.
    Но только на одном винчестере. Не исключено, что 32-64 КБ - для него будет оптимальным размером.
    Но ПОЧЕМУ???

    То что ты называешь винчестером - это технологический стек. Который состоит из цепочки
    последовательно соединенных устройств. И выбрать для них оптимальный режим работы - большое исскусство есть.
    Я даже думаю что задача твоя немного бесконечна и нерешаема. Как раз из-за разнообразия техники.
    Главный поинт - блочное копирование параллельно через разделяемую память для процесса чтения и записи
    ты вроде-бы уже сделал. Молодец. Дальнейшее улучшене - это подбор или "угадывание" оптимального размера
    блока. +Кластер файловой системы. Для Windows NTFS к примеру есть формула (или табличка) где размер диска примерно
    линейно связан с размером выбираемого кластера (автоматически) при форматировании. Грубо говоря - мелкие
    диски получат мелкий кластер. А 10Терабайтник получит побольше.

    Самое сложное в твоих экспериментах - это зафикировать начальные условия. И отделить мух от котлет. Тоесть
    понять какие технологические аспекты влияют (антивирус или параллельно работающий индексатор файлов от Windows)
    на скорость а какие не влияют никак.
    24 мар 19, 13:16    [21841991]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Похоже вот она

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

    Насчет 4Кб на Ntfs5 я-бы поспорил. Я точно помню что форматировал в 2000х диски (толстого на тот
    момент) размера 1-2 Гб и получал уже 8К кластер... ну да ладно. Пока приму как рекомендацию.
    24 мар 19, 13:24    [21841994]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    mayton
    Молодец.

    Дык. Кто бы сомневался.

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


    Тут такой интересный момент... Для чтения и записи размер кластера не имеет никакого значения. Кластер - это атом хранения, а не операции.
    Если операции безбуферные, то имеет значение только физический размер сектора, нельзя выбирать размер блока меньше его, или некратным ему. Можно, например, смело писать блоками по 1 МБ на раздел, отформатированный с размером кластера 4 МБ.
    Если операции используют файловый буфер виндовс, то тогда вообще можно забыть про кластеры и сектора, все за тебя сделает винда.
    24 мар 19, 15:02    [21842087]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Flying-home
    В природе существуют диски, которым нравится, когда с них читают маленькими блоками.

    Вот, даже диаграммку нарисовал.

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

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

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

    Винт 2 - старая 320-ка Сигейт.
    Ну и как работать с таким непредсказуемым материалом?

    К сообщению приложен файл. Размер - 112Kb
    24 мар 19, 15:20    [21842111]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Flying-home
    mayton
    Молодец.

    Дык. Кто бы сомневался.

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


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

    Да. Но когда ты делаешь copy/move/delete дерева каталогов в NTFS - работают механизмы аллокации дисковой
    памяти для тела файла и для структуры каталога. И в этот момент размер кластера важен. Это единца аллокации.
    И это влияет на performance.
    24 мар 19, 15:24    [21842117]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    mayton
    Да. Но когда ты делаешь copy/move/delete дерева каталогов в NTFS - работают механизмы аллокации дисковой
    памяти для тела файла и для структуры каталога. И в этот момент размер кластера важен. Это единца аллокации.
    И это влияет на performance.

    Можно помедленней поподробнее?
    Я концентрируюсь на двух операциях: чтение и запись. Преимущественно над большими файлами. С файлами размером, скажем, от 512 КБ тоже приходится возиться. Создание каталогов для меня - неизбежный накладной расход, который пока игнорируется.
    Цель у меня - максимально сократить время между открытием файла на чтение и закрытием его и созданием файла для записи в него и закрытием его. Каким образом процитированное может влиять на сабжект?
    24 мар 19, 16:05    [21842147]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Механизм аллокации каждого нового файла действует у меня просто: при создании файла ему сразу устанавливается размер - размер файла плюс его секторный хвост.
    Секторный - потому что этого требует операция безбуферной записи. А с последним кластером файловая система сама как-нибудь разберется, ей достаточно пометить весь кластер как занятый.
    24 мар 19, 16:11    [21842149]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Прогнал на другом винчестере серию тестов на чтение с маленькими файлами.
    Все так, как я рассуждаю здесь 21835484. Чем больше блок, тем выше скорость.
    24 мар 19, 17:27    [21842177]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Flying-home
    Прогнал на другом винчестере серию тестов на чтение с маленькими файлами.
    Все так, как я рассуждаю здесь 21835484. Чем больше блок, тем выше скорость.

    В смысле, желтенькая линия с картинки не убывает, а растет.
    24 мар 19, 17:29    [21842178]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Flying-home
    Прогнал на другом винчестере серию тестов на чтение с маленькими файлами.
    Все так, как я рассуждаю здесь 21835484. Чем больше блок, тем выше скорость.

    Я немного запутался. Ты уже перешел с флешек на жесткие диски?
    24 мар 19, 17:50    [21842188]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    mayton
    Flying-home
    Прогнал на другом винчестере серию тестов на чтение с маленькими файлами.
    Все так, как я рассуждаю здесь 21835484. Чем больше блок, тем выше скорость.

    Я немного запутался. Ты уже перешел с флешек на жесткие диски?

    Неожиданно для себя расширил область интересов.

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

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

    То пункты 1 и 3 для изначально заявленной проблемы актуальны. Потому что пользователю может прийти в голову копировать на флэшку файлы с поцарапанного CD, с древнего IDE винта, скорость чтения которого может оказаться ниже скорости записи новой флэшки, с другой флэшки и разное другое. Так что вопрос быстрого чтения с винчестера вполне себе может обсуждаться.
    25 мар 19, 08:54    [21842420]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    С дисками еще посложнее. У них - нелинейных эффектов больше. Механика головок. И различные умные кеши.
    Но самое главное - класс устройства. Старый IDE, который стоит на бабушкиных компах. SATA1/2/3.
    Размер блинчика. 2.5 или 3.5. И скорость кручения. 5 тыщ. 7 тыщ. 12 тыщ (для серверных).
    25 мар 19, 11:05    [21842515]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    mayton
    С дисками еще посложнее. У них - нелинейных эффектов больше. Механика головок. И различные умные кеши.
    Но самое главное - класс устройства. Старый IDE, который стоит на бабушкиных компах. SATA1/2/3.
    Размер блинчика. 2.5 или 3.5. И скорость кручения. 5 тыщ. 7 тыщ. 12 тыщ (для серверных).

    Да я вот начинаю вникать и офигеваю.
    Вот чтение с достаточно распространенного WD Black, 500 GB
    Смешанные файлы. Фотки, Музыка, пара видео.
    Прирост скорости на маленьких размерах блока - за счет маленьких файлов.
    На больших - за счет больших файлов.

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

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

    К сообщению приложен файл. Размер - 110Kb
    25 мар 19, 13:49    [21842752]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Flying-home
    Предположу, что винчестер при поступлении на него большой очереди запросов на чтение маленькими блоками, оптимизирует порядок их выполнения и выигрывает на чтении фрагментированных файлов.

    Вот может это даст какое-то прояснение https://en.wikipedia.org/wiki/Native_Command_Queuing
    Я тоже почитаю.
    25 мар 19, 13:52    [21842758]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Не, соврал. Это была старая 320-ка.
    500-ка вот

    К сообщению приложен файл. Размер - 87Kb
    25 мар 19, 14:02    [21842774]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    mayton
    Flying-home
    Предположу, что винчестер при поступлении на него большой очереди запросов на чтение маленькими блоками, оптимизирует порядок их выполнения и выигрывает на чтении фрагментированных файлов.

    Вот может это даст какое-то прояснение https://en.wikipedia.org/wiki/Native_Command_Queuing
    Я тоже почитаю.

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

    Почему мы должны думать, что во втором случае NCQ не работает?
    25 мар 19, 17:28    [21843005]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Flying-home
    mayton
    пропущено...

    Вот может это даст какое-то прояснение https://en.wikipedia.org/wiki/Native_Command_Queuing
    Я тоже почитаю.

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

    Почему мы должны думать, что во втором случае NCQ не работает?

    В смысле, кучу команд он оптимизирует (как следует из названия технологии), а одну большую команду оптимизировать не будет?
    25 мар 19, 17:37    [21843017]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Flying-home
    Flying-home
    пропущено...

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

    Почему мы должны думать, что во втором случае NCQ не работает?

    В смысле, кучу команд он оптимизирует (как следует из названия технологии), а одну большую команду оптимизировать не будет?

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

    Тоесть копированию БТФ - пофиг на NCQ, но если параллельно с этим копированием периодически прилетают
    шумящие команды от других процессов то NCQ полезен.
    25 мар 19, 19:45    [21843113]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    mayton
    Flying-home
    пропущено...

    В смысле, кучу команд он оптимизирует (как следует из названия технологии), а одну большую команду оптимизировать не будет?

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

    Тоесть копированию БТФ - пофиг на NCQ, но если параллельно с этим копированием периодически прилетают
    шумящие команды от других процессов то NCQ полезен.

    Получается, надо разбить файлы на две группы, например, меньше 8 МБ и больше. Первую группу читать блоками по 64 КБ в надежде на NCQ, вторую - большими блоками в надежде на их нефрагментированность.
    25 мар 19, 20:10    [21843135]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Еще из моих наблюдений на рэйдах этот NCQ то-ли не работает, то-ли работает как-то не так. С маленькими файлами прироста скорости с уменьшением блока нет. Но там вообще фиг разберешься, что оптимизирует винт, а что - рэйд-контроллер.
    25 мар 19, 20:14    [21843141]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    И по сабжу.
    Сегодня держал в руках флэшку USB 2.0
    На FILE_FLAG_NO_BUFFERING она вообще не реагирует, имеет на борту буфер в 8 МБ. При записи на нее больших файлов она просто принимала в буфер порцию, потом записывала его, как сама считала нужным. И так далее.
    25 мар 19, 20:20    [21843145]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    https://habr.com/ru/post/95384/
    В далеком 2010 году человек пытался собирать бенчмарки по флэшкам. Но видно, что-то пошло не так.
    25 мар 19, 20:30    [21843152]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13713
    Flying-home
    И по сабжу.
    Сегодня держал в руках флэшку USB 2.0

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

    Мне кажется ты занимаешься тюнингом паровоза в эпоху электромобилей.
    25 мар 19, 20:36    [21843159]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Flying-home
    mayton
    пропущено...

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

    Тоесть копированию БТФ - пофиг на NCQ, но если параллельно с этим копированием периодически прилетают
    шумящие команды от других процессов то NCQ полезен.

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

    Делить файлы на 2 категории - мысль здравая. Плюсую.

    По поводу NCQ. Надо курить документацию по дискам и понять какой смысл вкладывается в NCQ-command. Если
    это 1 сектор то это одно. Если это цепочка секторов - тогда надо думать по другому.
    25 мар 19, 20:38    [21843162]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Flying-home
    Еще из моих наблюдений на рэйдах этот NCQ то-ли не работает, то-ли работает как-то не так. С маленькими файлами прироста скорости с уменьшением блока нет. Но там вообще фиг разберешься, что оптимизирует винт, а что - рэйд-контроллер.

    Я-ж говорю. Сложное это дело. Если в стеке у нас еще и стоит к примеру RAID-контроллер в зеркале (это кажется режим десятка)
    тогда у нас на чтение контроллер будет разбрасывать транзакции на 2 диска равномерно по их готовности.
    Это вообще путает все карты! Мы уже тюним 3 устройства в стеке!
    25 мар 19, 20:41    [21843166]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Flying-home
    И по сабжу.
    Сегодня держал в руках флэшку USB 2.0
    На FILE_FLAG_NO_BUFFERING она вообще не реагирует, имеет на борту буфер в 8 МБ. При записи на нее больших файлов она просто принимала в буфер порцию, потом записывала его, как сама считала нужным. И так далее.

    Ты обращал внимание что когда втыкаешь новую флешку - то операционка ставит
    для нее драйвер? Причем для каждого вендора флешки может быть новый драйвер.
    Рискну предположить что флешка - это не просто матрица памяти. Ну... наше понимание
    в этом вопросе будет поверхностным если мы флешку будем опускать на такой уровень.
    25 мар 19, 20:44    [21843170]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Dima T
    Flying-home
    И по сабжу.
    Сегодня держал в руках флэшку USB 2.0

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

    Мне кажется ты занимаешься тюнингом паровоза в эпоху электромобилей.

    Через неделю я буду заниматься тюнингом своего нового AMD. В основном
    в части дележа дисков. Куда чё положить. Короче дисковый пасьянс.
    25 мар 19, 20:46    [21843172]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13713
    mayton
    Через неделю я буду заниматься тюнингом своего нового AMD. В основном
    в части дележа дисков. Куда чё положить. Короче дисковый пасьянс.

    SSD там будет?
    25 мар 19, 20:56    [21843184]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Пока нет. Куплю позже. Щас у меня идея фикс - собрать программное зеркало для хранения
    домашних семейных фото-архивов. Почему зеркало? Да достало копии делать. Всё равно
    забываешь. И что с..ка характерно. Все винты разного размера. Двушка. единичка. и 0.5 терабайт.
    25 мар 19, 21:00    [21843186]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    mayton
    Flying-home
    Еще из моих наблюдений на рэйдах этот NCQ то-ли не работает, то-ли работает как-то не так. С маленькими файлами прироста скорости с уменьшением блока нет. Но там вообще фиг разберешься, что оптимизирует винт, а что - рэйд-контроллер.

    Я-ж говорю. Сложное это дело. Если в стеке у нас еще и стоит к примеру RAID-контроллер в зеркале (это кажется режим десятка)
    тогда у нас на чтение контроллер будет разбрасывать транзакции на 2 диска равномерно по их готовности.
    Это вообще путает все карты! Мы уже тюним 3 устройства в стеке!

    Да, кстати, надо будет поплотнее потестить это "разбрасывание". Кажется, при безбуферных операциях его нет.
    25 мар 19, 21:34    [21843197]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Relic Hunter
    Member

    Откуда: AB
    Сообщений: 6978
    mayton
    Пока нет. Куплю позже. Щас у меня идея фикс - собрать программное зеркало для хранения
    домашних семейных фото-архивов. Почему зеркало? Да достало копии делать. Всё равно
    забываешь. И что с..ка характерно. Все винты разного размера. Двушка. единичка. и 0.5 терабайт.


    Ну вот, приехали :) Бекап и зеркало это - разные вещи. Оно не защитит ни от усер эррор, ни от шифровальщиков.
    26 мар 19, 03:43    [21843333]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13713
    mayton
    Пока нет. Куплю позже. Щас у меня идея фикс - собрать программное зеркало для хранения
    домашних семейных фото-архивов. Почему зеркало? Да достало копии делать. Всё равно
    забываешь. И что с..ка характерно. Все винты разного размера. Двушка. единичка. и 0.5 терабайт.

    SSD недорогие нынче, достаточно 240 Гб под системный диск. Комп летать будет.
    Для бэкапа лучше роутер с HDD и туда сливать. А чтобы не забывать можно по заданию запускать батник, а в нем xcopy или robocopy только новых файлов.
    26 мар 19, 07:27    [21843372]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    Проснулся и понял. Понял, что ничего не понятно.

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

    В общем, вопрос остается открытым.
    Сформулирую его еще раз:
    При последовательном чтении больших файлов на безбуферных операциях наблюдается стабильный прирост скорости чтения с увеличением размера блока. Вплоть до 16 и 32 МБ.
    При последовательном чтении сравнительно маленьких файлов (размером до 8 МБ) на SATA винчестерах наблюдается обратный эффект: скорость чтения растет с уменьшением блока вплоть до 132 КБ.
    26 мар 19, 08:12    [21843385]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    tunknown
    Member

    Откуда:
    Сообщений: 648
    Flying-home
    В общем, вопрос остается открытым.
    Попробуйте uni_ata. В нём есть какое-то логгирование. Вдруг, поможет.

    Вопрос с количеством потоков- интересный. Неясно, как его решить в общем случае. На RAID или некоторых SSD это может ускорить, но определить конфигурацию в общем смысле, видимо- непросто.
    26 мар 19, 09:28    [21843417]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Relic Hunter
    mayton
    Пока нет. Куплю позже. Щас у меня идея фикс - собрать программное зеркало для хранения
    домашних семейных фото-архивов. Почему зеркало? Да достало копии делать. Всё равно
    забываешь. И что с..ка характерно. Все винты разного размера. Двушка. единичка. и 0.5 терабайт.


    Ну вот, приехали :) Бекап и зеркало это - разные вещи. Оно не защитит ни от усер эррор, ни от шифровальщиков.

    У меня узер один. Это я. И шифровать не буду. Кому нужны мои домашние фотки?
    26 мар 19, 11:07    [21843514]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Dima T
    mayton
    Пока нет. Куплю позже. Щас у меня идея фикс - собрать программное зеркало для хранения
    домашних семейных фото-архивов. Почему зеркало? Да достало копии делать. Всё равно
    забываешь. И что с..ка характерно. Все винты разного размера. Двушка. единичка. и 0.5 терабайт.

    SSD недорогие нынче, достаточно 240 Гб под системный диск. Комп летать будет.
    Для бэкапа лучше роутер с HDD и туда сливать. А чтобы не забывать можно по заданию запускать батник, а в нем xcopy или robocopy только новых файлов.

    xcopy только новых файлов это не метод. Это я уже проходил. Потом после восстановления
    жена тебе скажет - "я же тебя просила удалить эту фотку где я - толстая/больная/или в
    некрасивом платье"

    Удаление и переименовывание файлов должно накатываться на бэкап именно так-же как
    и транзакции в БД.
    26 мар 19, 11:10    [21843519]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13713
    mayton
    И шифровать не буду. Кому нужны мои домашние фотки?

    Он про вирусы шифровальщики.
    mayton
    Удаление и переименовывание файлов должно накатываться на бэкап именно так-же как
    и транзакции в БД.

    xcopy плюс удалить в бэкапе то, чего нет в оригинале. Написать не сложно, скорее всего уже что-то готовое есть.
    26 мар 19, 12:11    [21843579]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Dima T
    mayton
    И шифровать не буду. Кому нужны мои домашние фотки?

    Он про вирусы шифровальщики.
    xcopy плюс удалить в бэкапе то, чего нет в оригинале. Написать не сложно, скорее всего уже что-то готовое есть.

    Вирусы шифровальщики под Linux. Возможно. Надо погуглить.
    26 мар 19, 12:28    [21843606]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 41027
    Dima T
    xcopy плюс удалить в бэкапе то, чего нет в оригинале. Написать не сложно, скорее всего уже что-то готовое есть.

    Я буду искать коробочное решение. Надо посмотреть как работает rzync и lzop.
    У них были богатые возможности по инкрементальному обновлению хранилищ.
    26 мар 19, 12:29    [21843611]     Ответить | Цитировать Сообщить модератору
     Re: Оптимальный размер блока при записи файла на флэшку  [new]
    Flying-home
    Member

    Откуда: nas.vrostove.net
    Сообщений: 14782
    mayton
    xcopy только новых файлов это не метод. Это я уже проходил. Потом после восстановления
    жена тебе скажет - "я же тебя просила удалить эту фотку где я - толстая/больная/или в
    некрасивом платье"

    Видел прогу, которая делала правильные накопительные файловые бэкапы. Прямо как MS SQL.
    Кажется, в винде есть такая фича.
    26 мар 19, 15:02    [21843856]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: 1 2 3 4 5 6 7      [все]
    Все форумы / Windows Ответить