| Предыдущий | Следующий |
| kIOReturnUnsupportedMode | kIOReturnOverrun |
kIOReturnUnderrun
Потребитель достиг пустого участка потока
kIOReturnUnderrun сообщает, что данные отсутствовали в момент, когда они потребовались соответствующему пути ввода-вывода. Это проблема скорости потока, а не общее состояние отключения устройства. В зависимости от драйвера и направления пустым может оказаться FIFO устройства, DMA-кольцо или программная очередь. Поэтому без направления передачи и журналов конкретного семейства нельзя возлагать вину на приложение или оборудование.
Для работы реального времени или изохронной передачи данные, пропустившие своё окно доставки, обычно невозможно восстановить повтором. Один большой буфер может временно скрыть симптом, но увеличить задержку и всё равно не обеспечить устойчивую требуемую скорость производителя.
Что измерять
- Запишите уровень заполнения буфера, число передач в очереди, скорость производства, периодичность завершений и точное направление потока.
- Найдите первую опустевшую очередь: производителя приложения, границу пользовательского клиента, очередь драйвера или буфер устройства.
- Делайте обратные вызовы и обработчики завершения короткими, чтобы они не задерживали повторную отправку следующей передачи.
- Когда протокол допускает, используйте документированную глубину очереди и модель темпа, а не произвольные циклы повторов.
Ссылки
- Apple Developer: kIOReturnUnderrun
- Исходный код Apple XNU: IOReturn.h
- USB-IF: спецификация USB 2.0
- libusb: асинхронные и изохронные передачи
Нужно найти другой код? Найти другой код состояния или ошибки.
