10-гигабитной локалкой уже никого не удивишь, много лет такое железо доступно на еБее и даже на местных сайтах бесплатных объявлений по совсем бросовым ценам. Дома я уже всё что можно было перевёл на 10G и не у дел остались только ноутбуки.
Существуют готовые thunderbolt↔SFP+ адаптеры, типа sonnettech Solo10G SFP+ но они стоят $230/17к руб и выше. Или QNAP QNA‑T310G1S $270/20к руб. Многовато для эпизодического использования, большую игру/фильм или дистрибутив на ноутбук я копирую не каждый день.
![](https://habrastorage.org/getpro/habr/upload_files/3d9/23f/d78/3d923fd78eff928651cff7f003887e97.jpg)
Другая мысль — взять кейс для внешних GPU (eGPU), он дешёвый если втыкается в m.2 слот, а разбирать ноут каждый раз, когда нужна сеть — так себе идея. Но кейсы, подключаемые через thunderbolt, не уступают по цене вышеназванным адаптерам:(
Готовый бокс раньше (пару лет назад) стоил в районе $300, но сейчас на али есть разные варианты:
![$280 за красивую коробку. $280 за красивую коробку.](https://habrastorage.org/getpro/habr/upload_files/a8e/aca/618/a8eaca618023ed5347462c93f9ff5d77.jpg)
![$180 без коробки но с креплением $180 без коробки но с креплением](https://habrastorage.org/getpro/habr/upload_files/811/786/29e/81178629e48c5e765baac528bc10700e.jpg)
![$155 за голую плату и странный переходник до неё $155 за голую плату и странный переходник до неё](https://habrastorage.org/getpro/habr/upload_files/c2a/212/28e/c2a21228e566dbc1bd3b67e24965e237.jpg)
Железо
Вот этот последний вариант меня и заинтересовал, уж очень подозрительно он похож на переходник для nvme‑ssd. Который и был довольно быстро обнаружен и заказан.
![](https://habrastorage.org/getpro/habr/upload_files/ae1/039/901/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 оказались наименее требовательны к питанию и заводились при ручном втыкании проводов.
![Первый блин (почти не-комом) Первый блин (почти не-комом)](https://habrastorage.org/getpro/habr/upload_files/e4c/021/adc/e4c021adc706ec078236a60f0d31c254.jpg)
Чтобы каждый раз не жонглировать кабелями (usb-c и внешнего питания), пришлось спаять ключ на 12v из того, что было под рукой:
![](https://habrastorage.org/getpro/habr/upload_files/d98/22d/00d/d9822d00dfd391eab71311241edc82c2.jpg)
После этого завелись другие карточки, например, сетевуха solarflare и даже GTX710, но такой минимальный вариант работает с определёнными проблемами:
При отключении thunderbolt‑кабеля от ноута драйвер mellanox очень удивляется и начинает целиком пожирать одно ядро процессора;
Solarflare удивляется меньше, но после пере‑подключения кабеля сетевуху уже не видит;
Сеть не набирает полную скорость, потому что мы ограничены не только 4-мя линиями PCIe в переходнике thunderbolt, а только 2-мя линиями которые разведены на
зелёной какашкедешёвом переходнике с m.2...
Первые две проблемы удалось решить так: после долгого перебора в devmgmt.msc того, что можно выключать, а что не очень, выяснилось, что надо отключить PCIe Upstream Switch Port, он за собой утаскивает Downstream и саму сетевуху. Только после этого можно отключать провод, и при следующем включении все устройства вернутся обратно. Не очень удобно, но наверное можно написать какой‑то скрипт...
![](https://habrastorage.org/getpro/habr/upload_files/884/419/b31/884419b314c6ffb0e244bad56bd70d10.jpg)
А вот для решения третьей проблемы пришлось снова идти на алиэкспресс и в куче китайского говразнообразия искать нормальный переходник на 4 линии.
И паять на него ключ для питания. Я решил выпендриться и сделать типа-SMD-монтаж, воспользовавшись присланными когда-то в довоенное время семплами от NXP, в частности готовым ключем PMC85XP.
Итак, встречайте mad skillz! Фото голых плат, 18+
![](https://habrastorage.org/getpro/habr/upload_files/7dc/3f9/836/7dc3f9836b82649ffa4e5cb976a4ff0b.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/597/525/db0/597525db0657d476ccfc86edb11e12ee.jpg)
Итоговый результат:
![](https://habrastorage.org/getpro/habr/upload_files/d3c/939/f26/d3c939f26c369b668155a6cab5c34a1e.jpg)
Софтовая часть
Теперь насчёт софта: какое-то время я так и пользовался, вручную выключая порт в девайс-менеджере. Но недавно решил снова поднять эту тему и сделать что-то похожее на меню извлечения флэшек.
![](https://habrastorage.org/getpro/habr/upload_files/820/896/00b/82089600badbf79cfd7ebf741a128eac.png)
К сожалению, малой кровью это решить не удалось: devcon.exe и подобные ему тулзы напрочь отказываются работать с уже покинувшими систему устройствами. Поэтому пришлось писать свою программу.
Для прикола решил воспользоваться новомодным языком zig. Всё оказалось достаточно просто. Для извлечения устройств полно примеров как в msdn, так и разнообразного опенсорса на гитхабе. Кода всего получилось меньше 300 строк: main.zig
Поначалу тулза был консольная (так проще), но потом я решил прикрутить меню, похожее на «извлекалку флэшек». Сил хватило только на само меню, поэтому после красивого графического выбора устройства на вас выпрыгнет консоль и будет писать, что она делает:
![](https://habrastorage.org/getpro/habr/upload_files/f15/244/c43/f15244c4373b88bbd658958cd6dda5cb.png)
Я уже много лет не писал GUI-приложения, а особенно на незнакомых языках, но всё оказалось достачно просто: кроме неочевидного требования создать хоть какое-то окно, всё что требуется — вызвать метод TrackPopupMenu и дело в шляпе!
Больше всего времени у меня ушло на вытаскивание иконок устройств. Из-за желания windows сохранять обратную совместимость с совсем древними версиями, а так же неуёмного желания программистов придумать «новый самый лучший API», для этой цели в Windows есть как минимум 5 разных подходов, но иконки как в системном меню (и devmgmt) даёт только один, и естественно, я его попробовал самым последним...
Новый язык прогаммирования мне очень понравился, можно заслуженно назвать его “better C” (по аналогии, как Rust называют “better C++”). Но он всё ещё находится в активной разработке, поэтому самая свежайшая версия компилятора мой код уже не соберёт.
Если кому интересно, то исходники доступны на гитхабе. И нужная версия компилятора (со ссылкой откуда скачать) там тоже указана.
В заключение, вопрос к читателям: пользовались ли вы eGPU? И пробовали ли туда включать что-то кроме собственно самих GPU?