[uanog] switch's port buffers

Alexander V Soroka alex at euro.net.ua
Wed Jan 5 19:01:37 EET 2022


Привет !

Я  тут,  в  этом  списке рассылки, похоже, единственный кто занимается
десятки  лет  embedded  программированием  на  низком  уровне железа и
реалтайма,   и   наверное   тоже   единственный  кто  разрабатывает  и
электрические схемы и разводку печатных плат для серийных изделий :-)

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

Итак,
С  помощью  FPGA  можно проектировать цифровые микросхемы, сидя у себя
дома  с  доступной отладочной платой на столе и софтом разработчика за
пару   килобаксов.   Есть   и   бесплатные   варианты.
Важно понимать:  именно проектировать,  а  не программировать, потому что
на выходе получается физическая   цифровая  схема,  выполняющая  определенный
алгоритм  на аппаратном уровне, а не программа для процессора.

Работает  это  примерно  так.  Есть  готовая  печатная плата с набором
интерфейсов,  которые  подключены  к установленной на плате микросхеме
FPGA. Есть готовые крутые платы для Сетей и датацентров, например:
High-Performance Network Accelerator
https://www.alpha-data.com/product/adm-pcie-9v3/
https://www.alpha-data.com/product/adm-pcie-9h3/
( там можно скачать мануал в пдфке на страничке )

High Performance Data Processing
https://www.alpha-data.com/product/adm-pcie-9v7/
( там можно скачать мануал в пдфке на страничке )

есть отладочные платы для обучения (менее крутые):
https://www.xilinx.com/products/boards-and-kits.html

Пока  мы  не  сконфигурируем FPGA, внутри микросхемы просто нет логики
для обработки данных с интерфейсов, и потому работать ничего не будет.
В  результате  проектирования  будет создана "прошивка", которая после
загрузки в FPGA создаст нужную нам цифровую схему. Например, так можно
создать   контроллер   100G   Ethernet,   который  будет  принимать  и
обрабатывать сетевые пакеты.

Важная  особенность  FPGA  —  возможность  реконфигурации. Сегодня нам
нужен  контроллер  100G  Ethernet,  а  завтра  эта же плата может быть
использована   для  реализации  независимых  четырех  интерфейсов  25G
Ethernet.

Микросхема  FPGA  —  это  по  сути,  та же заказная микросхема ASIC, и
состоящая  из  таких  же транзисторов, из которых собираются триггеры,
регистры,  мультиплексоры  и  другие  логические  элементы для обычных
схем.  Изменить  порядок  соединения  этих  транзисторов,  нельзя.
Но архитектурно  микросхема FPGA построена  таким  образом, что можно
изменять коммутацию сигналов между более крупными блоками: их называют
CLB — программируемые логические блоки.

Количество  CLB  в  современных  кристаллах  FPGA может быть разным.
У Xilinx есть кристаллы с количеством CLB в пределах примерно от четырех
тысяч до трех миллионов.

Помимо  CLB,  внутри  FPGA  есть  еще  ряд аппаратных ресурсов.
Например, аппаратные  блоки  умножения  с  накоплением или блоки DSP.
Каждый  из  них  может  делать операции умножения и сложения 18-битных
чисел  каждый  такт.  В топовых кристаллах количество блоков DSP может
превышать 6000.

Другой  ресурс — это блоки внутренней памяти (Block RAM, BRAM).
Каждый  блок  может  хранить  2 Кбайт.  Полная емкость такой памяти в
зависимости  от кристалла может достигать от 20 Кбайт до 20 Мбайт.
Как  и  CLB,  BRAM  и  DSP-блоки  связаны  коммутационной  матрицей  и
пронизывают  весь  кристалл.  Связывая  блоки  CLB,  DSP и BRAM, можно
получать весьма эффективные схемы обработки данных.

Гибкая  структура  FPGA  позволяет  реализовывать аппаратные схемы для
высокоскоростной   и  параллельной  обработки  данных  с  возможностью
изменить алгоритм.

Чем принципиально отличаются CPU, GPU, FPGA и ASIC?
CPU  универсален,  на  нем можно запустить любой алгоритм, он наиболее
гибок,  и  использовать его легче всего благодаря огромному количеству
языков программирования и сред разработки.

При   этом   из-за   универсальности  и  последовательного  выполнения
инструкций    CPU    снижается    производительность    и   повышается
энергопотребление схемы. Происходит это потому, что на каждую полезную
арифметическую  операцию  CPU совершает много дополнительных операций,
связанных  с  чтением  инструкций из памяти, перемещением данных между
регистрами и кешем разного уровня, и другие телодвижения.

Напомню,  что  в  операционках,  вы  не  имеете  возможности  напрямую
работать  своей  программой  с  регистрами  "железа"  и самостоятельно
обрабатывать  прерывания.  Так,  например,  в  Винде  вы можете только
читать  "очередь  событий"  (я  сильно  упрощаю)  и если там появилось
"нужное событие" то вы сможете на него отреагировать, в отведенный вам
"квант"  времени,  который тоже не совсем является "реалтаймовым".
Аналогично  работают и Юниксы, только там больше "рулей" для настройки
и  не  так  закрыт  исходный  код,  для  желающих  "копнуть глубоко до
железа".  Но все равно - прерывания железа это для драйверов, а не для
писателя "под Юникс" или RTOS.

Рядом (по производительности но в высшую сторону) от CPU находится GPU.
Изначально  эти  микросхемы были разработаны для обработки графики, но
сейчас  используются  и для майнинга вычислений общего назначения.
GPU состоят   из   тысяч   небольших   вычислительных   ядер  и  выполняют
параллельные операции над массивом данных.
Еще дальше :-) от GPU находятся FPGA.

Решающее  преимущество  FPGA  —  это способность обрабатывать данные в
темпе  их  поступления  с  минимальной  задержкой  реакции. В качестве
примера  -  умный  сетевой маршрутизатор с большим количеством портов:
при  поступлении  пакета  Ethernet  на  один  из его портов необходимо
проверить   множество   правил,  прежде  чем  выбрать  выходной  порт.
Возможно,  потребуется изменение некоторых полей пакета или добавление
новых.

Использование FPGA позволяет решать эту задачу мгновенно: байты пакета
еще только начали поступать в микросхему из сетевого интерфейса, а его
заголовок  уже  анализируется.  Использование  CPU-процессоров  тут  может
существенно  замедлить  скорость  обработки  сетевого трафика. Достичь
требуемой  гибкости  в сочетании с высокой производительностью поможет
только  FPGA.  Для  этого используется RTL-язык, и RTL-моделирование в
симуляторе на компьютере.

Существуют  и  высокоуровневые  средства  разработки  (HLS, High-level
synthesis),  и даже готовые фреймворки.
Для любителей есть вариант работы с FPGA на python:
https://habr.com/ru/post/442010/
фреймворк MyHDL    https://www.myhdl.org/

Есть Open-Source FPGA Foundation (OSFPGA) https://osfpga.org/
нацеленная на развитие, продвижение и создание среды для совместной
разработки открытых аппаратных и программных решений, связанных
с использованием программируемых логических интегральных схем FPGA.

Связанные с проектом открытые инструменты:

OpenFPGA - набор для автоматизации проектирования электронных приборов
(EDA) для FPGA, поддерживающий генерацию начинки на основе описаний на
языке Verilog.  https://github.com/lnis-uofu/OpenFPGA

1st  CLaaS  -  фреймворк,  позволяющий  использовать FPGA для создания
аппаратных ускорителей для web- и облачных приложений.
https://github.com/stevehoover/1st-CLaaS

Verilog-to-Routing  (VTR)  -  инструментарий,  позволяющий  на  основе
описания на языке Verilog сформировать конфигурацию выбранного FPGA.
https://github.com/verilog-to-routing/vtr-verilog-to-routing

Symbiflow - инструментарий для разработки решений на базе FPGA Lattice
iCE40, Lattice ECP5, Xilinx 7 и QuickLogic EOS S3.  https://symbiflow.github.io/

EPFL - коллекция библиотек для разработки приложений логического синтеза.
https://github.com/lsils/lstools-showcase

Edalize   -  инструментарий  на  языке  Python  для  взаимодействия  с
системами  автоматизации  проектирования  электронных приборов (EDA) и
генерации для них файлов проектов. https://github.com/olofk/edalize

GHDL - компилятор, анализатор, симулятор и синтезатор для языка описания аппаратуры VHDL.
https://github.com/ghdl/ghdl

VerilogCreator  - плагин к QtCreator, превращающий данное приложение в
среду для разработки на языке Verilog 2005.  https://github.com/rochus-keller/verilogcreator/

SOFA   (Skywater   Open-source   FPGA)   -   набор  открытых  FPGA  IP
(Intellectual  Property),  созданных  с  использованием Skywater PDK и
фреймворка OpenFPGA. https://github.com/lnis-uofu/SOFA

LiteDRAM - настраиваемый IP Core для FPGA c реализацией DRAM.
https://github.com/enjoy-digital/litedram

OpenCores.org  —  каталог всевозможных открытых проектов под FPGA.
https://opencores.org/
несколько примеров:
Ethernet 10GE Low Latency MAC : https://opencores.org/projects/xge_ll_mac
1G Ethernet UDP/IP Stack : https://opencores.org/projects/udp_ip_stack
Ethernet 10GE MAC: https://opencores.org/projects/xge_mac
 AES (Rijndael) IP Core:   https://opencores.org/projects/aes_core

В  облачных вычислениях FPGA применяются для быстрого счета, ускорения
сетевого  трафика и осуществления доступа к массивам данных. В серверы
вставляются  платы FPGA с PCI Express и оптическим сетевым интерфейсом
производства Intel (Altera) или Xilinx.

В  Microsoft  давно  используют FPGA для ускорения поискового сервиса
Bing,  а  также  для  организации  Software Defined Networking внутри
облака Azure.

Могу сказать, что , например, в компании "С_В_Р" в которой я работал,
весь колл-центр был собран на нескольких серверах с "умными картами".
Производительность  была  наивысшей  в  стране,  в  условиях  массовых
звонков (телевикторины, голосование за очень короткое время)
мы были в состоянии обрабатывать практически весь трафик Украины,
и при этом иметь загрузку по оборудованию порядка 30-50%.
...из-за рейдерских наездов и "изумительной политики Укртелеком"
компания,  к  сожалению,  прекратила деятельность, но у меня на память
осталось  две  книги  "Лидер  рынка"  :)  с  моими фото и попаданием в
"ТОП-20" телеком компаний по их рейтингу (эффективность работы, доходы
и т.п.).
Укртелеком,  который  постоянно  пытался  нам ставить палки в колеса и
отобрать  бизнес, в итоге, после прекращения нашей деятельности, так и
не смог создать ничего подобного с такой-же эффективностью в работе.

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



Wednesday, January 5, 2022, 12:56:04 PM, Yevgen Ionov yevgen.ionov at gmail.com you wrote:
YI> Использование FPGA ограничено в основном задачами в data plane (программные
YI> манипуляции с пакетами, например тоже RTP timestamp с использованием P4,
YI> OpenFlow), все что относится с к программируемым сетям, AI, как
YI> альтернатива ASIC с его fixed instructions. Т.е. вспомогательная функция и
YI> нет смысла его не позиционировать как замену микропроцессорам, при всем
YI> желании он не будет широко использоваться в HW. Это даже бессмысленно
YI> дискутировать.
YI> Таже Cisco год назад использовала его только в одной модели свитчей, пару
YI> от Arista и Palo Alto в high end моделях для offload некоторых задач.
YI> Да и с offload тоже нужно детально проверять, что поддерживает ОС. Три года
YI> назад тестировал различные uCPE, например на Intel SoC и поддержкой
YI> QAT. QAT мог разгрузить Core в задачах с криптованием и в итоге оказалось,
YI> что ни в PanOS, ни в FortiOS, ни в Cisco ISRv в VM исполнении не были
YI> заложены инструкции для offload таких задач (AES-NI - да, QAT - нет).
YI> Вендоры обещали реализовать это в будущем.

YI> Возвращаясь к начальной дискуссии о проблеме с буферной памятью FPGA + P4
YI> имеет лучшие перспективы для решений подобных задач чем ASIC. Но с этим еще
YI> надо разбираться, пока есть идеи, но не могу сказать будут ли они работать.

YI> On Wed, 5 Jan 2022 at 09:26, Vladimir Sharun <vladimir.sharun at ukr.net>
YI> wrote:
>> Привет,
>>
>> Netflix делает свой трафик через Mellanox ConnectX-6 DX c оффлоадом
>> шифрования TCP в карту.
>>
>> А чтобы это в принципе работало, Netflix/Mellanox/Chelsio "к гирям
>> freeBSD" написали код, который дал такую возможность правильно.
>>
>> Для шифрования "сильно зависит": можно и на проце через AES-NI и это
>> работает. Вопрос в количестве гигабит.
>>
>> Я по-этому и спросил про FPGA - оч интересно какое именно применение даст
>> смысл вложениям денег в голую железку, почему не купить готовое и сделать
>> бизнес с использованием готовых инструментов.
>>
>>
>> *5 січня 2022, 01:51:47, від "Andriy Berestovskyy" <berestovskyy at gmail.com
>> <berestovskyy at gmail.com>>: *
>>
>> > On 4 Jan 2022, at 20:15, Alexander V Soroka <alex at euro.net.ua> wrote:
>> > Хеон? серьезно? с гирями на ногах ФрииБСД, с узкими местами общей шины
>>
>> Xeon-ы есть разные: есть со встроенными FPGA, есть со встроенными 2x100Gbps, есть с 288 аппаратными потоками…
>>
>> > Шифрование  на  FPGA  по  любому  будет лучше  и быстрее чем прога на
>>
>> Для шифрования TCP/IP лучше и быстрее купить готовую сетевую карту c crypto offload.
>>
>> > Нетфликс  пусть  и  гики,  но возможности железа не перепрыгнуть, да и
>>
>> ИМО FPGA может иметь смысл под что-то узкоспециализированное, а IPsec/TLS — это стандартные задачи, давным давно реализованные в SoC-ах, с готовыми драйверами и библиотеками под Linux/FreeBSD…
>>
>> Андрей
>>
>> _______________________________________________
>> uanog mailing listuanog at uanog.kiev.uahttps://mailman.uanog.kiev.ua/mailman/listinfo/uanog
>>
>> _______________________________________________
>> uanog mailing list
>> uanog at uanog.kiev.ua
>> https://mailman.uanog.kiev.ua/mailman/listinfo/uanog





-- 
Best regards,
Alexander V Soroka       http://www.svr.ua/
AS106-RIPE
mailto:alex at euro.net.ua



More information about the uanog mailing list