Не зная больше о ваших конкретных обстоятельствах, я могу предложить только следующие предположения:
Попробуйте использовать fsync () / sync (), чтобы заставить ядро чаще сбрасывать данные на устройство хранения. Похоже, ядро буферизует все ваши записи, а затем связывает шину или иным образом останавливает вашу систему во время выполнения фактической записи. С осторожными вызовами fsync () вы можете попытаться запланировать записи по системной шине более детально.
Возможно, имеет смысл структурировать приложение таким образом, чтобы задача кодирования / захвата (вы не упомянули захват видео, поэтому я делаю здесь предположение - возможно, вы захотите добавить больше информации) запускается в своей задаче. собственный поток и буферизует его вывод в пользовательском пространстве - тогда второй поток может обрабатывать запись на устройство. Это даст вам буфер сглаживания, чтобы кодировщик всегда заканчивал свои записи без блокировки.
Одна вещь, которая звучит подозрительно, это то, что вы видите эту проблему только при определенной скорости передачи данных - если бы это действительно была проблема с буферизацией, я бы ожидал, что проблема будет возникать реже при более низких скоростях передачи данных, но я все же ожидал бы чтобы увидеть эту проблему.
В любом случае, дополнительная информация может оказаться полезной. Какова архитектура вашей системы? (В самых общих чертах.)
Учитывая предоставленную вами дополнительную информацию, похоже, что пропускная способность устройства довольно мала для небольших записей и частых сбросов. Если вы уверены, что для больших операций записи вы можете получить достаточную пропускную способность (и я не уверен, что это так, но файловая система может делать что-то глупое, например, обновлять FAT после каждой записи), тогда иметь данные о потоках кодирования потоку записи с достаточной буферизацией в потоке записи, чтобы избежать зависаний. В прошлом я использовал кольцевые буферы с общей памятью для реализации такого рода схемы, но любой механизм IPC, который позволял бы записывающему устройству записывать в процесс ввода-вывода без остановки, если буфер не переполнен, должен справиться с задачей.