임베디드 Linux에서 느린 USB 전송 속도를 진단하는 방법은 무엇입니까?

임베디드 Linux에서 느린 USB 전송 속도를 진단하는 방법은 무엇입니까?

저는 ARM CortexTM-A9 MPCore(단일 코어)가 포함된 Cyclone V SE 보드를 가지고 있습니다. 이 보드에서는 Buildroot로 빌드된 Linux 4.1.15를 실행하고 있습니다. USB를 테스트할 때 대량 OUT 전송은 약 20MB/s로 실행되는 반면, 대량 전송은 약 10MB/s로 실행되는 것으로 나타났습니다. 이 측정을 위해 장치에서는 g_zero를 사용하고 호스트에서는 간단한 libusb 기반 프로그램을 사용했습니다.

두 번째 측정은 장치 측에서 g_mass_storage를 사용하고 호스트 측에서 dd를 사용하여 수행됩니다. 결과는 동일합니다.

마지막 테스트는 ConfigFS, FunctionFS 및 RAM에서 데이터를 읽거나 RAM에 쓰는 사용자 공간 애플리케이션의 조합을 사용하여 수행되었습니다. 입력 속도는 10MB/s, 출력 속도는 최대 40MB/s입니다. 속도는 거의 비슷할 것으로 예상합니다(적어도 RAM을 사용할 때는).

프로토콜에서 많은 내용을 확인했습니다.간단히 말해서 USB그리고 IN이 OUT보다 훨씬 느린 이유가 무엇인지도 알 수 없습니다.

이제 나는 이 문제를 일으킬 수 있는 것들이 너무 많다는 것을 알고 있으며 "속도 저하의 원인은..."이라는 대답을 기대하지 않습니다. 하지만 이를 추적하려면 어디를 파고 어떤 도구를 사용해야 할까요?

답변1

나는 느린 속도가 당신이 사용하는 장치에 내재되어 있다고 생각합니다.

플래시 장치의 특정 요구 사항으로 인해 USB 동글(=D를 사용하겠습니다)을 사용한다고 가정합니다(제가 아는 한 USB 어댑터는 간단합니다).플래시 메모리상단에는 단순한 블록 장치처럼 보이게 하는 "번역 하드웨어"가 있습니다. 이 장치는 단일 비트라도 쓰기 위해 전체 메모리 블록을 지워야 했기 때문에 속도가 느려졌습니다. 또한 USB 플래시 장치의 특정 경우에는속도가 많이 차이 나네요.

이제 귀하의 질문에 답해 보겠습니다. 먼저 제가 사용하고 있는 장치의 예상 쓰기 속도를 확인하겠습니다. 둘째, USB 통신에 사용할 수 있는 DMA 옵션이 있는지 확인하기 위해 프로세서의 사용자 가이드와 커널 옵션을 살펴보겠습니다.

관련 정보