Linuxカーネルは、アイソクロナスUSBエンドポイントに割り当てる帯域幅の量をどのように決定しますか?

Linuxカーネルは、アイソクロナスUSBエンドポイントに割り当てる帯域幅の量をどのように決定しますか?

私が知っている限り、アイソクロナス転送を使用するUSB​​エンドポイントには "wMaxPacketSize"パラメータが接続されています。これはカーネルでエンドポイントの特定の帯域幅を確保するために使用されます。

私の記憶が正しい場合、この最大パケットサイズは0から1024バイト(高速転送の場合)の間である可能性があります。このパラメータは、Linuxシステムから高速コントローラの帯域幅割り当て(Mbps)にどのように変換されますか?

USB帯域幅の割り当てはどのような他の要因によって異なりますか?

ありがとうございます!

ベストアンサー1

少し調査を終えたら、今私の質問に答えることができます。高速デバイスの最大アイソクロナスパケットサイズは1024バイトです。各マイクロフレームは最大3つのパケットを持つことができ、マイクロフレームの幅は125マイクロ秒です。これは、ミリ秒ごとに8つのマイクロフレームを送信できることを意味します。

これは、3 * 1024 * 8 * 1000 = 23.438 MB / sの最大帯域幅割り当てを提供します(編集:mbpsを意味するために使用されます)。

wMaxPacketSizeパラメーターは、各パケットの最大サイズとマイクロフレームあたりのパケット数を格納するビットマップを含む2バイト値です。

したがって、帯域幅の割り当ては次のようになります。

(パケット/マイクロフレーム) * (max_packet_size) * (8 マイクロフレーム/ms) * (1000ms/s)

また、USB 2.0仕様によれば、総帯域幅の80%だけが、アイソクロナス転送や割り込み転送などの周期的な転送に割り当てることができることに注意することが重要です。

おすすめ記事