<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>