Я пытаюсь запустить собственное приложение на встроенной платформе Linux (Linux 4.1). Это приложение непрерывно записывает 1 МБ данных на SD-карту (класс Sandisk UHS I). Приложение использует вызов fwrite()
для записи данных на SD-карту.Пропуск SD-карты на Linux-машине
Ниже приведены мои наблюдения, когда контролировалась пропускная способность записи на SD-карте.
- Среднее значение составляет около 10 Мбайт в секунду.
- Мгновенная пропускная способность (измеренная на 1 МБ передачи) падает после записи каждого 50 МБ данных. Пропускная способность падает до 200 кбайт в секунду.
- Я попытался использовать
write()
системный вызов вместоfwrite()
, сO_SYNC
установленный флаг. При этом мгновенная пропускная способность увеличилась до 1 Мбит/с.
Спецификация SD-карты указывает, что минимальная пропускная способность составляет 10 Мбит/с. Почему происходит мгновенная пропускная способность?
Ожидается ли такое поведение? Что ограничивает мгновенную пропускную способность?
Мое приложение требует минимальной мгновенной пропускной способности 4 Мбит/с. Что мне делать?
Убедитесь, что файловая система действительно выровнен с размер физического блока, убедитесь, что вы пишете буферы точно на физическом блоке, и убедитесь, что у вас много буферной памяти, чтобы отделить источник от того, что чувствует слой перевода флэш-памяти. Обратите внимание, что пропускная способность интерфейса SD очень отличается от скорости записи (фиксации) данной карты - вы можете быстро получить данные там, но может потребоваться время для своего лучшего приготовления. –
Спасибо Dan! Эти вещи уже позаботились, размер физического блока равен 512, а буфер записи - 1 МБ. Я согласен, что скорость будет меньше, чем указано продавцом, но еще 200 КБ очень меньше. –
«размер физического блока - 512» нет, он определенно не такой маленький для любой современной карты. Везде, где вы получили эту информацию, это ошибочно - это может отражать * эмулируемый * размер, а не физический, и это является главным подозреваемым в замедлении. Вы хотите соответствовать размеру блока и убедитесь, что блоки файловой системы совпадают с физическими, что может легко стать проблемой при попытках случайного формата. Вероятно, вы можете позволить себе гораздо больший буфер. –