POIT #091: Układy FPGA w sieciach SDN

Witam w dziewięćdziesiątym pierwszym odcinku podcastu „Porozmawiajmy o IT”. Tematem dzisiejszej rozmowy są układy FPGA w programowalnych sieciach komputerowych (SDN).

Dziś moimi gośćmi są:

Maciej Trochimiuk – Software Engineer w CodiLime. Doktor na Politechnice Warszawskiej. Studiował informatykę i radiokomunikację. Pracował m. in. w Orange Polska i Samsung Electronics.

Mateusz Jabłoński – Software Engineer w CodiLime. Absolwent informatyki na Politechnice Warszawskiej. Programista C, C++ oraz Python.

W tym odcinku o układach FPGA w programowalnych sieciach komputerowych (SDN) rozmawiamy w następujących kontekstach:

  • czym są i jak działają układy FPGA?
  • jakie są zalety tych układów?
  • gdzie i w jaki sposób się je wykorzystuje?
  • jak się je programuje?
  • czym jest akceleracja na przykładzie kart graficznych?
  • jak łączy się software z układami FPGA?
  • czym są układy SmartNIC?
  • w jaki sposób wykorzystuje się układy SmartNIC w sieciach SDN?
  • w jakim kierunku te układy i ich zastosowanie w sieciach SDN będą się rozwijały?

Subskrypcja podcastu:

Linki:

Wsparcie na Patronite:

Wierzę, że dobro wraca i że zawsze znajdą się osoby w bliższym lub dalszym gronie, którym przydaje się to co robię i które zechcą mnie wesprzeć w misji poszerzania horyzontów ludzi z branży IT.

Patronite to tak platforma, na której możesz wspierać twórców internetowych w ich działalności. Mnie możesz wesprzeć kwotą już od 5 zł miesięcznie. Chciałbym oddelegować kilka rzeczy, która wykonuję przy każdym podcaście a zaoszczędzony czas wykorzystać na przygotowanie jeszcze lepszych treści dla Ciebie. Sam jestem patronem kilku twórców internetowych i widzę, że taka pomoc daje dużą satysfakcję obu stronom.

👉Mój profil znajdziesz pod adresem: patronite.pl/porozmawiajmyoit

Pozostańmy w kontakcie:

 

Muzyka użyta w podcaście: „Endless Inspiration” Alex Stoner  (posłuchaj)

Transkrypcja podcastu

To jest 91. odcinek podcastu Porozmawiajmy o IT, w którym z moimi gośćmi rozmawiam o układach FPGA w programowalnych sieciach komputerowych.

Przypominam, że w poprzednim odcinku rozmawiałem o punkcie wymiany ruchu internetowego.

Wszystkie linki oraz transkrypcję dzisiejszej rozmowy znajdziesz pod adresem porozmawiajmyoit.pl/91.

Jeśli jeszcze tego nie zrobiłeś, to wystaw ocenę lub recenzję podcastowi w aplikacji, w której tego słuchasz.

Chcę poszerzać horyzonty ludzi z branży IT i wierzę, że poprzez wywiady takie jak ten, publikowane jako podcasty, będę to robił z sukcesem.

Już dzisiaj możesz mnie wesprzeć w tej misji zostając patronem na platformie Patronite. Wejdź na porozmawiajmyoit.pl/wspieram i sprawdź szczegóły. Jednocześnie bardzo dziękuję moim obecnym patronom.

Nazywam się Krzysztof Kempiński i życzę Ci miłego słuchania. 

Odpalamy!

 

Cześć! Dzisiaj moimi gośćmi w podcaście są Maciej Trochimiuk, Software Engineer w CodiLime, doktor na Politechnice Warszawskiej. Studiował informatykę i radiokomunikację. Pracował między innymi w Orange Polska i Samsung Electronics. Oraz Mateusz Jabłoński, Software Engineer w CodiLime, absolwent informatyki na Politechnice Warszawskiej, programista C, C++ oraz Python. 

Z Maciejem i Mateuszem będę dzisiaj rozmawiał o układach FPGA w programowalnych sieciach komputerowych.

Maciej, Mateusz, bardzo mi miło gościć Was w podcaście.

 

Maciej Trochimiuk: Cześć! Mnie również bardzo miło.

 

Mateusz Jabłoński: Cześć!

 

Cieszę się, że będziemy mieli okazję porozmawiać, ale na początku zapytam Was o to, o co zawsze pytam moich gości, czyli czy słuchacie podcastów, a jeśli tak, to jakich najczęściej?

 

M.T.: Słucham podcastów, ale wyłącznie zagranicznych. Traktuje to jako pewne narzędzie do utrzymania kontaktu z językiem. Natomiast polskojęzycznych nie słucham, tak się przyznam.

 

M.J.: Natomiast mi się zdarza posłuchać jakiegoś polskiego podcastu, ale bardziej jak znajdę coś ciekawego, albo ktoś mi coś ciekawego podeśle. Nie mam raczej takich podcastów, które słuchałbym regularnie. Natomiast bardzo lubię przeglądać jakieś bardziej techniczne materiały wideo na YouTubie, czy Livestreamy.

 

Dzięki wielkie.

Układy FPGA, o których będziemy dzisiaj rozmawiać, to przykład układów programowalnych. Chciałbym Was zapytać, czym są takie układy programowalne w ujęciu ogólnym.

 

M.T.: Generalnie układy scalone, takie jak na przykład procesory, czy mikrokontrolery, działają na takiej zasadzie, że mają wyprowadzenia na różne sygnały, które można wbić i te wyprowadzenia, i ich architektura jest zadana raz w procesie produkcyjnym. Czyli jeżeli mamy jakiś mikrokontroler albo nawet procesor, wiemy które nóżki, do czego służą, czy która nóżka jest zasilaniem, która jest sygnałem zegarowym, które nóżki są do pamięci i tak dalej. 

Natomiast jeżeli nie ma możliwości zmiany sposobu, w jaki ten układ działa. Sposób jego działania jest zadany raz przez producenta w procesie produkcji. W przypadku układów programowalnych mamy oczywiście część funkcjonalności, która jest zapisana na sztywno. W tym przypadku programowanie, zasilanie i tak dalej. Natomiast cała funkcjonalność tego układu scalonego muszę programować, w ten sposób, że jeden taki układ może być zaprogramowany tak, żeby był na przykład procesorem w architekturze ARM, innym razem taki układ może być kartą sieciową albo innym razem jakimś koderem sieciowym.

 

W 59. odcinku podcastu rozmawiałem z Krzysztofem Wróblem o SDN, czyli Software Defined Networking w sieciach programowalnych softwarowo. W dzisiejszym odcinku chciałbym z Wami porozmawiać o tym, jak te układy FPGA programowalne możemy w tego typu sieciach wykorzystać. 

Warto więc myślę, w pierwszej kolejności odsłuchać ten odcinek, to informacja dla słuchaczy, którzy nie mieli wcześniej ku temu okazji. Natomiast Was chciałbym zapytać, poprosić o rozwinięcie akronimu FPGA i powiedzenie po prostu czym są te układy i jaka była historia ich powstania.

 

M.T.: Skrót od FPGA po angielski rozwija się jako Field Programmable Gate Array. Układy programowane jako pierwsze, skąd były to pewne matryce bramek logicznych, które można było programować. Wynika to z praw De Morgana czy można wyprowadzić, czy wystarczy jeden procent bramek, czy dwa rodzaje bramek, albo AND, albo OR, żeby taki układ mógł realizować bardzo szeroką gamę funkcji logicznych, czyli takich, gdzie wejściem i wyjściem są zero jedynki. Generalnie te układy, o których mówię, to już jest wręcz prehistoria. 

Natomiast w procesie rozwoju układów programowalnych powstawały coraz doskonalsze układy. W przypadku układów programowalnych programujemy komórki logiczne, które mogą działać zarówno jako rejestry, sumatory, multipleksery, czy tablice przygruntowe. Co więcej, strukturę działania i sposób pracy takich komórek można zmniejszyć w trakcie pracy. Układ, który jest włączony, może po prostu po przeprogramowaniu stać się zupełnie czymś innym, czym był przed chwilą.

 

W przypadku układów programowalnych programujemy komórki logiczne, które mogą działać zarówno jako rejestry, sumatory, multipleksery, czy tablice przygruntowe. Układ, który jest włączony, może po prostu po przeprogramowaniu stać się zupełnie czymś innym, czym był przed chwilą.

 

Co prawda studiowałem elektronikę i telekomunikację, więc trochę w tym obszarze pojmuję pojęć, natomiast nigdy nie pracowałem zawodowo w tym obszarze. Musiałem się też do tego podcastu douczyć i poczytać. Szukając różnych informacji, dotarłem do tego, że czołowe firmy produkujące właśnie układy tego typu wymieniają szereg korzyści wynikających z korzystania układów FPGA, między innymi elastyczność, szybkość, redukcja kosztów. Chcę Was zapytać, jak według Was można by opisać taki ogół korzyści ze stosowania tych układów, również w stosunku do tych zaproponowanych przez Intela?

 

M.T.: W przypadku korzyści, zarówno podstawową funkcją, dla której wykorzystywane są układy w FPGA jest przede wszystkim programowanie układów scalonych. Ponieważ taki układ może realizować bardzo szeroką gamę funkcji logicznych, nie musimy projektować układu scalonego tak, że zlecamy fabrykację gotowego projektu i następnie ją przygotowujemy, tylko przygotowujemy projekt na układ w FPGA, który możemy zrealizować, sprawdzić dokładnie jak działa. 

Jeżeli okaże się, że ten projekt wymaga poprawek, możemy te poprawki wprowadzić i w kolejnej iteracji ten układ poprawić. W tym przypadku oszczędza się zarówno bardzo dużo czasu, ponieważ fabrykacje takiego gotowego układu mogą być procesem bardzo skomplikowanym, a także kosztów, ponieważ jeden układ może nam służyć do przygotowywania bardzo wielu iteracji danego projektu.

 

Jak tego typu układy działają od strony technologicznej, czy wszystkie opierają się na tych samych zasadach? Są może tworzone w ten sam sposób, czy mamy różne typy?

 

M.T.: Tutaj będę mówił tylko o układach FPGA, tak jak mówiłem, te starsze typy, czyli BLD, czy CBLD, to już są układy prehistoryczne. Inna sprawa, że na przykład w przypadku Intela była MAX, czyli takie bardzo stare nadal są wykorzystywane, natomiast nie zmienia to faktu, że te układy nie tracą konfiguracji w przypadku wyłączenia i włączenia zasilania, a układ w FPGA muszą za każdym razem być przeprogramowywane. W przypadku projektów Intela układ MAX służy do inicjalizacji płytki i następnie można powiedzieć pierwsze skrzypce gra już układ FPGA, kiedy zostają zainicjalizowane. Wracają do samych układów FPGA, one składają się z komórek logicznych, połączonych kanałami połączeniowymi. Każda komórka logiczna składa się z tablicy przeglądowej i jest to element, który jest programowany. 

Natomiast tablica ta wykorzystywana jest do wysterowania elementów, z których składa się każda komórka i do realizowania funkcji logicznych odnośnie deplementów, z których składa się komórka, czyli oprócz tej tablicy każda komórka zawiera sumator, czyli układ służący do realizowania dodawania, a także przy pomocy odpowiedniej zmiany stanów konsologicznych można także odejmować. Oprócz sumatora mamy także rejestry, czyli elementy logiczne służące do realizowania pamięci, takich najprostszych. Oraz multipleksery, czyli elementy przełączające. 

Oprócz tego w układach FPGA mogą znajdować się pamięci statyczne i dynamiczne, ale to już bardzo dokładnie zależy od konkretnego modelu producenta. Oprócz tego w układach FPGA można znaleźć także gotowe elementy, takie jak rdzenie procesorów, kontrolery pamięci, kontroler USB, czy karty sieciowe.  Z tego względu, że są to na tyle często używane podzespoły, żeby nie było konieczności implementowania ich w strukturze FPGA skoro mogą być zaimplementowane w krzemie i w ten sposób mogą być od razu wykorzystywane.

 

Struktura, którą opisałeś, wydaje się bardzo elastyczna. Wydaje się, że można ją zastosować w różnych obszarach. Chciałbym właśnie zapytać teraz o te obszary, kto wykorzystuje tego typu układy, czy są być może jakieś dziedziny, które chętnie korzystają z możliwości układów FPGA?

 

M.T.: Wcześniej mówiłem już o podstawowym zastosowaniu układów FPGA, czyli prototypowaniu układów scalonych. Oprócz tego mogę jeszcze dodać, że wszystkie na przykład współczesne procesory tensorowe, albo nawet koparki to kryptowalut, te wszystkie nowe układy scalone zaczynały jako właśnie projekty w FPGA i dopiero po osiągnięciu pewnego poziomu dojrzałości, te procesory tensorowe zostały już zaimplementowane w krzemie. Był to po prostu projekt, który wyewoluował z układu w FPGA, bo tam były początkowo rozwijane. 

Oprócz tego stosowane są w systemach czasu rzeczywistego, czyli tam, gdzie te wymagania czasowe są bardziej wyśrubowane i w przypadku niezwykle wyśrubowanych wymagań, to już są ułamki mikrosekund, zastosowanie systemów czasu rzeczywistego zaimplementowanych na procesorach ogólnego przeznaczenia może być niewystarczające. Natomiast taki algorytm może być zaimplementowany w układzie FPGA z użyciem po prostu logiki albo kombinacyjnej, albo sekwencyjnej. Wykorzystując system czasu rzeczywistego w układzie FPGA może go modyfikować, ponieważ są to układy programowalne, a także, jeżeli dawny układ wiemy, że już jest dojrzały i dopracowany, możemy przenieść go do układu scalonego, gdzie będzie odznaczał się i znacznie lepszą szybkością i energooszczędnością. 

Oprócz tego układy programowalne wykorzystywane są przy projektach, które głęboko ingerują w sprzęt, czyli tam, gdzie część sprzętową może podlegać zmianom i nie możemy sobie pozwolić na zamrożenie całego projektu sprzętowego, gdzie zakładamy, że część sprzętowa może się zmienić i potrzebujemy układu, który będziemy dostosowywać do tych zmian. Jeżeli mamy jakiś podzespół albo układ jednego producenta i zakładamy, że jeden z dostawców może się zmienić i dostawca ten nie ma tego, może mieć inny interfejs, to w tym przypadku, takim naturalnym rozwiązaniem może być wykorzystanie układów programowalnych. Oprócz tego takim innym zastosowaniem, gdzie stosowane są układy FPGA, są różnego rodzaju akceleratory obliczeniowe.

 

Układy FPGA to układy programowalne. Do tej pory trochę powiedzieliśmy o podstawach technologicznych, o zastosowaniach, o tym, jak to wygląda od strony sprzętu. Myślę, że to, co szczególnie interesuje słuchaczy, to jak się programuje tego typu układy. Jakich języków programowania się używa, w jaki sposób transferuje się gotowy program do układu elektronicznego?

 

M.T.: W przypadku programowania układów programowanych to pojęcie jest takie troszeczkę mylące z tego względu, że może nie mylące, ponieważ w odróżnieniu od procesorów ogólnego przeznaczenia, procesorów graficznych, nie ma programu, który by się na nim wykonywał, w jakiś sposób sekwencyjny. W przypadku układów FPGA w programowaniu to, co nazywamy programowaniem układów FPGA, polega na stworzeniu architektury sprzętowej, która będzie realizowała zadany przez nasz algorytm, albo to, co chcielibyśmy, aby ten układ robił i opisaniu tego algorytmu w języku opisu sprzętu. Czyli takimi klockami, z których ten algorytm budujemy, nie są takie jak w przypadku programów na CPU albo na kartę graficzną, rejestr pamięci i zestaw operacji, które udostępnia procesor, tylko w przypadku FPGA składamy ten algorytm z bramek logicznych, sumatorów, rejestrów, multiplekserów, czyli takich elementów bardzo niskiego poziomu. 

Natomiast to ma te zalety, że można bardzo dokładnie dostosować się do danych elementów, które występują w algorytmie. Czyli jeżeli mamy dwudziesto bitowy typ danych, możemy tylko realizować na dokładnie dwudziesto bitowych sumatorach, a nie wykorzystywać do tego rejestru, które są na przykład w procesorze o przeznaczeniu trzydziestodwu bitowe. Możemy się bardzo dokładnie dopasować do danych oraz możemy wykorzystywać operacje, które w przypadku podwójnego przeznaczenia są albo trudne, albo czasochłonne. One są możliwe do realizacji, natomiast mogą się wiązać na przykład z bardzo długim czasem wykonywania operacji, jak na przykład różne operacje bitowe, czy maski bitowe, które w przypadku procesorów ogólnego przeznaczenia mogą być realizowane przez kilka cykli procesora, natomiast w układach FPGA mogą być po prostu realizowane natychmiast.

 

Rozumiem, czyli bardziej programujemy w krzemie, niż w języku wysokopoziomowym, gdzieś tam kojarzę pojęcia typu VHDL i tego typu języki, które być może, czy pseudo języki, które być może są już teraz archaiczne, natomiast zastanawiam się jak od strony programowania można by tu było powiedzieć kilka słów na temat, chociażby tworzenia takich układów w PGA właśnie na bazie tego sprzętu. Jakiego typu narzędzia, jakiego typu podejście się wykorzystuje, żeby taką strukturę stworzyć?

 

M.T.: Jeżeli chodzi o języki, to nie jest tak, że one są archaiczne. W przypadku języka VHDL on ma składnię bardziej zbliżoną do Pascala, niż do C, więcej jest to może nie archaizm, ale pewna specyfika tego języka, że programuje się nim troszeczkę inaczej, raczej składnie niż trochę inna. Natomiast Vector, czyli inny język opisu sprzętu ma składnię podobną do C, która niby powinna być taka bardziej intuicyjna dla osób, które nie miały wcześniej doświadczenia z językami opisu sprzętu. W przypadku tworzenia takiej architektury kluczowym narzędziem jest symulator HDL. Narzędzie, które pozwala zasymulować działania architektury na podstawie samych pobudzeńi sprawdzenia jak ten przepływ danych wygląda. 

Symulator jest tutaj bardzo istotnym elementem z tego powodu, że kompilacja programowania, czyli cykl polegający na skompilowaniu danego opisu sprzętu do układu i zaprogramowaniu tego układu, jest bardzo czasochłonne. Kompilacja nawet najprostszych programów może trwać bardzo długo. Dlatego tutaj kluczowym elementem jest symulator, aby ten algorytm, który zostanie tam zaimplementowany, bardzo dokładnie i dogłębnie zweryfikować. 

W przypadku depakowania układu, depakowania architektury sprzętowej jest to też mocno utrudnione z tego względu, że architektura sprzętowa musi uwzględniać możliwość depakowania, co przejawia się na przykład tym, że architektura sprzętowa w konfiguracji takiej gotowej do uruchomienia, może się w układzie FPGA mieścić bez problemu, natomiast architektura przygotowana do depakowania może się już nie zmieścić w układzie i będzie się charakteryzowała znacznie gorszymi charakterystykami czasowymi. W przypadku tworzenia algorytmów, które będą zaimplementowane w układzie FPGA bardzo ważne jest dokładne ich przesymulowanie, ponieważ może się okazać, że depakowanie takiego produktu może być mocno utrudnione.

 

Symulator jest tutaj bardzo istotnym elementem z tego powodu, że kompilacja programowania, czyli cykl polegający na skompilowaniu danego opisu sprzętu do układu i zaprogramowaniu tego układu, jest bardzo czasochłonne. Kompilacja nawet najprostszych programów może trwać bardzo długo.

 

Ciekawe wyzwania tej dziedziny programowania. Zastanawiam się w bardziej klasycznych ujęciach, czy w tworzeniu bardziej klasycznego programowania, które ma działać na procesorach ogólnego przeznaczenia, albo gier, które bardziej wykorzystują GPU, domyślam się, że w tych dziedzinach trochę inaczej podchodzi się do programowania, niż w przypadku układów programowalnych. Czy mógłbyś powiedzieć, jakie są główne różnice w tego typu podejściu, a bardziej klasycznych procesorach ogólnego przeznaczenia i kartach GPU?

 

M.T.: W przypadku układów programowalnych, jak już mówiłem, projektujemy po prostu architekturę sprzętową, która będzie wykonywała pewne zadania, natomiast w procesorach ogólnego przeznaczenia, mamy całą architekturę, czyli zestaw instrukcji, pamięć mamy zadaną, dostosowujemy się do tego, co zostało przewidziane przez producenta.

 

Czyli sama specyfika jest różna, jak również języki programowania, czy narzędzia, które się wykorzystuje. Czy można powiedzieć, że są jakieś rzeczy wspólne, skoro tak wiele na pierwszy rzut oka dzieli?

 

M.T.: W przypadku języka VHDL ta archaiczność składni ma jednak pewne wady, ponieważ pisanie tych weryfikatorów, czy weryfikowanie tego, czy architektura działa tak, jak zakładaliśmy, jest po prostu bardzo utrudnione i na przykład z własnego doświadczenia, kiedy pisałem pewną architekturę VHDL-u, to i tak musiałem wspomagać się Pythonem do wygenerowania części tego kodu, ponieważ wpisanie tego w czystym VHDL-u było wtedy dla mnie, może nie tyle zbyt pracochłonne, ale prościej dało się to zrobić inaczej.

 

Powiedzieliśmy tutaj chwile o układach GPU wykorzystywanych gdzieś w kartach graficznych. Jeśli jesteśmy przy tym temacie, to trzeba też powiedzieć, że jednym z głównych zastosowań układów FPGA jest akceleracja sprzętowa. Czym jest taka akceleracja i jak działa właśnie na przykładzie kart graficznych?

 

M.J.: Akceleracja sprzętowa jest wspomaganiem pewnych powtarzalnych złożonych operacji, które normalnie zużywałyby dużo zasobów naszego komputera i możemy takie operacje wydzielić, zaimplementować na dedykowanym sprzęcie, którym jest właśnie FPGA. Mówiąc o zasobach, mam na myśli w tym przypadku głównie moc obliczeniową. Wtedy dedykowany sprzęt przejmuje część zadań naszego CPU i odciąża po prostu nasze procesy. Karty graficzne są jednym z najbardziej rozpoznawalnych i najpowszechniejszych takich akceleratorów sprzętowych. 

W tym przypadku tak jak już mówiłem, mamy dedykowany sprzęt, który z zasady nie jest procesorem ogólnego przeznaczenia, tylko właśnie dedykowanym procesorem zajmującym się grafiką, wyświetlaniem grafiki. Mówię tutaj z zasady, ponieważ w dzisiejszych czasach już strony graficzne można używać do pewnego rodzaju obliczeń, no ale nadal nie są to dowolne obliczenia. To jest też pewien ograniczony zakres możliwości tego, co na GPU możemy zrobić. No ale GPU jest idealnym przykładem akceleratora sprzętowego i nie mówię tu tylko o dzisiejszych kartach graficznych, które przetwarzają setki tysięcy wierzchołków modelu, mnożąc je przez macierze i nakładają to tekstury i generują z tego obraz. Wiele razy, na przykład sześćdziesiąt razy na sekundę. 

Mówię też tu o czymś, co było przed kartami graficznymi, czyli na przykład akceleratorach 3D, które już wtedy wchodziły i wspierały procesu na generowaniu grafiki. Możemy także tu mówić o dedykowanych układach graficznych, które były w komputerach jeszcze w czasach jakichś interfejsów tekstowych. Wtedy procesor wpisywał tylko do pamięci to, co chciał, żeby było wyświetlone, a taki dedykowany układ zajmował się generowaniem tej grafiki. Często też na przykład sygnału analogowego. Można powiedzieć, że był to dedykowany akcelerator sprzętowy. 

Jeszcze mówiąc o zasobach, można też wyobrazić sobie akcelerator sprzętowy w postaci dodatkowej pamięci, dodatkowej karty z pamięcią pewnego rodzaju, na przykład chcemy mieć terabajty pamięci, ale nie ma być to pamięć ram, tylko może być to jakaś wolniejsza pamięć o jakimś sekwencyjnym dostępie, wtedy też możemy mówić, że to jest w pewnym sensie akcelerator sprzętowy.

 

A jak taka akceleracja działa w przypadku układów FPGA, w jaki sposób też połączyć też taki układ z softwarem, skoro on jest bardzo customizowalny, można go dostosować, czy są jakieś standardy, które umożliwiają później korzystanie, z takiego powiedzmy właśnie programowalnego układu poprzez software, który jest napisany, software wyższego już poziomu.

 

M.J.: Tak naprawdę akceleracja z udziałem FPGA działa tak samo, jak czysto sprzętowa implementacja. Różni się tylko właśnie implementacja z punktu widzenia komputera, który będzie to używał, może być tak naprawdę to samo. Jak wcześniej mówiliśmy, jak Maciej powiedział, główna różnica jest elastyczność i wszystkie pozostałe plusy, które daje nam FPGA, możemy w prosty sposób zmieniać implementację sprzętową, nawet już do danego sprzętu wypuszczać aktualizacje, aktualizujemy wtedy obraz, czy możemy też posiadać wiele implementacji, które będą działały na jednej płytce. 

Co do łączenia z softwarem, najprostszym przykładem będzie tutaj chyba GPAO. Wtedy łączymy odpowiednie piny naszego procesora, czy to w tym przypadku pewnie bardziej mikrokontrolera z odpowiednimi pinami FPGA. Wtedy FPGA możemy odpowiednio zaprojektować ten sprzęt, żeby odpowiednio interpretował sygnały, które będziemy podawali na takich pinach. 

Można oczywiście zaimplementować jakieś protokoły komunikacji, na przykład Quad SPI. Takim chyba najlepszym sposobem komunikacji w przypadku jakichś serwerów opartych o architekturę Intelową będzie PCI. Wtedy w FPGA implementujemy obsługę PCI i nasz procesor może pisać do odpowiednich rejestrów, tak zaimplementowanym sprzęcie, jak właśnie przez PCI. Nawet możemy wpisać odpowiednie adresy do tego FPGA i wtedy FPGA będzie pisało przez DMA do pamięci naszego hosta.

 

M.T.: Ze swojej strony chciałbym jeszcze dodać, że zarówno takie proste protokoły, jak UAD, jak i kontrolery PCI często są już zaimplementowane krzemowo w układach FPGA, więc są to rzeczy, które są dostępne i można je wykorzystać.

 

Rozumiem, czyli całkiem sporo różnych możliwości się przed nami otwiera, ale chciałbym porozmawiać o pewnym ciekawym i szczególnym zastosowaniu układów FPGA, którym to zastosowaniem jest SmartNIC. Ostatnio widziałem na blogu firmy CodiLIme, w której pracujecie, ciekawy artykuł na ten temat, więc chciałbym Was zapytać, czym jest i jak działa SmartNIC?

 

M.J.: W bardzo dużym skrócie SmartNIC jest inteligentną kartą sieciową, która możemy w pewien sposób programować i która potrafi trochę więcej niż tylko zwykłe odbieranie i wysyłanie pakietów. Potrafi na przykład te pakiety w pewnym stopniu modyfikować sprzętowo, albo podejmować jakieś decyzje na podstawie ich przepływu, no a także na podstawie kontekstu, czyli na podstawie sesji, które zostały otwarte przez inne pakiety. 

Co bardzo ważne, SmartNIC-i można programować dynamicznie, zmieniając ich zachowania w czasie działania. Daje to znowu bardzo dużą elastyczność i dzięki temu SmartNIC pozwala na przeniesienie pewnych operacji sieciowych, podejmowanych w czasie przepływu pakietów, właśnie na sprzęt. To jest kolejnym przykładem akceleracji sprzętowej.

 

SmartNIC-i można programować dynamicznie, zmieniając ich zachowania w czasie działania. Daje to znowu bardzo dużą elastyczność i dzięki temu SmartNIC pozwala na przeniesienie pewnych operacji sieciowych, podejmowanych w czasie przepływu pakietów, właśnie na sprzęt.

 

Jak SmartNIC ma się do ogólnie rozumianych układów FPGA? Czy to jest jakiś szczególny typ, szczególny rodzaj zastosowania, gdzie są jakieś różnice i podobieństwa tych dwóch typów?

 

M.J.: Generalnie użycie układów FPGA w składnikach jest jednym ze sposobów ich implementacji. Zamiast FPGA moglibyśmy mieć dedykowany sprzęt, czyli ICQ albo jakieś procesory ogólnego przeznaczenia, znajdujące się w danym sprzęcie, ale przeznaczone tylko do obsługi danych pakietów. Każde z tych rozwiązań, czy to FPGA, ICQ, czy to procesory mają swoje wady i zalety. 

W przypadku ICQ nie możemy zmieniać implementacji, tracimy więc elastyczność, ale cena produkcji masowej jest na pewno korzystniejsza. W przypadku procesorów mamy większa elastyczność, ale nie mamy też dedykowanego sprzętu, który można by było bardziej zoptymalizować pod konkretne zastosowania. Moim zdanie FPGA jest tu gdzieś pośrodku, czyli jednocześnie mamy elastyczność, ale mamy też możliwość optymalizacji zaimplementowania czegoś lepiej, po swojemu.

 

Układy SmartNIC wykorzystuje się w SDN, sieciach definiowanych programowo. Więcej o tych sieciach rozmawiam z Krzysztofem w 59. odcinku. Tu odsyłam też do tego odcinka, natomiast może tak krótko byśmy jeszcze przypomnieli, czym są sieci SDN i w jaki sposób wykorzystuje się układy SmartNIC, by uzyskać tę akcelerację sprzętową.

 

M.J.: Jasne. Tak jak powiedziałeś, SDN to programowalne sieci komputerowe, czy sieci definiowane programowe. W skrócie główną ideą jest rozdzielenie warstwy kontrolnej, czyli control plane, od warstwy transportowej, czyli data plane, w jakimś inteligentnym urządzeniu sieciowym. Wtedy takie urządzenie zajmuje się tylko przesyłaniem danych, a cała kontrola jak to robić odbywa się w oprogramowaniu. O samych SDN mógłbym mówić naprawdę dużo, ale tak jak powiedziałeś, również polecam 59. odcinek podcastu o SDN-ach. Krzysiek tam myślę, że dużo o nich opowiedział. 

W przypadku zastosowania SmartNIC-ów w SDN możemy duży narzut warstwy transportowej przenieść właśnie z CPU na sprzęt. Oczywiście funkcjonalności, które można w tym przypadku akcelerować, zależą w dużym stopniu od konkretnego sprzętu, od tego, co chcemy osiągnąć i od wymagań klientów. Z takich najprostszych rzeczy możemy tutaj wymienić na przykład firewalle sprzętowe. W takim przypadku warstwa kontrolna zajmuje się tylko programowaniem reguł, no a warstwa sprzętową już w FPGA decyduje na podstawie tych reguł, jakie pakiety przepuszczać, a jakie zatrzymywać. Kolejnym zastosowaniem może być IPsec. To jest jeszcze lepszy przykład, ponieważ całe szyfrowanie pakietów w tym przypadku możemy przenieść do sprzętu, odciążając nasze CPU. 

Podobnie jest z IPN, tunelujemy wtedy w sprzęcie nasze pakiety, dodajemy, usuwamy odpowiednie nagłówki, odciążamy procesor. Ogólnie ogromne możliwości daje zaimplementowanie na przykład wirtualnych inteligentnych switchy, czy routerów. Możemy wtedy w takim switchu sprzęty zaimplementować, to wszystko, o czym przed chwilą powiedziałem, czyli firewalle, tunelowanie, szyfrowanie, no, a także dodatkowo to, czym się zajmują takie switche, czy routery, czyli jakiś routing mat, czy cokolwiek, co sobie ktoś zażyczy, wymyśli.

 

IPsec, VPN, takie obszary, które powiedzmy zyskują na znaczeniu, w obecnych czasach, kiedy wzmożony ruch w internecie panuje, kiedy coraz więcej ludzi pracuje zdalnie. Myślę, że te osoby, które gdzieś tam zainteresowały się tym tematem właśnie związanym z układami FPGA, czy też właśnie z sieciami definiowanymi programowo. Co mogłyby takie osoby zrobić, od czego mogłyby zacząć, co moglibyście polecić, jeśli ktoś chciałby rozpocząć gdzieś swoją przygodę właśnie w tym obszarze IT?

 

M.T.: Na początku przed zajęciem się w ogóle wejściem w FPGA warto by było jednak zapoznać się z taką trochę inną charakterystyką programowania układów, których po prostu jest odmienna od tego, co jest implementowane na CPU i GPU.

 

Dopytam może, czy są jakieś na przykład kursy internetowe, książki, inne materiały, z których można skorzystać, jeśli chce się poznać tego typu układy, czy też raczej studia są takim kierunkiem, który powinien nas dowieść, doprowadzić do tego?

 

M.T.: Generalnie programowania układów FPGA nauczyłem się na studiach. Pracę inżynierską i magisterską robiłem. Dotyczyła ona co prawda takich zagadnień związanych z kodowaniem obrazów, ale były to projekty realizowane właśnie w układach FPGA. Nauczyłem się tego na studiach. Natomiast z pewnością są i podręczniki, kursy, gdzie można się tego nauczyć.

 

M.J.: Ze swojej strony mogę powiedzieć, że na studiach miałem jeden przedmiot generalny, gdzie nauczyłem się tylko jakichś podstaw. W tej chwili głównie wykorzystuje układy FPGA przy pracy z SDN-ami. Nie mam też jakiś dobrych materiałów, ale tak jak Maciej powiedział, na pewno dużo jakichś książek, moim zdaniem pewnie też jakieś kursy nawet darmowe, gdzieś na YouTubie dałoby się znaleźć.

 

Zapytam Was teraz o przyszłość, w jakim kierunku będzie następował rozwój układów FPGA. W przyszłości jeszcze mocniej będą one wpływać na przykład na sieci SDN?

 

M.T.: Ze swojej strony spodziewałbym się, że te zastosowania układów FPGA w sieciach, na pewno będą się rozwijać, choćby z tego powodu, że po tym, jak Intel przejął firmę Altera, konkurent Intela, czyli AMD, szykuje przejęcie innego, dużego producenta układów FPGA, czyli firmy Xilinx. Natomiast odnośnie samego układu w FGA spodziewałbym się, że oprócz tych programowanych komórek logicznych, będą się tam coraz częściej znajdować bardzo wyspecjalizowane elementy krzemowe, czyli kontrolery. Oprócz nich możemy się spodziewać też innych układów dedykowanych w zastosowaniu w sieciach komputerowych. 

 

M.J.: Z mojego punktu widzenia, właśnie tak jak powiedziałem, bardziej jako użytkownika od FPGA, program jest SDN, im większa pojemność FPGA, czyli więcej ramek logicznych, tym bardziej skomplikowane funkcjonalności możemy na nim zaimplementować. Więcej funkcji sieciowych możemy wtedy zmieścić w jednym układzie. A co za tym idzie, w jednym sprzęcie. Prawdopodobnie w tym kierunku też można iść. Oczywiście wtedy implementacja też jest dużo bardziej skomplikowana.

 

Dobrze, Maciej, Mateusz, bardzo Wam dziękuję za dzisiejszą rozmowę. Cieszę się, że pokazaliście taki nieoczywisty obszar związany z programowaniem, albo trochę inne podejście do programowania, może bardziej związanego ze sprzętem. Być może ktoś będzie miał się okazję zainspirować i w tym kierunku pokierować swoją karierą. Bardzo dziękuję ze swojej strony. Powiedzcie, proszę, gdzie można Was znaleźć w internecie, w jaki sposób się z Wami skontaktować, gdyby ktoś właśnie miał jakieś pytania, chciał dopytać o jakieś zagadnienia związane z tematem naszego dzisiejszego podcastu?

 

M.T.: Jeżeli chodzi o kontakt do mnie, to chyba najprościej będzie mailem, z tego powodu, że co prawda mam konto na Facebooku, nawet na Instagramie, natomiast mówiąc językiem młodzieżowym, nie należę do aten cjuszy. 

 

M.J.: Również dziękuję. Podobnie, tak jak Maciej, głównie prawdopodobnie wolałbym przez maila. Myślę, że będzie podany gdzieś w opisie, ale mateuszjablonski@codilime.com

 

Ok. Zatem maile znajdą się w notatce do tego odcinka. Z mojej strony jeszcze raz bardzo dziękuję, do usłyszenia, cześć!

 

M.T.: Dziękuję serdecznie.

 

M.J.: Dziękuję, do usłyszenia!

 

To na tyle z tego, co przygotowałem dla Ciebie na dzisiaj. Mam nadzieję, że ten odcinek pozwoli Ci zaznajomić się z układami FPGA i z ich wykorzystaniem w programowalnych sieciach komputerowych SDN.

Jeśli doceniasz to, co robię, wesprzyj mnie na Patronite. To taka platforma, na której możesz wspierać twórców internetowych w ich działalności. Mnie możesz wesprzeć kwotą już od 5 zł miesięcznie. Mój profil znajdziesz pod adresem porozmawiajmyoit.pl/wspieram. Link również w notatce do tego odcinka.

Jeśli masz jakieś pytania, pisz śmiało na krzysztof@porozmawiajmyoit.pl. 

Jeśli spodobał Ci się ten odcinek i nie chcesz przegapić kolejnych epizodów podcastu, zasubskrybuj go w swojej aplikacji podcastowej. Jeśli nie wiesz jak to zrobić, wejdź na stronę porozmawiajmyoit.pl/subscrybuj. 

Nazywam się Krzysztof Kempiński, a to był odcinek podcastu Porozmawiajmy o IT o układach FPGA w programowalnych sieciach komputerowych. 

Zapraszam do kolejnego odcinka już za tydzień.

Cześć!

 

+ Pokaż całą transkrypcję
– Schowaj transkrypcję
mm
Krzysztof Kempiński
krzysztof@porozmawiajmyoit.pl

Jestem ekspertem w branży IT, w której działam od 2005 roku. Zawodowo zajmuję się web-developmentem i zarządzaniem działami IT. Dodatkowo prowadzę podcast, kanał na YouTube i blog programistyczny. Moją misją jest inspirowanie ludzi do poszerzania swoich horyzontów poprzez publikowanie wywiadów o trendach, technologiach i zjawiskach występujących w IT.