<div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif">- Дядя, дядя, а кто сильней - Бетмен или Супермен?</div><div class="gmail_default" style="font-family:verdana,sans-serif">- Электрик</div><div class="gmail_default" style="font-family:verdana,sans-serif">- А почему?</div><div class="gmail_default" style="font-family:verdana,sans-serif">- У него рубильник есть, а у Бетмена и Супермена, рубильника нет</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 5, 2022 at 6:02 PM Alexander V Soroka <<a href="mailto:alex@euro.net.ua">alex@euro.net.ua</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Привет !<br>
<br>
Я  тут,  в  этом  списке рассылки, похоже, единственный кто занимается<br>
десятки  лет  embedded  программированием  на  низком  уровне железа и<br>
реалтайма,   и   наверное   тоже   единственный  кто  разрабатывает  и<br>
электрические схемы и разводку печатных плат для серийных изделий :-)<br>
<br>
Поэтому  я  отвечу развернуто, чтобы это письмо сохранилось " в базе"<br>
:) "для последующих поколений", которые может таки найдут в себе силы<br>
"опускаться"  до  более высокого уровня понимания проблем и задач, чем<br>
"мы тут конфиги FreeBSD щаз поправим и все заработает". :-)<br>
<br>
Итак,<br>
С  помощью  FPGA  можно проектировать цифровые микросхемы, сидя у себя<br>
дома  с  доступной отладочной платой на столе и софтом разработчика за<br>
пару   килобаксов.   Есть   и   бесплатные   варианты.<br>
Важно понимать:  именно проектировать,  а  не программировать, потому что<br>
на выходе получается физическая   цифровая  схема,  выполняющая  определенный<br>
алгоритм  на аппаратном уровне, а не программа для процессора.<br>
<br>
Работает  это  примерно  так.  Есть  готовая  печатная плата с набором<br>
интерфейсов,  которые  подключены  к установленной на плате микросхеме<br>
FPGA. Есть готовые крутые платы для Сетей и датацентров, например:<br>
High-Performance Network Accelerator<br>
<a href="https://www.alpha-data.com/product/adm-pcie-9v3/" rel="noreferrer" target="_blank">https://www.alpha-data.com/product/adm-pcie-9v3/</a><br>
<a href="https://www.alpha-data.com/product/adm-pcie-9h3/" rel="noreferrer" target="_blank">https://www.alpha-data.com/product/adm-pcie-9h3/</a><br>
( там можно скачать мануал в пдфке на страничке )<br>
<br>
High Performance Data Processing<br>
<a href="https://www.alpha-data.com/product/adm-pcie-9v7/" rel="noreferrer" target="_blank">https://www.alpha-data.com/product/adm-pcie-9v7/</a><br>
( там можно скачать мануал в пдфке на страничке )<br>
<br>
есть отладочные платы для обучения (менее крутые):<br>
<a href="https://www.xilinx.com/products/boards-and-kits.html" rel="noreferrer" target="_blank">https://www.xilinx.com/products/boards-and-kits.html</a><br>
<br>
Пока  мы  не  сконфигурируем FPGA, внутри микросхемы просто нет логики<br>
для обработки данных с интерфейсов, и потому работать ничего не будет.<br>
В  результате  проектирования  будет создана "прошивка", которая после<br>
загрузки в FPGA создаст нужную нам цифровую схему. Например, так можно<br>
создать   контроллер   100G   Ethernet,   который  будет  принимать  и<br>
обрабатывать сетевые пакеты.<br>
<br>
Важная  особенность  FPGA  —  возможность  реконфигурации. Сегодня нам<br>
нужен  контроллер  100G  Ethernet,  а  завтра  эта же плата может быть<br>
использована   для  реализации  независимых  четырех  интерфейсов  25G<br>
Ethernet.<br>
<br>
Микросхема  FPGA  —  это  по  сути,  та же заказная микросхема ASIC, и<br>
состоящая  из  таких  же транзисторов, из которых собираются триггеры,<br>
регистры,  мультиплексоры  и  другие  логические  элементы для обычных<br>
схем.  Изменить  порядок  соединения  этих  транзисторов,  нельзя.<br>
Но архитектурно  микросхема FPGA построена  таким  образом, что можно<br>
изменять коммутацию сигналов между более крупными блоками: их называют<br>
CLB — программируемые логические блоки.<br>
<br>
Количество  CLB  в  современных  кристаллах  FPGA может быть разным.<br>
У Xilinx есть кристаллы с количеством CLB в пределах примерно от четырех<br>
тысяч до трех миллионов.<br>
<br>
Помимо  CLB,  внутри  FPGA  есть  еще  ряд аппаратных ресурсов.<br>
Например, аппаратные  блоки  умножения  с  накоплением или блоки DSP.<br>
Каждый  из  них  может  делать операции умножения и сложения 18-битных<br>
чисел  каждый  такт.  В топовых кристаллах количество блоков DSP может<br>
превышать 6000.<br>
<br>
Другой  ресурс — это блоки внутренней памяти (Block RAM, BRAM).<br>
Каждый  блок  может  хранить  2 Кбайт.  Полная емкость такой памяти в<br>
зависимости  от кристалла может достигать от 20 Кбайт до 20 Мбайт.<br>
Как  и  CLB,  BRAM  и  DSP-блоки  связаны  коммутационной  матрицей  и<br>
пронизывают  весь  кристалл.  Связывая  блоки  CLB,  DSP и BRAM, можно<br>
получать весьма эффективные схемы обработки данных.<br>
<br>
Гибкая  структура  FPGA  позволяет  реализовывать аппаратные схемы для<br>
высокоскоростной   и  параллельной  обработки  данных  с  возможностью<br>
изменить алгоритм.<br>
<br>
Чем принципиально отличаются CPU, GPU, FPGA и ASIC?<br>
CPU  универсален,  на  нем можно запустить любой алгоритм, он наиболее<br>
гибок,  и  использовать его легче всего благодаря огромному количеству<br>
языков программирования и сред разработки.<br>
<br>
При   этом   из-за   универсальности  и  последовательного  выполнения<br>
инструкций    CPU    снижается    производительность    и   повышается<br>
энергопотребление схемы. Происходит это потому, что на каждую полезную<br>
арифметическую  операцию  CPU совершает много дополнительных операций,<br>
связанных  с  чтением  инструкций из памяти, перемещением данных между<br>
регистрами и кешем разного уровня, и другие телодвижения.<br>
<br>
Напомню,  что  в  операционках,  вы  не  имеете  возможности  напрямую<br>
работать  своей  программой  с  регистрами  "железа"  и самостоятельно<br>
обрабатывать  прерывания.  Так,  например,  в  Винде  вы можете только<br>
читать  "очередь  событий"  (я  сильно  упрощаю)  и если там появилось<br>
"нужное событие" то вы сможете на него отреагировать, в отведенный вам<br>
"квант"  времени,  который тоже не совсем является "реалтаймовым".<br>
Аналогично  работают и Юниксы, только там больше "рулей" для настройки<br>
и  не  так  закрыт  исходный  код,  для  желающих  "копнуть глубоко до<br>
железа".  Но все равно - прерывания железа это для драйверов, а не для<br>
писателя "под Юникс" или RTOS.<br>
<br>
Рядом (по производительности но в высшую сторону) от CPU находится GPU.<br>
Изначально  эти  микросхемы были разработаны для обработки графики, но<br>
сейчас  используются  и для майнинга вычислений общего назначения.<br>
GPU состоят   из   тысяч   небольших   вычислительных   ядер  и  выполняют<br>
параллельные операции над массивом данных.<br>
Еще дальше :-) от GPU находятся FPGA.<br>
<br>
Решающее  преимущество  FPGA  —  это способность обрабатывать данные в<br>
темпе  их  поступления  с  минимальной  задержкой  реакции. В качестве<br>
примера  -  умный  сетевой маршрутизатор с большим количеством портов:<br>
при  поступлении  пакета  Ethernet  на  один  из его портов необходимо<br>
проверить   множество   правил,  прежде  чем  выбрать  выходной  порт.<br>
Возможно,  потребуется изменение некоторых полей пакета или добавление<br>
новых.<br>
<br>
Использование FPGA позволяет решать эту задачу мгновенно: байты пакета<br>
еще только начали поступать в микросхему из сетевого интерфейса, а его<br>
заголовок  уже  анализируется.  Использование  CPU-процессоров  тут  может<br>
существенно  замедлить  скорость  обработки  сетевого трафика. Достичь<br>
требуемой  гибкости  в сочетании с высокой производительностью поможет<br>
только  FPGA.  Для  этого используется RTL-язык, и RTL-моделирование в<br>
симуляторе на компьютере.<br>
<br>
Существуют  и  высокоуровневые  средства  разработки  (HLS, High-level<br>
synthesis),  и даже готовые фреймворки.<br>
Для любителей есть вариант работы с FPGA на python:<br>
<a href="https://habr.com/ru/post/442010/" rel="noreferrer" target="_blank">https://habr.com/ru/post/442010/</a><br>
фреймворк MyHDL    <a href="https://www.myhdl.org/" rel="noreferrer" target="_blank">https://www.myhdl.org/</a><br>
<br>
Есть Open-Source FPGA Foundation (OSFPGA) <a href="https://osfpga.org/" rel="noreferrer" target="_blank">https://osfpga.org/</a><br>
нацеленная на развитие, продвижение и создание среды для совместной<br>
разработки открытых аппаратных и программных решений, связанных<br>
с использованием программируемых логических интегральных схем FPGA.<br>
<br>
Связанные с проектом открытые инструменты:<br>
<br>
OpenFPGA - набор для автоматизации проектирования электронных приборов<br>
(EDA) для FPGA, поддерживающий генерацию начинки на основе описаний на<br>
языке Verilog.  <a href="https://github.com/lnis-uofu/OpenFPGA" rel="noreferrer" target="_blank">https://github.com/lnis-uofu/OpenFPGA</a><br>
<br>
1st  CLaaS  -  фреймворк,  позволяющий  использовать FPGA для создания<br>
аппаратных ускорителей для web- и облачных приложений.<br>
<a href="https://github.com/stevehoover/1st-CLaaS" rel="noreferrer" target="_blank">https://github.com/stevehoover/1st-CLaaS</a><br>
<br>
Verilog-to-Routing  (VTR)  -  инструментарий,  позволяющий  на  основе<br>
описания на языке Verilog сформировать конфигурацию выбранного FPGA.<br>
<a href="https://github.com/verilog-to-routing/vtr-verilog-to-routing" rel="noreferrer" target="_blank">https://github.com/verilog-to-routing/vtr-verilog-to-routing</a><br>
<br>
Symbiflow - инструментарий для разработки решений на базе FPGA Lattice<br>
iCE40, Lattice ECP5, Xilinx 7 и QuickLogic EOS S3.  <a href="https://symbiflow.github.io/" rel="noreferrer" target="_blank">https://symbiflow.github.io/</a><br>
<br>
EPFL - коллекция библиотек для разработки приложений логического синтеза.<br>
<a href="https://github.com/lsils/lstools-showcase" rel="noreferrer" target="_blank">https://github.com/lsils/lstools-showcase</a><br>
<br>
Edalize   -  инструментарий  на  языке  Python  для  взаимодействия  с<br>
системами  автоматизации  проектирования  электронных приборов (EDA) и<br>
генерации для них файлов проектов. <a href="https://github.com/olofk/edalize" rel="noreferrer" target="_blank">https://github.com/olofk/edalize</a><br>
<br>
GHDL - компилятор, анализатор, симулятор и синтезатор для языка описания аппаратуры VHDL.<br>
<a href="https://github.com/ghdl/ghdl" rel="noreferrer" target="_blank">https://github.com/ghdl/ghdl</a><br>
<br>
VerilogCreator  - плагин к QtCreator, превращающий данное приложение в<br>
среду для разработки на языке Verilog 2005.  <a href="https://github.com/rochus-keller/verilogcreator/" rel="noreferrer" target="_blank">https://github.com/rochus-keller/verilogcreator/</a><br>
<br>
SOFA   (Skywater   Open-source   FPGA)   -   набор  открытых  FPGA  IP<br>
(Intellectual  Property),  созданных  с  использованием Skywater PDK и<br>
фреймворка OpenFPGA. <a href="https://github.com/lnis-uofu/SOFA" rel="noreferrer" target="_blank">https://github.com/lnis-uofu/SOFA</a><br>
<br>
LiteDRAM - настраиваемый IP Core для FPGA c реализацией DRAM.<br>
<a href="https://github.com/enjoy-digital/litedram" rel="noreferrer" target="_blank">https://github.com/enjoy-digital/litedram</a><br>
<br>
OpenCores.org  —  каталог всевозможных открытых проектов под FPGA.<br>
<a href="https://opencores.org/" rel="noreferrer" target="_blank">https://opencores.org/</a><br>
несколько примеров:<br>
Ethernet 10GE Low Latency MAC : <a href="https://opencores.org/projects/xge_ll_mac1G" rel="noreferrer" target="_blank">https://opencores.org/projects/xge_ll_mac<br>
1G</a> Ethernet UDP/IP Stack : <a href="https://opencores.org/projects/udp_ip_stack" rel="noreferrer" target="_blank">https://opencores.org/projects/udp_ip_stack</a><br>
Ethernet 10GE MAC: <a href="https://opencores.org/projects/xge_mac" rel="noreferrer" target="_blank">https://opencores.org/projects/xge_mac</a><br>
 AES (Rijndael) IP Core:   <a href="https://opencores.org/projects/aes_core" rel="noreferrer" target="_blank">https://opencores.org/projects/aes_core</a><br>
<br>
В  облачных вычислениях FPGA применяются для быстрого счета, ускорения<br>
сетевого  трафика и осуществления доступа к массивам данных. В серверы<br>
вставляются  платы FPGA с PCI Express и оптическим сетевым интерфейсом<br>
производства Intel (Altera) или Xilinx.<br>
<br>
В  Microsoft  давно  используют FPGA для ускорения поискового сервиса<br>
Bing,  а  также  для  организации  Software Defined Networking внутри<br>
облака Azure.<br>
<br>
Могу сказать, что , например, в компании "С_В_Р" в которой я работал,<br>
весь колл-центр был собран на нескольких серверах с "умными картами".<br>
Производительность  была  наивысшей  в  стране,  в  условиях  массовых<br>
звонков (телевикторины, голосование за очень короткое время)<br>
мы были в состоянии обрабатывать практически весь трафик Украины,<br>
и при этом иметь загрузку по оборудованию порядка 30-50%.<br>
...из-за рейдерских наездов и "изумительной политики Укртелеком"<br>
компания,  к  сожалению,  прекратила деятельность, но у меня на память<br>
осталось  две  книги  "Лидер  рынка"  :)  с  моими фото и попаданием в<br>
"ТОП-20" телеком компаний по их рейтингу (эффективность работы, доходы<br>
и т.п.).<br>
Укртелеком,  который  постоянно  пытался  нам ставить палки в колеса и<br>
отобрать  бизнес, в итоге, после прекращения нашей деятельности, так и<br>
не смог создать ничего подобного с такой-же эффективностью в работе.<br>
<br>
С моей колокольни :-) я бы сказал что разработчиков подобной сложности<br>
(для  FPGA)  Проектов  очень  мало,  или  вообще нет, бо уехали отсюда<br>
нахер, в теплые и радушные страны...<br>
Так  что  сама  тема  обработки  оргомных трафиков она вкусная и имеет<br>
очень неплохие шансы к выходу на ...ПО Продукт..., который потом можно<br>
и  себе  поставить и жить на нем, и продать кому-то или сдать в аренду<br>
мощности (мы так делали много лет).<br>
<br>
<br>
<br>
Wednesday, January 5, 2022, 12:56:04 PM, Yevgen Ionov <a href="mailto:yevgen.ionov@gmail.com" target="_blank">yevgen.ionov@gmail.com</a> you wrote:<br>
YI> Использование FPGA ограничено в основном задачами в data plane (программные<br>
YI> манипуляции с пакетами, например тоже RTP timestamp с использованием P4,<br>
YI> OpenFlow), все что относится с к программируемым сетям, AI, как<br>
YI> альтернатива ASIC с его fixed instructions. Т.е. вспомогательная функция и<br>
YI> нет смысла его не позиционировать как замену микропроцессорам, при всем<br>
YI> желании он не будет широко использоваться в HW. Это даже бессмысленно<br>
YI> дискутировать.<br>
YI> Таже Cisco год назад использовала его только в одной модели свитчей, пару<br>
YI> от Arista и Palo Alto в high end моделях для offload некоторых задач.<br>
YI> Да и с offload тоже нужно детально проверять, что поддерживает ОС. Три года<br>
YI> назад тестировал различные uCPE, например на Intel SoC и поддержкой<br>
YI> QAT. QAT мог разгрузить Core в задачах с криптованием и в итоге оказалось,<br>
YI> что ни в PanOS, ни в FortiOS, ни в Cisco ISRv в VM исполнении не были<br>
YI> заложены инструкции для offload таких задач (AES-NI - да, QAT - нет).<br>
YI> Вендоры обещали реализовать это в будущем.<br>
<br>
YI> Возвращаясь к начальной дискуссии о проблеме с буферной памятью FPGA + P4<br>
YI> имеет лучшие перспективы для решений подобных задач чем ASIC. Но с этим еще<br>
YI> надо разбираться, пока есть идеи, но не могу сказать будут ли они работать.<br>
<br>
YI> On Wed, 5 Jan 2022 at 09:26, Vladimir Sharun <<a href="mailto:vladimir.sharun@ukr.net" target="_blank">vladimir.sharun@ukr.net</a>><br>
YI> wrote:<br>
>> Привет,<br>
>><br>
>> Netflix делает свой трафик через Mellanox ConnectX-6 DX c оффлоадом<br>
>> шифрования TCP в карту.<br>
>><br>
>> А чтобы это в принципе работало, Netflix/Mellanox/Chelsio "к гирям<br>
>> freeBSD" написали код, который дал такую возможность правильно.<br>
>><br>
>> Для шифрования "сильно зависит": можно и на проце через AES-NI и это<br>
>> работает. Вопрос в количестве гигабит.<br>
>><br>
>> Я по-этому и спросил про FPGA - оч интересно какое именно применение даст<br>
>> смысл вложениям денег в голую железку, почему не купить готовое и сделать<br>
>> бизнес с использованием готовых инструментов.<br>
>><br>
>><br>
>> *5 січня 2022, 01:51:47, від "Andriy Berestovskyy" <<a href="mailto:berestovskyy@gmail.com" target="_blank">berestovskyy@gmail.com</a><br>
>> <<a href="mailto:berestovskyy@gmail.com" target="_blank">berestovskyy@gmail.com</a>>>: *<br>
>><br>
>> > On 4 Jan 2022, at 20:15, Alexander V Soroka <<a href="mailto:alex@euro.net.ua" target="_blank">alex@euro.net.ua</a>> wrote:<br>
>> > Хеон? серьезно? с гирями на ногах ФрииБСД, с узкими местами общей шины<br>
>><br>
>> Xeon-ы есть разные: есть со встроенными FPGA, есть со встроенными 2x100Gbps, есть с 288 аппаратными потоками…<br>
>><br>
>> > Шифрование  на  FPGA  по  любому  будет лучше  и быстрее чем прога на<br>
>><br>
>> Для шифрования TCP/IP лучше и быстрее купить готовую сетевую карту c crypto offload.<br>
>><br>
>> > Нетфликс  пусть  и  гики,  но возможности железа не перепрыгнуть, да и<br>
>><br>
>> ИМО FPGA может иметь смысл под что-то узкоспециализированное, а IPsec/TLS — это стандартные задачи, давным давно реализованные в SoC-ах, с готовыми драйверами и библиотеками под Linux/FreeBSD…<br>
>><br>
>> Андрей<br>
>><br>
>> _______________________________________________<br>
>> uanog mailing listuanog@uanog.kiev.uahttps://<a href="http://mailman.uanog.kiev.ua/mailman/listinfo/uanog" rel="noreferrer" target="_blank">mailman.uanog.kiev.ua/mailman/listinfo/uanog</a><br>
>><br>
>> _______________________________________________<br>
>> uanog mailing list<br>
>> <a href="mailto:uanog@uanog.kiev.ua" target="_blank">uanog@uanog.kiev.ua</a><br>
>> <a href="https://mailman.uanog.kiev.ua/mailman/listinfo/uanog" rel="noreferrer" target="_blank">https://mailman.uanog.kiev.ua/mailman/listinfo/uanog</a><br>
<br>
<br>
<br>
<br>
<br>
-- <br>
Best regards,<br>
Alexander V Soroka       <a href="http://www.svr.ua/" rel="noreferrer" target="_blank">http://www.svr.ua/</a><br>
AS106-RIPE<br>
mailto:<a href="mailto:alex@euro.net.ua" target="_blank">alex@euro.net.ua</a><br>
<br>
_______________________________________________<br>
uanog mailing list<br>
<a href="mailto:uanog@uanog.kiev.ua" target="_blank">uanog@uanog.kiev.ua</a><br>
<a href="https://mailman.uanog.kiev.ua/mailman/listinfo/uanog" rel="noreferrer" target="_blank">https://mailman.uanog.kiev.ua/mailman/listinfo/uanog</a></blockquote></div>