2015-12-11 2 views
0

Я пытаюсь запустить собственное приложение на встроенной платформе Linux (Linux 4.1). Это приложение непрерывно записывает 1 МБ данных на SD-карту (класс Sandisk UHS I). Приложение использует вызов fwrite() для записи данных на SD-карту.Пропуск SD-карты на Linux-машине

Ниже приведены мои наблюдения, когда контролировалась пропускная способность записи на SD-карте.

  1. Среднее значение составляет около 10 Мбайт в секунду.
  2. Мгновенная пропускная способность (измеренная на 1 МБ передачи) падает после записи каждого 50 МБ данных. Пропускная способность падает до 200 кбайт в секунду.
  3. Я попытался использовать write() системный вызов вместо fwrite(), с O_SYNC установленный флаг. При этом мгновенная пропускная способность увеличилась до 1 Мбит/с.

Спецификация SD-карты указывает, что минимальная пропускная способность составляет 10 Мбит/с. Почему происходит мгновенная пропускная способность?

Ожидается ли такое поведение? Что ограничивает мгновенную пропускную способность?

Мое приложение требует минимальной мгновенной пропускной способности 4 Мбит/с. Что мне делать?

+0

Убедитесь, что файловая система действительно выровнен с размер физического блока, убедитесь, что вы пишете буферы точно на физическом блоке, и убедитесь, что у вас много буферной памяти, чтобы отделить источник от того, что чувствует слой перевода флэш-памяти. Обратите внимание, что пропускная способность интерфейса SD очень отличается от скорости записи (фиксации) данной карты - вы можете быстро получить данные там, но может потребоваться время для своего лучшего приготовления. –

+0

Спасибо Dan! Эти вещи уже позаботились, размер физического блока равен 512, а буфер записи - 1 МБ. Я согласен, что скорость будет меньше, чем указано продавцом, но еще 200 КБ очень меньше. –

+0

«размер физического блока - 512» нет, он определенно не такой маленький для любой современной карты. Везде, где вы получили эту информацию, это ошибочно - это может отражать * эмулируемый * размер, а не физический, и это является главным подозреваемым в замедлении. Вы хотите соответствовать размеру блока и убедитесь, что блоки файловой системы совпадают с физическими, что может легко стать проблемой при попытках случайного формата. Вероятно, вы можете позволить себе гораздо больший буфер. –

ответ

0
  1. Убедитесь, что интерфейс и драйвер, подключающий встроенное Linux-устройство к SD-карте, поддерживают пропускную способность. (Например, когда он подключен через «битбинг», пропускная способность может быть намного меньше того, что вы ожидаете).
  2. Проверьте пропускную способность с помощью известного инструмента (dd) и очистите кеш до: sync; echo 3 | Судо тройник/Proc/SYS/VM/drop_caches дд, если =/DEV/нуль = бс = 500K кол = 2024
  3. И, наконец, пожалуйста, обратитесь к: https://raspberrypi.stackexchange.com/questions/32884/why-does-the-sd-card-random-write-performance-for-record-size-8-128-kb-drops-bel
Смежные вопросы