Pergunta

Desenvolvi um driver de dispositivo para um dispositivo USB 1.1 ONR Windows 2000 e, posteriormente, com o Modelo de Driver do Windows (WDM).

Meu problema é o desempenho muito ruim do TX ao usar transferências em massa 64byte. Dependendo do controlador host USB usado, a taxa de transferência máxima de pacotes é de 1000 pacotes (UHCI) ou 2000 pacotes (OHCI) por segundos. Eu desenvolvi um driver semelhante no Linux Kernel 2.6 com cerca de 5000 pacotes por segundo.

O driver Linux usa até 10 transferência de granel assíncrona enquanto o driver do Windows usa 1 transferência síncrona em massa. Portanto, comparar isso deixa claro enquanto o desempenho é tão ruim, mas eu já tentei com transferências em massa assíncronas também sem sucesso (sem ganho de desempenho).

Alguém tem algumas dicas e truques como aumentar o desempenho no Windows?

Foi útil?

Solução

Agora consegui acelerar o envio para cerca de 6,6k mensagens/s. A solução foi bem simples, acabei de implementar o mesmo mecanismo do driver Linux.

Então agora estou agendando até 20 URBs de uma só vez, pelo que devo dizer, funcionou.

Outras dicas

Que tipo de taxa de transferência você está recebendo? USB 1.1 é limitado a cerca de 1,5 Mbit/s

Pode ser uma limitação com a qual você terá que conviver, a única coisa que você nunca deve fazer é morrer de fome no sistema para obter recursos. Eu já vi tantas implementações ruins de motorista em que o motorista está monopolizando os recursos do sistema em falha total em aumentar seu próprio desempenho.

Meu palpite é que você está usando as chamadas de API erradas, você já viu as amostras USB no DDK Win32?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top