Вопрос или проблема
У меня есть корпус 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 драйверов. Один из распространенных подходов ‒ это ограничение максимальной скорости соединения через настройки драйвера или через командную оболочку.
Применение:
-
Отключение модуля UAS:
Сначала попробуйте отключить использование драйвера UAS (USB Attached SCSI), который может вызывать проблемы. Для этого:- Откройте файл конфигурации модулей:
/etc/modprobe.d/blacklist.conf
. - Добавьте строку
blacklist uas
в этот файл чтобы предупредить загрузку модуля UAS. - Перезагрузите систему и проверьте, определяет ли систему ваш USB устройство как медленное устройство.
- Откройте файл конфигурации модулей:
-
Принудительное ограничение скорости:
К сожалению, прямых команд для ограничения скорости USB устройств не предусмотрено, но можно попытаться изменить конфигурацию контроллера USB или протестировать различные переферийные настройки. Следующий пример показывает подход к снижению скорости с помощью инструментов настройки питания:- Откройте файл
/etc/default/grub
. - Найдите строку
GRUB_CMDLINE_LINUX_DEFAULT
илиGRUB_CMDLINE_LINUX
. - Добавьте параметр
usbcore.autosuspend=-1
к данной строке. - Обновите конфигурацию загрузчика через
sudo update-grub
и перезагрузите систему. Параметр отключает автоматическую настройку режимов и может повлиять на определение устройства.
- Откройте файл
-
Проверка аппаратных обновлений:
Попробуйте обновить прошивку USB контроллера и BIOS вашей материнской платы, так как это иногда решает проблемы совместимости. Проверьте документацию вашего производителя на наличие обновлений и следуйте их инструкциям для прошивки новых версий. -
Использование старого ядра:
Иногда обновления Ядра вносят новые баги или проблемы совместимости. Попробуйте загрузиться с предыдущей версией ядра, чтобы проверить, исчезают ли ошибки. Для этого можно использовать загрузочное меню GRUB. -
Сообщение об ошибке:
Если у вас всё ещё возникают проблемы после предпринятых шагов, изъятие журнала ошибок (черезdmesg
) и сообщение о проблеме в хранилище багов вашего дистрибутива или на форуме разработчиков может помочь. Разработчики частенько необходимы журналы для анализа и последующего исправления проблем.
Сводка:
Эффективное решение для альтернативного задания скорости USB устройства может включать изменения конфигураций ядра, подключение через альтернативные аппаратные возможности или даже вмешательство в отладочные настройки системы. Ваш вариант зависит от обоснованного понимания аппаратной совместимости и минимально возможного уровня вмешательства, чтобы обеспечить стабильную работу USB контроллера в вашей системе.