Медленно бесплатно () на Raspberry Pi - PullRequest
0 голосов
/ 02 февраля 2020

Я отлаживаю часть аудиопрограммы, требующей небольшой задержки, но зависящей от работы без xruns. Я уменьшил проблему, чтобы быть в вызове до free(). Это довольно большой блок данных для освобождения.

Это на Raspberry Pi 3 с использованием Linux и g cc (целевой armhf). Программное обеспечение использует pthread и приоритет в реальном времени. Мне нужно разрешить задержку 21 мс, чтобы использовать программное обеспечение без изменений. Если вы комментируете вызов free(), я могу выполнить его в течение 5 мс без xruns.

Есть ли способ ускорить вызов free()? Может быть, использовать какой-то механизм сборки мусора, работающий в потоке с низким приоритетом?

Обновление

После некоторых исследований выясняется, что free() на самом деле работает в низком уровне приоритетная тема уже. Единственное, что происходит в потоке реального времени, - это одновременная передача данных на аудиоустройство и с него (четыре канала на входе и четыре на выходе). Несмотря на это, free() вызывает xruns. Это заставляет меня задуматься, не может ли free() быть прерван даже планировщиком в реальном времени на цели armhf? Размер объекта, который должен быть освобожден, составляет 2 МБ.

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

...