История изменений
Исправление KivApple, (текущая версия) :
Так много ж хранить данных не надо. Обычно если идёт большой поток данных по USB, то он постоянный (условно, если юзер включил камеру и она шлёт видео с битрейтом N мегабит, то он вряд ли будет особо меняться, пока юзер камеру не отключит, никаких временных затиший не будет). А значит если у нас в очереди сотни пакетов и мы не успеваем их отправлять, значит пропускной способности всё равно не хватит, поэтому можно дропнуть лишние пакеты. Нет смысла хранить слишком много пакетов, которые всё равно не успеют никогда уйти. Кстати, USB умеет перепосылку пакетов при сбоях. Так что по сути такой алгоритм будет работать как шейпер. Если скорости хватает всем девайсам (суммарный поток от всех девайсов не превышает пропускную способность канала от хаба до компа), то всё ок. Если нет, то скорость падает, идёт потеря кадров и т. д. В обычном USB, кстати, будет похожая ситуация - магии не бывает и возможна ситуация, когда хост не сможет спланировать все транзакции, которые захотел юзер.
Хабу хватит памяти для того, чтобы вместить все пакеты от всех устройств, пришедшие в течении, скажем, 1 миллисекунды. Контрольные посылки если дропнутся не страшно - переотправятся. А мультимедиа-потоки, если не влезают в шину в течении одной миллисекунды, значит никогда не влезут, пока юзер не изменит конфигурацию оборудования.
Исходная версия KivApple, :
Так много ж хранить данных не надо. Обычно если идёт большой поток данных по USB, то он постоянный (условно, если юзер включил камеру и она шлёт видео с витрейтом N мегабит, то он вряд ли будет особо меняться, пока юзер камеру не отключит, никаких временных затиший не будет). А значит если у нас в очереди сотни пакетов и мы не успеваем их отправлять, значит пропускной способности всё равно не хватит, поэтому можно дропнуть лишние пакеты. Нет смысла хранить слишком много пакетов, которые всё равно не успеют никогда уйти. Кстати, USB умеет перепосылку пакетов при сбоях. Так что по сути такой алгоритм будет работать как шейпер. Если скорости хватает всем девайсам (суммарный поток от всех девайсов не превышает пропускную способность канала от хаба до компа), то всё ок. Если нет, то скорость падает, идёт потеря кадров и т. д. В обычном USB, кстати, будет похожая ситуация - магии не бывает и возможна ситуация, когда хост не сможет спланировать все транзакции, которые захотел юзер.