Размышлизма и подборка материалов по низколатентному программированию под Win. Итак, пусть у нас будет периферийный контроллер, которный умеет делать специфический IO, и host машина под Win7. Который обрабатывает данные контроллера и выдает пакеты,
которые контроллеру следует отправить в реальный мир.
Интересует достижение минимальной латентности от готовности небольшого пакета данных в контроллере до момента, когда ответные данные будут доступны ему.
Рассмотрим доступные варианты. Под словом доступные понимается
, что стоимость аппаратного "довеска" периферийного контроллера не будет превышать $20, еще лучше $10, что этот
довесок хотя бы в принципе доступен в варианте -40, и разработка ПО для PC не подразумевает найма Марка Руссиновича [одного их гуру по низкоуровневым потрохам вендов].
Хорошей латентностью будем считать предельный случай, когда контроллер передал 1 байт и получил ответ 1 байт через 1 мкС.
Народный USB 2.0 латентности менее ~1 ms дать не может в принципе, в силу своей структуры.
Данные повернутых на этом аудиофилов подтверждают это
http://www.gearslu …-0-midi-interface.html
http://www.vdrums. …TRACK-PRO-2-0-(latency)
Вот тут еще одно подтверждение, но об этой ссылке позже
http://www.codepro …zer.aspx?display=Print
Столь же народный 1G Ethernet дает что-то типа 125 мкС, что лучше, но, быть может удастся найти лучше?
http://www.evanjon …/ethernet-latency.html
http://www.babinsz …nd-TCP-Throughput.html
10G Ethernet дает латентность при хорошем коммутаторе 3-5 мкС
Solarflare_Force10_Low_Latency_High_Density_Testing.pdf
Вот тут при помощи супер-драйвера обещают половину трипа менее, чем 2 мкс
http://www.dolphin …ckets_accelerator.html
InfiniBand дает латентность немного более 1 мкС
17_QLogic.pdf
IB_and_10GigE_in_HPC.pdf
low-latency-seminar-mellanox.pdf
Но оба эти решения не проходит по критерию стоимость периферийной аппаратуры.
USB 3.0 - наша надежда? Страница 32 обещает латентность 125 мкС.
energy-efficient-platforms-white-paper.pdf
Но хотя бы краткое описание нового стандарта наводит на грустные мысли о том, как не просто будет выжать из USB 3.0 предельные параметры
SuperSpeed_USB_DevCon_Architecture_Overview_Dunstan.pdf
Хотя в новых машинах USB 3.0 можно считать стандартом, он все же не повсеместно распространен.
Отдельная засада с device контроллерами. Стоимость IP для FPGA 20kE, а первый более-менее терпимый device контроллер от Cypress CYUSB3014 вроде начал производиться, но его еще
надо запрограммить, что есть зело непросто.
AN65974.pdf
001-52136_0J_V.pdf
Хорошим вариантом было бы создание custom PCIe контроллера, ибо, как мы видим выше, InfiniBand и 10G Ethernet контроллеры в слоте PCIe дают латентность до 1 мкС, но это дело
не простое.
Самые дешевые киты есть от Lattice. LFE3-35EA-VERSA-EVN стоит $299, но если попасть в промоушен программу, то можно купить за 99
http://www.lattice …cp3surgepromotions.cfm
http://www.lattice …velopmentkit/index.cfm
К нему есть IP, примеры драйверов под Linux и Win, тулзы для оценки производительность.
Минимальный контроллер из серии ECP3, годны для контроллера, стоит $35, что несколько дороговато. Подборка по теме
http://caxapa.ru/294559.html Известная FPGA самая дешевая с последовательным линком EP4CGX15BN11C8N стоит $24, что ненамного лучше.
И тут стоит вернуться к ссылке про анализатор
http://www.codepro …zer.aspx?display=Print
Там чувак не сильно напрягаясь получает 500к отсчетов путем чтения регистров LPT порта... Что теоретически дает нам позможность получить задержку 2-4 мкс на байтовых
операциях.
Можно еще всякие ECP/EPP покурить, там вроде как до 2Мбайт/сек обещается.
ecp.pdf
epp.pdf
parallel_.pdf
ecp_reg.pdf
Но сейчас все больше PCIe распространены... И тут нам на помощь приходит чудо чип OXPCIe952
http://www.plxtech …roducts/uart/oxpcie952
Основная фишка - PCIe там native. Что, вероятно, еще уменьшит латентность.
На http://mouser.com можно в небольшом опте взять от $10. Есть вариант -40.
Пока есть некая непонятка с LPT Win7 64, но вроде как эта карточка там работает без проблем.
Готовые карты на этом чипе:
STLab C-370 Adapter Express Card/34mm--> 1xLPT25F
http://www.nix.ru/ …mm1xLPT25F_113815.html
http://www.nix.ru/ …ti_1xLPT25F_87842.html
STLab I-370 (RTL) PCI-Ex1, Multi I/O, 1xLPT25F
Подборка ресурсов по чипу. На сайте после регистрации жают скачать все, всключая SDK для кастомизации драйверов.
UG-0070_OXPCIe952-840_Hardware_UG.pdf
UG-0050_Oxide.pdf
OXPCIe952.pdf
ExpApps73_OXPCIe952.pdf
OXPCIe952_Product_Brief.pdf
Любопытные киты для создания своих платочек PCI ExpressCard. Так что со своими карточками для ноутов проблем не будет.
9186-9187.pdf
Ну а с учетом того чтол почти все платы от Intel и не только на новых Atom имеют LPT, то все это имеет приличный практический смысл.
Подборка ресурсов
Parallel port - LPT (IEEE 1284)
http://hw-server.c …t-ieee-1284#Datasheets
Путь в Ring 0 или пишем свой первый драйвер
http://av-school.ru/article/a-331.html
DebugView v4.77
http://technet.mic …/sysinternals/bb896647
Много всего
http://retired.beyondlogic.org/
1 Port (Serial)RS232 &1 Port Parallel
http://www.chronos …52ECBPR1/952ECBPR1.htm
Программирование в ring0 для Windows: вводная статья
http://habrahabr.r …tem_programming/40171/
IEEE 1284 Related Standard's Activities
http://www.fapo.com/dotstnds.htm
Parallel Ports
http://msdn.micros …dware/ff544392(v=VS.85).aspx
LPT (mode EPP, 0,5- 1,7 Mбайт/с)
http://www.fpga-cpld.ru/lpt.html
parport-lowlevel.txt
http://www.mjmwire …n/parport-lowlevel.txt
http://linux.die.net/man/3/libieee1284
Работа с параллельным портом под Windows
http://citforum.ru …tems/windows/parp_win/
1284 Negotiation
http://www.fapo.com/negoti8.htm
-
- что-то Вы смешали в кучу и внутренние, и внешние интерфейсы koyodza(226 знак., 08.01.2012 15:48)
- Дык вроде те же повернутые аудиофилы утверждают, что HS USB позволяет кидаться микрофреймами на частоте 8КГц. Это те же 125мкСек в одну сторону на реально доступных на сейчас хостах и девайсах - ig_z(08.01.2012 15:40)
- Продолжение материалов Evgeny_CD(06.01.2012 23:33 - 23:35)