Como o kernel do Linux decide quanta largura de banda alocar aos terminais USB Isochronous?

5

Tanto quanto sei, os endpoints USB que usam transferências isócronas têm um parâmetro 'wMaxPacketSize' associado a eles que é usado pelo kernel para garantir uma certa quantidade de largura de banda para o endpoint.

Se não me engano, este tamanho máximo de pacote pode variar entre 0 e 1024 bytes (para transferências de alta velocidade). Como esse parâmetro se traduz em alocação de largura de banda em termos de Mbps de um controlador de alta velocidade (EHCI) em um sistema Linux?

Quais outros fatores, se algum, a alocação de largura de banda USB depende?

Obrigado!

    
por bsirang 11.01.2012 / 03:39

1 resposta

3

Depois de alguma pesquisa, agora posso responder minha própria pergunta. O tamanho máximo do pacote isócrono para dispositivos de alta velocidade é de 1024 bytes. Pode haver até três pacotes por microframe e uma microframe tem 125 microssegundos de largura, o que significa que pode haver 8 microframes transferidos por milissegundo.

Isso nos dá uma alocação máxima de largura de banda de 3 * 1024 * 8 * 1000 = 23,438 MB / s (editar: usado para dizer mbps)

O parâmetro wMaxPacketSize é um valor de dois bytes que contém um mapeamento de bit do tamanho máximo por pacote e do número de pacotes por microframe que está armazenado.

Assim, a alocação de largura de banda é a seguinte:

(pacotes / microframe) * (max_packet_size) * (8 microframes / milissegundos) * (1000ms / s)

Também é importante observar que, por especificação USB 2.0, apenas 80% da quantidade total de largura de banda pode ser alocada para transferências periódicas, como transferências isócronas e interrupções.

    
por 13.01.2012 / 02:14