10-Gbit сеть на ноутбуке

10-гигабитной локалкой уже никого не удивишь, много лет такое железо доступно на еБее и даже на местных сайтах бесплатных объявлений по совсем бросовым ценам. Дома я уже всё что можно было перевёл на 10G и не у дел остались только ноутбуки.

Существуют готовые thunderbolt↔SFP+ адаптеры, типа sonnettech Solo10G SFP+, но они стоят $230/17к руб и выше. Или QNAP QNA-T310G1S $270/20к руб. Многовато для эпизодического использования, большую игру/фильм или дистрибутив на ноутбук я копирую не каждый день.

3d923fd78eff928651cff7f003887e97.jpg

Другая мысль — взять кейс для внешних GPU (eGPU), он дешёвый если втыкается в m.2 слот, а разбирать ноут каждый раз, когда нужна сеть — так себе идея. Но кейсы, подключаемые через thunderbolt, не уступают по цене вышеназванным адаптерам :(

Готовый бокс раньше (пару лет назад) стоил в районе $300, но сейчас на али есть разные варианты:

$280 за красивую коробку.

$280 за красивую коробку.

$180 без коробки но с креплением

$180 без коробки, но с креплением

$155 за голую плату и странный переходник до неё

$155 за голую плату и странный переходник до неё

Железо

Вот этот последний вариант меня и заинтересовал, уж очень подозрительно он похож на переходник для nvme-ssd. Который и был довольно быстро обнаружен и заказан.

ae103990178391ba1ed5a62d0370c27b.jpg

Адаптер ORICO для SSD приехал очень быстро и даже работает с нвме-диском. В комплекте шланг тандерболт 3 на 40 гбпс. На кабель 10G (usb3) жалуется и не работает, вообще никак, даже со сниженной скоростью. Кабели thunderbolt3 длиной 1 м стоят от $15+, похоже придётся раскошелиться или терпеть короткий провод.

Тандерболт построен на базе Intel® JHL6340 4 lanes of PCI Express Gen 3, такие же чипы стоят, например, в разеровском eGPU. Правда, кроме рекламного буклета на них ничего в интернете не известно, а даташит интел зажопил.

Голые платы делают вот эти китайцы, если кто-то имеет опыт розничных заказов с алибабы, то выгоднее взять там. Как показала беглая гуглёжка, моя идея не нова, и кто-то уже успел с таким сетапом огрести проблемы.

У меня тоже завелось всё не сразу, дело в том, что сетевым картам (да и много каким другим устройствам PCIe) требуется питание 12V. Причём, нужно соблюдать правильный power sequence: в идеале 12v и 3.3v нужно подавать одновременно, ну или 12v чуть-чуть позднее, чем 3v3. Из всего, что у меня было, только карты Mellanox оказались наименее требовательны к питанию и заводились при ручном втыкании проводов.

Первый блин (почти не-комом)

Первый блин (почти не-комом)

Чтобы каждый раз не жонглировать кабелями (usb-c и внешнего питания), пришлось спаять ключ на 12v из того, что было под рукой:

d9822d00dfd391eab71311241edc82c2.jpg

После этого завелись другие карточки, например, сетевуха solarflare и даже GTX710, но такой минимальный вариант работает с определёнными проблемами:

  1. При отключении thunderbolt-кабеля от ноута драйвер mellanox очень удивляется и начинает целиком пожирать одно ядро процессора;

  2. Solarflare удивляется меньше, но после пере-подключения кабеля сетевуху уже не видит;

  3. Сеть не набирает полную скорость, потому что мы ограничены не только 4-мя линиями PCIe в переходнике thunderbolt, а только 2-мя линиями которые разведены на зелёной какашке дешёвом переходнике с m.2…

Первые две проблемы удалось решить так: после долгого перебора в devmgmt.msc того, что можно выключать, а что не очень, выяснилось, что надо отключить PCIe Upstream Switch Port, он за собой утаскивает Downstream и саму сетевуху. Только после этого можно отключать провод, и при следующем включении все устройства вернутся обратно. Не очень удобно, но наверное можно написать какой-то скрипт…

884419b314c6ffb0e244bad56bd70d10.jpg

А вот для решения третьей проблемы пришлось снова идти на алиэкспресс и в куче китайского говразнообразия искать нормальный переходник на 4 линии.

И паять на него ключ для питания. Я решил выпендриться и сделать типа-SMD-монтаж, воспользовавшись присланными когда-то в довоенное время семплами от NXP, в частности готовым ключем PMC85XP.

Итак, встречайте mad skillz! Фото голых плат, 18+

7dc3f9836b82649ffa4e5cb976a4ff0b.jpg597525db0657d476ccfc86edb11e12ee.jpg

Итоговый результат:

d3c939f26c369b668155a6cab5c34a1e.jpg

Софтовая часть

Теперь насчёт софта: какое-то время я так и пользовался, вручную выключая порт в девайс-менеджере. Но недавно решил снова поднять эту тему и сделать что-то похожее на меню извлечения флэшек.

82089600badbf79cfd7ebf741a128eac.png

К сожалению, малой кровью это решить не удалось: devcon.exe и подобные ему тулзы напрочь отказываются работат с уже покинувшими систему устройствами. Поэтому пришлось писать свою программу.

Для прикола решил воспользоваться новомодным языком zig. Всё оказалось достаточно просто. Для извлечения устройств полно примеров как в msdn, так и разнообразного опенсорса на гитхабе. Кода всего получилось меньше 300 строк: main.zig

Поначалу тулза был консольная (так проще), но потом я решил прикрутить меню, похожее на «извлекалку флэшек». Сил хватило только на само меню, поэтому после красивого графического выбора устройства на вас выпрыгнет консоль и будет писать, что она делает:

f15244c4373b88bbd658958cd6dda5cb.png

Я уже много лет не писал GUI-приложения, а особенно на незнакомых языках, но всё оказалось достачно просто: кроме неочевидного требования создать хоть какое-то окно, всё что требуется — вызвать метод TrackPopupMenu и дело в шляпе!

Больше всего времени у меня ушло на вытаскивание иконок устройств. Из-за желания windows сохранять обратную совместимость с совсем древними версиями, а так же неуёмного желания программистов придумать «новый самый лучший API», для этой цели в Windows есть как минимум 5 разных подходов, но иконки как в системном меню (и devmgmt) даёт только один, и естественно, я его попробовал самым последним…

Новый язык прогаммирования мне очень понравился, можно заслуженно назвать его «better C» (по аналогии, как Rust называют «better C++»). Но он всё ещё находится в активной разработке, поэтому самая свежайшая версия компилятора мой код уже не соберёт.

Если кому интересно, то исходники доступны на гитхабе. И нужная версия компилятора (со ссылкой откуда скачать) там тоже указана.

В заключение, вопрос к читателям: пользовались ли вы eGPU? И пробовали ли туда включать что-то кроме собственно самих GPU?

© Habrahabr.ru