Перейти к содержанию
    

Падает скорость копирования

Смастерил дубликатор microSD.

Для синхронного копирования эталона на 6 карт одновременно.

Инициализирую все карты одинаково - SDIO 4 bit High Speed.

Все карты 16GB MicroSDHC Class 10 UHS-I, но разных производителей.

Копирую ровно 1 гигабайт.

Вот такие результаты получил при копировании эталона только на одну карту по очереди:

(после имени время м:с и в скобках округлённая скорость МБ/с.)

Patriot 1:28(12)
Team    1:24(12)
Goodram 1:20(13)
Mibrand 1:04(16)
Kioxia  1:10(15)
SanDisk 1:12(14)

И всё бы хорошо, но при одновременном копировании на все 6-ть карт получаю время 2:58!

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

Почему так сильно может падать скорость при одновременной записи?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, Freibier said:

Почему так сильно может падать скорость при одновременной записи?

Потому что они BUSY в разные моменты времени выставляют?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 минут назад, aaarrr сказал:

Потому что они BUSY в разные моменты времени выставляют?

Возможно. 

А это как-то побороть можно?

А если все карты приемники будут абсолютно одинаковые и одного производителя, то такой эффект тоже возможен?

Или готовности абсолютно не предсказуемы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 minutes ago, Freibier said:

А если все карты приемники будут абсолютно одинаковые и одного производителя, то такой эффект тоже возможен?

Конечно: карты одинаковые, а дефекты NAND разные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какой алгоритм записи? Полагаю, вычитали кусок с флешки-оригинала, дальше разбили его на кусочки поменьше. И эти кусочки скармливаете болванкам, дожидаясь, пока каждая из всех 6 болванок закончит запись, прежде чем перейти к следующему "кусочку поменьше"? Тогда так не пойдет - каждой карте нужно выделить свой "поток обслуживания", и кормить ей данные тогда, когда она будет свободна. Вот тогда получите общую скорость записи сопоставимую с самой медленной флешкой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, Arlleex сказал:

каждой карте нужно выделить свой "поток обслуживания"

Это тогда придётся делать буферы для всех потоков данных. Наверное буферы даже нестрашные по объёму можно сделать, раз все флешки +/- по отдельности одинаково работают.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, Longiel said:

Это тогда придётся делать буферы для всех потоков данных. Наверное буферы даже нестрашные по объёму можно сделать, раз все флешки +/- по отдельности одинаково работают.

Индивидуальные буферы ни к чему, достаточно общего приличного объема.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 минут назад, Arlleex сказал:

дожидаясь, пока каждая из всех 6 болванок закончит запись, прежде чем перейти к следующему "кусочку поменьше"?

Ну да, только "кусочки" равны одному сектору. Читаю один сектор, параллельно отправляя каждую тетраду всем картам, и потом жду когда все BUSY снимутся.

Буфера вообще нет никакого. Всё до безобразия просто.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, Freibier said:

Читаю один сектор, параллельно отправляя каждую тетраду всем картам, и потом жду когда все BUSY снимутся.

Ну вот. А правильнее будет прочитать блок в несколько Мбайт, а затем параллельно:

- писать на карты, индивидуально обрабатывая BUSY

- читать следующий блок в буфер

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 минут назад, aaarrr сказал:

Индивидуальные буферы ни к чему, достаточно общего приличного объема.

Так этот объём нужно получить из источника и хранить в какой-то памяти. Если BUSY несинхронны значит к этой памяти нужно будет обращаться в разные места, но адрес чтения-то один? Правда если частота работы логики алгоритма распределения гораздо выше, чем обмен с флешками, то это не будет проблемой)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

12 минут назад, aaarrr сказал:

Ну вот. А правильнее будет прочитать блок в несколько Мбайт, а затем параллельно:

- писать на карты, индивидуально обрабатывая BUSY

- читать следующий блок в буфер

Т.е. читаем в буфер N Мбайт и отправляем "кусочками" равными сектору на первую карту пока она BUSY не выставит.

Затем также отправляем следующей карте опять же до выставления ею BUSY.

И так по кругу.

Верно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, Freibier said:

Т.е. читаем в буфер N Мбайт и отправляем "кусочками" равными сектору на первую карту пока она BUSY не выставит.

Затем также отправляем следующей карте опять же до выставления ею BUSY.

Вы линии интерфейса между картами делите? Тогда ой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

57 минут назад, Freibier сказал:

Для синхронного копирования эталона на 6 карт одновременно.

Требуется пояснить: запись флешек на физическом уровне идёт параллельно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 минут назад, aaarrr сказал:

Вы линии интерфейса между картами делите? Тогда ой.

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

Но это уже без разницы. С этим проектом все понятно.

Сделал дёшево и сердито - получил соответствующий результат.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...