Intereting Posts
Почему разные гиперпотоки имеют разную тактовую частоту? Почему я получаю «недопустимый максимальный счет» из grep в псевдониме? Может ли программное обеспечение GNU / Linux работать на GNU / Hurd? В чем разница между filename = $ {1: – / etc / hosts} и filename = / etc / hosts? «Команда не найдена», когда функция sudo'ing от ~ / .zshrc Вложенные списки на странице руководства Как добавить фильтр в свой grep-скрипт, чтобы НЕ включать строку? Сортировка списка и отдельных элементов с запятыми вместо строк новой строки Попытка настроить дополнительный виртуальный терминал на debian jessie boot IPtables: ограничение количества новых подключений ssh ​​в минуту Каков максимальный разрешенный размер файла (и папки) с помощью eCryptfs? Поставка дополнительных параметров ssh в файле конфигурации Простаивание процессора велико, но процессы изо всех сил стараются не отставать, как если бы процессор находился под большой нагрузкой Сервер Ubuntu / Debian / CentOS произвольно останавливается при загрузке Thunderbird неправильно отображает папки IMAP (учетная запись gmail)

Как диагностировать медленный перенос USB из встроенного Linux?

У меня есть плата с Cyclone V SE, которая содержит ARM CortexTM-A9 MPCore (одноядерный). На этой плате я запускаю linux 4.1.15, построенный с использованием Buildroot. При тестировании USB выяснилось, что в то время как пересылки Bulk OUT работают со скоростью около 20 МБ / с, пересылки Bulk IN работают со скоростью около 10 МБ / с. Для этого измерения я использовал g_zero на устройстве и простую программу на базе libusb на хосте.

Второе измерение было выполнено с использованием g_mass_storage на стороне устройства и dd на стороне хоста. Те же результаты.

Последнее испытание было выполнено с использованием комбинации ConfigFS, FunctionFS и моего приложения для пользовательского пространства, которое считывает / записывает данные из / в ОЗУ. Там я получил 10 МБ / с, но до 40 МБ / с OUT. Я ожидал, что скорость будет примерно одинаковой (по крайней мере, при работе с ОЗУ).

Я проверил объем в протоколе на USB в двух словах и не вижу очевидной причины, по которой IN должен быть значительно медленнее, чем OUT.

Теперь я знаю, что есть слишком много вещей, которые могут вызвать это, и я не ожидаю ответа «Медленность вызвана …». Но где я должен копать и какие инструменты я должен использовать для отслеживания?

Я считаю, что более медленная скорость является неотъемлемой частью используемого устройства.

Предполагая, что вы используете USB-ключ (который я бы использовал = D), я ожидал бы, что любая запись на устройство будет медленнее, чем чтение, из-за особых потребностей любого флеш-устройства (насколько я знаю, USB-ключи – это просто флеш-память с «аппаратным переводом» поверх нее, что делает его простым устройством блокировки). Устройство должно стереть целые блоки памяти, прежде чем он сможет записать даже один бит, следовательно, медленность. Кроме того, в конкретном случае USB-флеш-устройств кажется, что скорость сильно меняется .

Теперь, чтобы ответить на ваш вопрос: во-первых, я бы проверял ожидаемую скорость записи для устройства, которое я использую. Во-вторых, я хотел бы взглянуть на руководство пользователя и параметры ядра процессора, проверяя, есть ли какие-либо возможности DMA для связи через USB.