Проблема при сохранении большого количества файлов в малине Pi

Ребята У меня проблема, когда я пишу /сохраняю много файлов в Raspberry Pi.

Я использую RaspiCam для записи видео в формате HD и в то же время я собираю много данных и записываю их в XML-файлы каждые 1 секунду. Данные собираются с частотой 10 Гц.

Я не знаю почему, но иногда, когда я сохраняю XML-файл, для сохранения файла требуется 3-4 секунды, это слишком много. Это происходит один раз в течение 30-40 секунд.

Это происходит очень часто, и я теряю данные из-за этого. Я пытался отлаживать, и я заметил, что когда это происходит, я вызываю функцию fopen .

Кто-нибудь знает, что происходит?

Я использую библиотеку tinyxml2 для записи и сохранения XML-файлов.

"Edited"

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

[INFO]: [OBD Buffer]: 0 [GPS Buffer]: 26    [IMU Buffer]: 3  [XML Time]: 0.988022(s)

[INFO]: [OBD Buffer]: 2 [GPS Buffer]: 45    [IMU Buffer]: 22 [XML Time]: 2.89335(s)

Как вы можете видеть, файлы XML сохранялись нормально, но для сохранения потребовалось 3 секунды. Из-за этого, когда мои другие потоки все еще работают и собирают данные, мои буферы OBD /GPS /IMU заполняются, и я начинаю терять данные, потому что при замораживании XML замораживается.

  

Решение: Мне пришлось увеличить время сохранения файлов XML. RaspbianOS не является хорошим выбором для работы в реальном времени. Я сохраняю файлы XML каждую минуту, и я больше не теряю информацию. Итак, чтобы подвести итог, я не могу сохранять файлы XML каждую секунду. Я думаю, что ответ nsilent22 может лучше описать его.

Спасибо всем за вашу поддержку.

4 голоса | спросил Lucas Casagrande 18 Jpm1000000pmMon, 18 Jan 2016 23:42:07 +030016 2016, 23:42:07

1 ответ


7

Ядро Linux кэширует операции с дисками. Это означает, что данные записываются не в режиме реального времени, а когда это «время сделать это».
Могут быть две причины поведения, которые вы описали:
1. Ваша SD-карта (или диск) не достаточно быстра, чтобы получать все данные, которые вы производите.
2. Через 30-40 секунд ядро ​​«промывает» это дисковые буферы, которые, к несчастью, замораживают все операции с дисками - и ваш процесс.
Не существует «лечения» по первой причине, кроме покупки более быстрой среды.
По второй причине вы можете попробовать следующее решение:

  1. Установите систему tmpfs (ramdisk) в некоторый каталог, например. /tmp /mydata ​​p>

    sudo mount tmpfs /tmp/mydata -t tmpfs

  2. Предоставьте себе права на запись в этот каталог:

    sudo chown youruserid:yourgroupid /tmp/mydata

  3. Сделайте вашу программу записью в этот каталог. Это будет молниеносно, так как это ramdisk. После написания каждого файла somename.XML вы также должны «коснуться» файла somename.XML.ready, чтобы сообщить, что somename.XML завершен.

  4. Запустите второй процесс, который будет контролировать /tmp /mydata для существования файлов somename.XML.ready, а затем переместит файл somename.XML на целевое дисковое устройство (и удалит somename.XML.ready).
  5. Второй процесс может застрять в течение нескольких секунд из-за операций с дисками, но позже он должен догнать (если ваш диск достаточно быстр), и ваш первый должен работать нормально, так как он не будет затронут.
ответил nsilent22 19 Jam1000000amTue, 19 Jan 2016 00:00:55 +030016 2016, 00:00:55

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132