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

Linux+ запись на flash/sd card

Здравствуйте, коллеги. 

Проблема следующая... Есть 2-ядерный SOC на нем крутится Линукс. К плате подключены 2 камеры.

Система обрабатывает равки. Производительности хватает с запасом. Проблемы начинаются при записи жипегов

на внешнюю флеш или SD карту. Время от времени система становится колом на 2200-300 или даже 800 мкс.

В эти моменты не обрабатываются прерывания от равки, происходит потеря кадров.

Чтение/обработка равок и запись на внешний носитель происходят в разных потоках.

Клинит систему нестабильно - может минут 10-20 работать без тормозов, потом начинаются клины

Как бы оптимизировать этот процесс ? 

Я пробовал играться с настройками dirty_expire_centisecs, dirty_background_ratio, min_free_kbytes, но особого прогресса не получил...

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


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

Вечер добрый.

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

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


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

21 hours ago, magvrn said:

Вечер добрый.

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

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

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


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

2 hours ago, aaarrr said:

А какая версия ядра?

3.18... но пробовал и свежие, результат такой же

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


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

Равки это что? Необработанный кадр?

Я бы попробовал gstreamer. У него есть много вариантов обработки/сжатия и пересылки/записи. Можно поиграть поискать оптимальный вариант.
Есть ускоритель какого-то сжатия или все софтом делается?

Уточните, вы видео пишете или фотографии. Если видео, то JPEG не лучший вариант.

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


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

8 hours ago, Tarbal said:

Равки это что? Необработанный кадр?

Да

 

8 hours ago, Tarbal said:

Есть ускоритель какого-то сжатия или все софтом делается?

Сжатие на ПЛИС делается

8 hours ago, Tarbal said:

Уточните, вы видео пишете или фотографии. Если видео, то JPEG не лучший вариант.

Фотографии, но 25 кадров в сек ) Я понимаю, что система не оптимальна, но аппаратных Н264\265 на ней нет и не будет

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


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

On 6/28/2021 at 2:04 AM, карамболь said:

В эти моменты не обрабатываются прерывания от равки, происходит потеря кадров.

Найдите причину.
Или в каком-то прерывании процессор сидит или кто-то запрещает прерывания. 

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


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

On 6/28/2021 at 9:04 AM, карамболь said:

Есть 2-ядерный SOC на нем крутится Линукс.

попробуйте вручную прерывание от используемого SD хоста повесить на второе ядро, по умолчанию они обрабатываются первым ядром и автоматом на армах помоему не раскидваются на SMP

https://www.kernel.org/doc/html/v5.10/core-api/irq/irq-affinity.html

второй вариант - попробовать повысить приоритет (man chrt) для своего приложения, если в штатном ядре ничего не даёт - накатить RT-патч и повысить приоритет своему приложению. Был случай - старое ядро, где-то в драйверах происходил дедлок, система висла намертво, с RT патчем дедлок не оказывал никаого влияния - система продолжала работать, потом я нашёл спинлок который вызывал  дедлок.

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


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

On 6/28/2021 at 9:04 AM, карамболь said:

на внешнюю флеш или SD карту

 

On 6/29/2021 at 11:42 PM, карамболь said:

3.18... но пробовал и свежие, результат такой же

Как-то не похоже, что система виновата: разные носители, разные ядра - результат один.

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


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

Частично решил проблему. Если кому интересно -

Затыкается при записи в файловую систему. 

1. Вынес запись жипегов в отдельное приложение.

2. Жипеги передаю через fifo (mkfifo)

3. Сделал на флэшке два раздела без форматирования

4. Пишу параллельно два потока через низкоуровневые функции (open, write, lseek)

5. Добавил в  жипеги простенький хэдер для дальнейшего парсинга

 

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


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

4 hours ago, карамболь said:

4. Пишу параллельно два потока через низкоуровневые функции (open, write, lseek)

Которые, в отличие от fopen/fwrite/fseek, небуферизованные

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


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

3 hours ago, gosha-z said:

Которые, в отличие от fopen/fwrite/fseek, небуферизованные

Именно !

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


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

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

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

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

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

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

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

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

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

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