Como diagnosticar a transferência USB lenta do linux embutido?

4

Eu tenho uma placa com o Cyclone V SE, que contém ARM CortexTM-A9 MPCore (single core). Nesta placa eu executo o linux 4.1.15 construído usando o Buildroot. Ao testar o USB, descobriu-se que, enquanto as transferências em massa são executadas a cerca de 20 MB / s, as transferências em massa são executadas a cerca de 10 MB / s. Para esta medição eu usei o g_zero no dispositivo e um programa simples baseado em libusb no host.

A segunda medição foi feita usando g_mass_storage no lado do dispositivo e dd no lado do host. Mesmos resultados.

O último teste foi feito usando uma combinação de ConfigFS, FunctionFS e meu aplicativo userspace que leu / gravou dados de / para RAM. Lá eu tenho 10MB / s IN, mas até 40MB / s OUT. Eu esperava que as velocidades fossem mais ou menos iguais (pelo menos quando se trabalha com RAM).

Eu verifiquei o volume no protocolo em USB em poucas palavras e não vejo nenhum motivo óbvio para isso deve ser significativamente mais lento que OUT.

Agora eu sei que há muitas coisas que podem causar isso e não espero uma resposta "A lentidão é causada por ...". Mas onde devo cavar e que ferramentas devo usar para rastreá-lo?

    
por Adam Trhon 04.08.2016 / 18:03

1 resposta

0

Acredito que a velocidade mais lenta é intrínseca ao dispositivo que você está usando.

Supondo que você use um dongle USB (que é o que eu usaria = D), eu esperaria que qualquer gravação em um dispositivo seria mais lenta do que uma leitura, devido às necessidades específicas de qualquer dispositivo flash (tanto quanto Eu sei, dongles USB são simplesmente memórias flash com um 'hardware de tradução' em cima dele, tornando-o aparecer como um dispositivo de bloco simples). O dispositivo precisa apagar blocos inteiros de memória antes de poder escrever um único bit, daí a lentidão. Além disso, no caso específico dos dispositivos flash USB, parece que a velocidade varia bastante .

Agora, para responder à sua pergunta: primeiro, eu verificaria a velocidade de gravação esperada para o dispositivo que estou usando. Segundo, eu daria uma olhada no guia do usuário do processador e nas opções de kernel, verificando se existem opções de DMA disponíveis para comunicação via USB.

    
por 21.11.2016 / 13:57

Tags