Как заставить Linux распознать USB 3.x устройство как 5 Гбит/с?

Вопрос или проблема

У меня есть корпус USB 3 NVMe, подключенный к мини-ПК с процессором Intel Celeron N5100. Как показано в выводе lsusb -t, Linux распознает корпус как устройство с пропускной способностью 10 Гбит/с.

$lsusb -t | grep uas
    |__ Port 001: Dev 005, If 0, Class=Mass Storage, Driver=uas, 10000M

Скорость передачи впечатляющая — 800 МБ/с в секунду в начале. Однако вскоре передача останавливается. В dmesg появляются различные ошибки ввода-вывода, которые я не могу сейчас воспроизвести, так как ошибки приводят к зависанию системы.

Я подозреваю, что проблема связана с тем, что модуль XHCI распознает устройство как устройство класса USB 3.2 скоростью 10 Гбит/с вместо того, чтобы распознавать его как устройство USB 3.1 скоростью 5 Гбит/с. Корпус USB 3 работал без проблем на моем старом ноутбуке с процессором Intel Core i3 2014 года (который, к сожалению, недавно был украден).

Есть ли способ заставить Linux назначить меньшую скорость 5 Гбит/с для корпуса USB?

Кстати, ошибки ввода-вывода не появляются, когда я подключаю корпус с использованием кабеля USB 2, что заставляет Linux распознавать устройство как USB 2. Однако это ограничивает скорость передачи до ужасных 40 МБ/с.

Ответ или решение

Теория:

Ваша проблема связана с совместимостью и стабильностью работы USB 3.x устройств в Linux среде. В особенно великом числе случаев, причиной сбоев передачи данных могут являться ошибки в драйверах, аппаратные ограничения или несовместимости. Вы указали, что ваша NVMe оболочка определяется в системе как устройство USB 3.2 Gen 2 (10 Гбит/с), но возникает ряд ошибок ввода-вывода и, в конечном итоге, система зависает. Это свидетельствует о возможных несоответствиях в работе драйвера xHCI или о проблемах с совместимостью аппаратного обеспечения между NVMe оболочкой и вашим Intel Celeron N5100.

Пример:

Для выбора режима работы устройства с меньшей пропускной способностью есть разный опыт пользователей Linux, который можно использовать. Некоторые пользователи успешно решали такую проблему, изменяя конфигурации xHCI или специфических USB драйверов. Один из распространенных подходов ‒ это ограничение максимальной скорости соединения через настройки драйвера или через командную оболочку.

Применение:

  1. Отключение модуля UAS:
    Сначала попробуйте отключить использование драйвера UAS (USB Attached SCSI), который может вызывать проблемы. Для этого:

    • Откройте файл конфигурации модулей: /etc/modprobe.d/blacklist.conf.
    • Добавьте строку blacklist uas в этот файл чтобы предупредить загрузку модуля UAS.
    • Перезагрузите систему и проверьте, определяет ли систему ваш USB устройство как медленное устройство.
  2. Принудительное ограничение скорости:
    К сожалению, прямых команд для ограничения скорости USB устройств не предусмотрено, но можно попытаться изменить конфигурацию контроллера USB или протестировать различные переферийные настройки. Следующий пример показывает подход к снижению скорости с помощью инструментов настройки питания:

    • Откройте файл /etc/default/grub.
    • Найдите строку GRUB_CMDLINE_LINUX_DEFAULT или GRUB_CMDLINE_LINUX.
    • Добавьте параметр usbcore.autosuspend=-1 к данной строке.
    • Обновите конфигурацию загрузчика через sudo update-grub и перезагрузите систему. Параметр отключает автоматическую настройку режимов и может повлиять на определение устройства.
  3. Проверка аппаратных обновлений:
    Попробуйте обновить прошивку USB контроллера и BIOS вашей материнской платы, так как это иногда решает проблемы совместимости. Проверьте документацию вашего производителя на наличие обновлений и следуйте их инструкциям для прошивки новых версий.

  4. Использование старого ядра:
    Иногда обновления Ядра вносят новые баги или проблемы совместимости. Попробуйте загрузиться с предыдущей версией ядра, чтобы проверить, исчезают ли ошибки. Для этого можно использовать загрузочное меню GRUB.

  5. Сообщение об ошибке:
    Если у вас всё ещё возникают проблемы после предпринятых шагов, изъятие журнала ошибок (через dmesg) и сообщение о проблеме в хранилище багов вашего дистрибутива или на форуме разработчиков может помочь. Разработчики частенько необходимы журналы для анализа и последующего исправления проблем.

Сводка:

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

Оцените материал
Добавить комментарий

Капча загружается...