Pull to refresh

Comments 33

Почему бы не записать туда большой файл, а потом не прочитать его оттуда, попутно измеряя скорость чтения?
Месье не ищет легких путей.
Тем более, что флэшка то может и поддреживать USB 3.0, но скорость ее будет низкая.
Если зайти на usb-flash-drives.whoratesit.com/ и посмотреть результаты по флешкам Kingston DataTraveler 3.0 (автор не уточнил модель), то можно увидить разницу в 5-6 раз по скорости на разных моделях!
Если скорость будет ниже, чем 33Мб/с, то уже не имеет значения, 3.0 там или 2.0
Судя по рейтингу, у используемого девайса показатель 34.7 MB/s. Но вопрос для нас был не в скорости обмена, а в функциональности — в поддержке протоколов.

Спасибо, кстати, за рейтинг. В UPD добавлено изображение тестового устройства.
Но вопрос для нас был не в скорости обмена, а в функциональности — в поддержке протоколов.

Академически красивая статья. На практике есть много более простых подходов)))
Спасибо! Ниже только что опубликована мотивация, почему и зачем.
Честно говоря, исследование производит сильное впечатление.

Но предпочитаю заливать многогиговый видеофайл, беспрерывно глядя на показатель скорости передачи в файловом менеджере.

Конечно, получается не настолько надёжно; но зато на порядок проще, чем в DOS перезагружаться.
Да и присутствует некоторая медитативность в наблюдении за скоростью и прогрессбаром.
UFO just landed and posted this here
предпочитаю заливать многогиговый видеофайл, беспрерывно глядя на показатель скорости передачи в файловом менеджере

time $(cp file.avi /mnt/myfleshka && umount /mnt/myfleshka) же :-)
Хаб «Интерфейсы». Ну-ну.
Воспользуемся документацией Intel 8 Series / С220 Series Chipset Family Platform Controller Hub Datasheet

Я аж на календарь посмотрел, но нет, не пятница.
Ничего вроде lsusb -v перед этим на ум не пришло?

Статье не хватает тега «садомазо».
Если у Вас есть накопитель USB 3.0, представьте, пожалуйста, результат работы lsusb -v, чтобы дать развернутый ответ.
Не могу ответить за Linux, но в OSX:

 ~ $ system_profiler SPUSBDataType
USB Hi-Speed Bus:
     ...
            iPhone:

              Product ID: 0x12a8
              Vendor ID: 0x05ac  (Apple Inc.)
              Version:  6.02
              Serial Number:
              Speed: Up to 480 Mb/sec
              Manufacturer: Apple Inc.
              Location ID: 0xfd120000 / 4
              Current Available (mA): 500
              Current Required (mA): 500
              Extra Operating Current (mA): 500

            Bluetooth USB Host Controller:

                  Product ID: 0x821f
                  Vendor ID: 0x05ac  (Apple Inc.)
                  Version:  1.31
                  Speed: Up to 12 Mb/sec
                  Manufacturer: Apple Inc.
                  Location ID: 0xfa113000 / 6
                  Current Available (mA): 500
                  Current Required (mA): 0
Нагуглил вот такой вывод

Bus 010 Device 002: ID 0bc2:3332 Seagate RSS LLC Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 3.00

Но информации как-то очень мало. Нужно будет действительно попробовать.
1. Дескрипторы устройств, доступные для просмотра с помощью различных информационных утилит индицируют потенциальные возможности устройства. Скоростной режим, установленный для USB порта при подключении устройства, не всегда соответствует возможностям, декларированным в дескрипторах.

Устройство, декларирующее поддержку USB 3.0, может работать в режиме USB 2.0 из-за заводских недоработок, неисправного кабеля и многих других причин. При этом содержимое дескрипторов может указывать на поддержку режима USB 3.0.

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

Конечно, содержимое дескрипторов устройства — это более достоверный источник информации, чем надпись на флешке и клятвы продавца. Но по причинам, указанным выше, достоверность отлична от 100 процентов.

Именно стремление довести достоверность до 100% побудила нас на экстремально низкоуровневые исследования.

2. Другой метод – проследить в диспетчере устройств, какой контроллер является родительским для флешки (USB 2.0 EHCI или USB 3.0 XHCI), также неэффективен, так как, согласно спецификации, контроллер USB 3.0 XHCI может поддерживать все виды устройств: от Low-Speed до Super Speed. Поэтому, из того, что для флешки родительским контроллером является xHCI не следует, что устройство работает в режиме Super Speed.
Спасибо за разъяснения, было бы хорошо это в статье сразу написать, чтоб понятно было зачем всё так сложно.

Но в итоге получается что всё равно тестируется не конечное устройство, а связка конкретный хост-контроллер и конкретное устройство. Ведь недоработки могут быть и в контроллере теоретически. Либо недоработки в устройстве могут привести к тому, что с разными контроллерами будут установлены разные скоростные режимы.

Вот еще что нашел
/proc/bus/usb/devices output format:

Legend:
  d = decimal number (may have leading spaces or 0's)
  x = hexadecimal number (may have leading spaces or 0's)
  s = string


Topology info:

T:  Bus=dd Lev=dd Prnt=dd Port=dd Cnt=dd Dev#=ddd Spd=dddd MxCh=dd
|   |      |      |       |       |      |        |        |__MaxChildren
|   |      |      |       |       |      |        |__Device Speed in Mbps
|   |      |      |       |       |      |__DeviceNumber
|   |      |      |       |       |__Count of devices at this level
|   |      |      |       |__Connector/Port on Parent for this device
|   |      |      |__Parent DeviceNumber
|   |      |__Level in topology for this bus
|   |__Bus number
|__Topology info tag

    Speed may be:
    	1.5	Mbit/s for low speed USB
	12	Mbit/s for full speed USB
	480	Mbit/s for high speed USB (added for USB 2.0);
		  also used for Wireless USB, which has no fixed speed
	5000	Mbit/s for SuperSpeed USB (added for USB 3.0)


У меня /proc/bus/usb отсутствует, но зато есть

root@server:~# cat /sys/bus/usb/devices/usb*/speed
480
480
12


Как Вы думаете, можно этому доверять?
С точки зрения производительности — вполне. Если судить с точки зрения функциональности, то информации недостаточно.
Предположительно, у Вас в эксплуатации достаточно новая, но не самая современная платформа, оснащенная контроллерами USB 1.1 и USB 2.0. High-Speed устройства скоммутированы на EHCI, а Full-Speed — на UHCI/OHCI (скорее всего, UHCI, так как вероятнее всего — это Intel). Для недоразумений места почти не осталось.
И тем не менее, какими бы могли быть сюрпризы в данной архитектуре USB?

Сценарий 1. Устройство с характеристикой 12 Mbit/s может оказаться два-нольным, но подключенным к USB 1.1 UHCI/OHCI по причине деградации контактов разъема или в силу плохого качества интерфейсного кабеля (косичек подключения разъемов на лицевой панели десктопа). Это легко определяется любым софтом, типа USB Info, UTLite etc., так как USB 2.0 устройство «отдает» два-нольные дескрипторы.

Сценарий 2. У Вас платформа типа Intel P55 или новее, но без встроенного в чипсет USB 3.0, реализованная не с помощью контроллеров-компаньонов 2.0+1.1, а с использованием архитектуры Rate Matching Hub. По сути, ситуация аналогична выше упомянутой, с той лишь разницей, что сложнее понять, почему устройство работает по Full-Speed. Но причины возможного даунгрейда прежние.

С появлением USB 3.0 количество вариантов увеличивается. Ничто не мешает китайскому производителю сделать два-нольную флешку, коммутируя ее автономный контроллер на пять ламелей разъема USB 3.0 (заглушив при этом четыре ламели USB 2.0). Девайс при этом будет подключен к xHCI-контроллеру на системной платформе, но не будет обеспечивать Super Speed, передавая данный по High-Speed. Такая ситуация очень cложно отслеживается. Особенно, если не загружена драйверная поддержка USB Flash. В силу того, что при корректной реализации платформы все USB 3.0 устройства до этого момента должны по умолчанию коммутироваться на USB 2.0 контроллер.
Интересно, зачем этой флешке 3.0, она как раз соответствует теоретическому максимуму USB 2.0
Speed3
16GB, 32GB, 64GB: 40MB/s read, 10MB/s write
То ли дело DataTraveler R3.0, у которой в виндовсе скорость чтения 70Мб, дос не нужен, чтобы увидеть, что она 3.0.
Флешка покупалась для того, чтобы проверить ряд возможностей новой и неисследованной платформы Tyan S5533. Подключение ее к EHCI на другой плате показало, что в дескрипторах указаны значения, соответствующие High Speed. Возникла идея, что при подключении к xHCI контроллер флешки должен выдавать другие дескрипторы, соответствующий Super Speed. Как говорится, идея нашлась, а осадочек остался :)
Пришлось рыть фундаментально.
Насколько я помню, теоретическая максимальная скорость USB 2.0 недостижима из-за высокой паузы между сигналами. На практике максимальная скорость раза в полтора меньше
Еще один важный момент: содержимое дескрипторов USB устройства (которые доступны для просмотра средствами ОС или отдельными утилитами), используется для информирования программного обеспечения о поддерживаемых режимах и не используется в процедуре выбора скоростного режима порта. Последняя выполняется исключительно аппаратно, ведь чтение дескрипторов можно выполнить только после того, как скорость порта уже установлена. Именно поэтому существует вероятность «подлога» – декларации режима USB 3.0 для устройства, не поддерживающего этот режим. При этом такой «подлог» не приведет к нарушению работы устройства, поскольку дескрипторы не имеют прямого влияния на процедуру выбора скоростного режима. Из этого следует, что мы не можем полностью доверять содержимому дескрипторов.
UFO just landed and posted this here
В USB 3.0 устройстве мы имеем олдскульный USB 2.0 интерфейс из 4-х сигналов (Дата+, Дата-, земля и питание) и пять линий для общения собственно по USB 3.0 (извините, напомню: RX+, RX- и TX+, TX- плюс земля). Недобросовестный производитель может использовать только сигналы USB2, затерминировав или оставив в воздухе сигналы из USB 3.0. Процесс распознавания флешки в этом случае будет выполняться только по интерфейсу USB 2.0.

Но? несмотря на это, флешка может обслуживаться контроллером XHCI (его USB2-подсистемой). Напомним, что контроллер XHCI состоит из двух подсистем: USB2.0 и USB3.0. Поэтому из того факта, что в диспетчере устройств родительским устройством является контроллер XHCI, не следует, что используется режим Super-Speed.
UFO just landed and posted this here
Один из вариантов реакции — переход в режим USB 2.0 с использованием "старых" сигнальных цепей USB 2.0.
Даже в том случае, если контроллер откажется работать с устройством и не выполнит переход в режим
USB 2.0 аппаратно, то это может сделать драйвер, изменив содержимое регистров Port Super Speed Enable
(обнулив бит, соответствующий данному порту).

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

dd if=bigfile of=/dev/sda1

и посмотреть на скорость записи?
Не всегда можно получить ответы на поставленные вопросы.
Спасибо за статью. Лишней данная публикация, не будет!
Столько времени прошло с момента публикации, но актуальность еще не утеряна? :)
Ну, знаете, актуальность определяется практикой. Есть запрос практики, вот и интерес. Тем более, что подача материала… располагает к прочтению, не однодневка.
Sign up to leave a comment.

Articles