Что означает код возврата ядра macOS 0xE00002E7 (kIOReturnUnderrun)?

 
Предыдущий Следующий
kIOReturnUnsupportedMode kIOReturnOverrun

kIOReturnUnderrun

Потребитель достиг пустого участка потока

kIOReturnUnderrun сообщает, что данные отсутствовали в момент, когда они потребовались соответствующему пути ввода-вывода. Это проблема скорости потока, а не общее состояние отключения устройства. В зависимости от драйвера и направления пустым может оказаться FIFO устройства, DMA-кольцо или программная очередь. Поэтому без направления передачи и журналов конкретного семейства нельзя возлагать вину на приложение или оборудование.

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

Что измерять

  • Запишите уровень заполнения буфера, число передач в очереди, скорость производства, периодичность завершений и точное направление потока.
  • Найдите первую опустевшую очередь: производителя приложения, границу пользовательского клиента, очередь драйвера или буфер устройства.
  • Делайте обратные вызовы и обработчики завершения короткими, чтобы они не задерживали повторную отправку следующей передачи.
  • Когда протокол допускает, используйте документированную глубину очереди и модель темпа, а не произвольные циклы повторов.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.