Дополнительные USB 3.0 порты для Oculus Rift: пропускная способность, питание, решения

Скорее всего, у вас в системе нет 5 лишних USB 3.0. Можно воспользоваться разветвителями, но тут нужно понимать, что придётся делить пропускную полосу 5 gbps между каждым устройством.

Поэтому нормальное решение — использовать карту расширения, для PCI Express. Кстати зачастую тесты производительности USB 3.0 с таких карт показывают результаты раза в 1.5 выше, чем с встроенных в материнку портов USB 3.0. Так что нужно тестировать.

Только здесь нужно начать думать.

UDP: либо можно не думать, а сразу начать с 5 пункта "На самом деле полезная информация".

Пропускная способность

Вот у нас есть такая табличка пропускных способностей PCI-E:

Таблица скоростей PCI Express

 

Карты расширения как правило бывают х1 или х4. Отличить просто: х4 длиннее та часть, что вставляется в PCI-E. Так вот если у вас, как у меня, PCI Express 2.0, х1 плата расширения максимум сможет выдать ту же скорость, что и один USB 3.0 = 500 MB/s. (напоминаю, 1 байт = 8 бит)

Если у вас PCI Express 3.0, будет скорость как у двух портов USB 3.0. Посмотрите в инструкции к своей материнской плате, какая версия у ваших PCI-E.

Так вот, сами понимаете, если вы купите плату, дающую 5 портов USB 3.0, но вставите в x1 PCI-E 2.0, само собой скорости не хватит. Будет практически как USB 2.0. С тем же успехом можно было разветвитель в обычный USB 3.0 вставить.

Поэтому в данной ситуации единственное, что может подойти, это плата расширения PCI-E x4. Я видел такие платы только для USB Type C, что тоже хорошо:

Скорости интерфейсов PCI Express и USB

 

Здесь нужно понимать. USB Type C — это просто форма разъёма. Такая овальная, которую можно вставить любой стороной. А вот USB 3.1 или Thunderbolt 3 — это названия протоколов, по которым через этот разъём всё работает. Поэтому для одной и той же дырки Type C скорость может быть как 10 gbps, так и 40 gbps в случае Thunderbolt 3.

Если у вашей дырки есть Thunderbolt 3, производитель скорее всего это разрекламирует. Если такого не написано, значит там такого нет. Скорее всего там будет USB 3.1. Значит скорость 10 gbps. Это скорость как у двух USB 3.0. Сверим, PCI-E 2.0 x4 = 16 gbps, умещаемся. Значит через такую дырку без проблем можно прокачать два честных USB 3.0, Некоторые платы дают два выхода Type C USB 3.1, тут по идее мы уже в теоретическую скорость на PCI-E 2.0 не уложимся, нужно 20, а есть только 16. Но с некоторой натяжкой можно. PCI-E 3.0 укладывается, всё хорошо.

Питание

Дальше идёт питание.

Параметры питания USB

Вот столько питания нужно каждому порту USB 3.0. Если наша плата расширения не имеет внешнего питания, то давайте считать. Два порта USB 3.0 могут потребить 30 W.

А вот что может выдать PCI Express:

Сколько электричества может выдать PCI Express

То есть PCI-E x4 может выдать максимум 25 W. Таким образом платы без внешнего питания не могут соответствовать спецификации USB. Да и даже если бы соответствовали, это пришлось бы много энергии гнать через материнскую плату. Лучше уж подвести питание напрямую от блока питания!

От блока питания как правило берётся или 4-pin, или питание к SATA-дискам, такой разъём буквой Г. А там у нас что по мощности?

4-pin

Вот так выглядит 4-pin разъём питания

Оригинальные параметры питания от IBM PC

Неофициальные максимумы для 4-pin разъёма питания

Тут у нас питания уже либо хватает, либо ситуация как минимум не хуже, в зависимости от того, как сделана работа с электричеством на конкретной плате.

SATA

SATA коннектор питания

Параметры питания SATA

Ситуация точно такая же. Оно и понятно, ведь можно сделать вообще вот так:

Переходник 4-pin на SATA питание

 

Учитывая, что в любом случае мне хочется не пускать электричество через материнку, а брать его напрямую с БП, даже если платы не пользуются преимуществом наличия сразу трёх источников питания (PCI-E + 5V + 12V), а берут только 25 W от 5V, нет ни одной причины выбрать плату без внешней подпитки.

Сколько потребляют сенсоры Oculus Rift?

Официальной информации я не нашёл. Энтузиасты замеряли сами с помощью программы USBDeview:

Ток и версия USB для Oculus Rift через программу USBDeview

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

В любом случае, давайте попробуем взять по максимуму. Напоминаю ещё раз таблицу:

Параметры питания USB

USB 3.0 максимум у нас возьмёт <5 W. Значит в каждый наш порт USB Type C от платы расширения мы без проблем можем вставить как минимум разветвитель на 2x USB 3.0, а если повезёт, то и на 3x USB 3.0. В итоге мы можем там потянуть по питанию 5x USB 3.0.

Выводы

Нужна плата расширения PCI-E x4 -> 2х USB 3.1 Type C с питанием от БП. Вы не ошибётесь, если в каждый из двух портов USB Type C вставите разветвитель на 2x USB 3.0. Таким образом вы оставите небольшой запас.

Можно было бы сразу взять плату расширения на 4x USB 3.0, но таких плат я не смог найти. Они все PCI-E x1, что не подходит по скорости. Нужно PCI-E x4.

 

Такую плату я заказал себе: dodocool SuperSpeed USB 3.1 PCI-Express Card with Dual Reversible Type-C Ports 5V 15-Pin Connector Gen 2 10 Gbps Add on Card

dodocool SuperSpeed USB 3.1 PCI-Express Card with Dual Reversible Type-C Ports 5V 15-Pin Connector Gen 2 10 Gbps Add on Card

Бонус

В видеокартах RTX 2080 и RTX 2080 Ti есть специальный USB Type C порт VirtualLink. Пока нет систем виртуальной реальности, которые можно было бы в него прямо вот так сразу вставить.

Порты у видеокарты RTX 2080, есть USB Type C порт VirtualLink

Но если верить комментариям в интернете, в этот порт можно вставить хаб-разветвитель на HDMI + USB 3.0, и уже в него вставить свой Oculus Rift и сенсоры. И всё будет работать.

Попробуйте. Возможно, так вам не придётся испытывать все эти сложности, которые я описал выше.

На самом деле полезная информация

Выше были мои теоретические выкладки, которые я записал, чтобы не забыть всю эту математику. А теперь, изучая вопрос несколько глубже, я нашёл вот такую статью в официальном блоге Окулус, прочитайте её внимательно: https://www.oculus.com/blog/oculus-roomscale-balancing-bandwidth-on-usb/

Отсюда мы делаем несколько важных выводов:

Возможно, средняя пропускная способность сенсора, подключенного к USB 3.0 равна 76 MB/s = 600 Mb/s, то есть примерно 1/8 от теоретической полосы USB 3.0 в 5 gbps. Практические же пропускные способности такие:

Теоритеческие и практические пропускные способности USB

Значит это уже где-то 1/5.

Разработчики предлагают вставлять не больше двух сенсоров на один контроллер USB.  Т.е. это будет уже 2/5. Несложно предположить, что несжатые видеоданные вполне могут течь не всегда с такой скоростью, а иногда намного выше. Я работал с видео сенсорами, просто быстрые движения запросто могут увеличить видеопоток в 1.5-2 раза. При уменьшении освещённости камеры могут начать давать шум. Шум очень быстро повышает поток в 2 раза, а затем и во все 10 раз. Поэтому цифра 2/5 уже должна нас насторожить. Больше точно не надо.

Очень важный момент. Разработчики в статье заявляют, что они много что тестировали, и получается, что даже разные порты USB 3.0 как правило контролирует один и тот же контроллер. Так вот все эти цифры скоростей распространяются именно на контроллер!

И даже если вроде как скорости хватает, с больше чем двумя сенсорами иногда данные теряются, оно работает лучше, если больше двух сенсоров на один контроллер не ставить. Лучше даже взять низкокачественный USB 2.0 на третий сенсор, работать будет лучше, чем если все три на один контроллер повесить!

 

Как проверить, к какому контроллеру подключены ваши сенсоры написано здесь.

Вот так в менеджере устройств выбирается чтобы было видно, к какому контроллеру подключено устройство

 

Это очень важное новое понимание! Так вот почему Окулус всегда рекомендовали подключать третий сенсор к USB 2.0 в своих мануалах! Они знали всё это, и просто не объясняя предлагали наиболее хорошую конфигурацию для большинства систем!

Since devices connected to the same host controller in USB 2.0 mode don’t share bandwidth with USB 3.0 devices, It’s generally better to have a reliable lower-bandwidth USB 2.0 connection for your third sensor than to run three high-bandwidth USB 3.0 connections at the same time.

 

Теперь мы с вами умные. Теперь, когда мы понимаем настоящие причины, мы можем соответственно реагировать. Нужно разнести сенсоры на разные контроллеры USB 3.0.

 

to be continued here

Обсуждение

avatar

wpDiscuz