P4 programozási nyelv

P4 programozási nyelv
A P4 egy programozási nyelv, amelyet a csomagok útválasztási szabályainak programozására terveztek. Ellentétben az általános célú nyelvekkel, mint például a C vagy a Python, a P4 egy tartomány-specifikus nyelv, számos hálózati útválasztásra optimalizált kialakítással.

A P4 egy nyílt forráskódú nyelv, amelyet a P4 Language Consortium nevű non-profit szervezet engedélyez és tart fenn. Támogatja továbbá az Open Networking Foundation (ONF) és a Linux Foundation (LF), a nyílt forráskódú hálózati projektek két legnagyobb ernyőszervezete.
A nyelvet eredetileg 2013-ban találták ki, és egy 2014-es SIGCOMM CCR-dokumentumban írták le, „Protocol Independent, Packet Routing Processor Programming” címmel.

Megalakulása óta a P4 exponenciálisan nőtt és fejlődött, és gyorsan a hálózati eszközök, köztük a hálózati adapterek, kapcsolók és útválasztók általi csomagátvitel leírásának szabványává vált.

„Az SDN átalakította a hálózati iparágat, és a P4 a következő szintre emeli az SDN-t azáltal, hogy programozhatóvá teszi az útválasztást” – mondta Guru Parulkar, az Open Networking Foundation ügyvezető igazgatója.

A P4 nyelvet eredetileg a Google, az Intel, a Microsoft Research, a Barefoot, a Princeton és a Stanford mérnökei és kutatói alkották. A cél egyszerű volt: hozzon létre egy könnyen használható nyelvet, amelyet egy szoftverfejlesztő egy nap alatt megtanulhat, és amellyel pontosan leírhatja, hogyan küldik el a csomagokat a hálózatokon.

A P4-et kezdettől fogva célfüggetlenre tervezték (azaz egy P4-ben írt programot változatlan formában le lehetett fordítani, hogy különféle célpontokon, például ASIC-eken, FPGA-kon, CPU-kon, NPU-kon és GPU-kon futhasson).

A nyelv protokollfüggetlen is (azaz egy P4 program leírhatja a meglévő szabványos protokollokat, vagy új egyéni címzési módok megadására használható).

Az iparban a P4-et eszközök programozására használják. Talán a jövőben az Internet-RFC és az IEEE szabványok is tartalmazzák majd a P4 specifikációt.

A P4 programozható és fix funkciós eszközökhöz egyaránt használható. Például a kapcsolófolyamat viselkedésének pontos rögzítésére szolgál a nyílt forráskódú SONiC switch OS által használt Switch Abstraction Interface (SAI) API-kban. A P4-et az ONF Stratum projektben is használják a kapcsolási viselkedés leírására számos rögzített és programozható eszközön.

A kapcsoló és a hálózati adapterek viselkedésének leírása most először teszi lehetővé a teljes hálózat pontos végrehajtható modelljének létrehozását a telepítés előtt. A nagy felhőszolgáltatók teljes egészében szoftver segítségével tesztelhetik és hibakereshetik a hálózatot, jelentősen csökkentve az interoperabilitás tesztelésének idejét és költségeit a laborban anélkül, hogy drága hardverre lenne szükségük.

A P4 használatával a hálózati berendezések szállítói az összes termékben közös, mögöttes útválasztási viselkedésre számíthatnak, lehetővé téve a tesztinfrastruktúra újrafelhasználását, leegyszerűsítve a felügyeleti szoftverek fejlesztését, és végső soron az interoperabilitást.

Természetesen a P4 segítségével olyan programok is írhatók, amelyek teljesen új útválasztási módokat írnak le. Például a P4-et széles körben használják telemetriára és mérésekre adatközpontokban, vállalati és szolgáltatói hálózatokban.

A kutatótársadalom is erősödött. Számos vezető akadémiai hálózatépítési kutatócsoport tett közzé izgalmas, új, P4-programokon alapuló alkalmazásokat, beleértve a terheléselosztást, a konszenzusos protokollokat és a kulcsérték-gyorsítótárat. Új programozási paradigma jön létre, az innováció a hardverről a szoftverre költözik, ami sok váratlan, új és zseniális ötlet megjelenését teszi lehetővé.

A fejlesztői közösség jelentős mértékben hozzájárult a kódfejlesztéshez, beleértve a fordítókat, folyamatokat, viselkedési modelleket, API-kat, tesztkeretrendszereket, alkalmazásokat stb. Az olyan cégek, mint az Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx és ZTE rendelkeznek dedikált fejlesztőkkel; olyan egyetemekről, mint a BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass és USI; és a nyílt forráskódú projektek, köztük a CORD, az FD.io, az OpenDaylight, az ONOS, az OvS, a SAI és a Stratum rávilágítanak arra a tényre, hogy a P4 egy független közösségi projekt.

A vezérlők tipikus generációja a P4 nyelvhez:

P4 programozási nyelv

Pályázati kilátások

P4 programozási nyelv
Mivel a nyelvet alkalmazások útválasztására szánják, a követelmények listája és a tervezési lehetőségek eltérnek az általános célú programozási nyelvektől. A nyelv főbb jellemzői:

  1. Függetlenség a cél megvalósításától;
  2. A használt protokoll(ok) függetlensége;
  3. A mező újrakonfigurálhatósága.

Függetlenség a cél megvalósításától

A P4 programokat úgy tervezték, hogy függetlenek legyenek az implementációtól, ami azt jelenti, hogy számos különböző típusú végrehajtó motorhoz lefordíthatók, például általános célú processzorokhoz, FPGA-khoz, chip-alapú rendszerekhez, hálózati processzorokhoz és ASIC-ekhez. Ezeket a különböző típusú gépeket P4 célpontoknak nevezik, és mindegyik célponthoz szükség van egy fordítóra, amely a P4 forráskódot célkapcsoló-modellré konvertálja. A fordító beépíthető a céleszközbe, külső szoftverbe vagy akár felhőszolgáltatásba is. Mivel a P4 programok eredeti célpontjai közül sok egyszerű csomagváltást szolgált, nagyon gyakran hallani a "P4 kapcsoló" kifejezést, bár a "P4 cél" pontosabb.

A használt protokoll(ok) függetlensége

A P4 protokollfüggetlen. Ez azt jelenti, hogy a nyelv nem támogatja az olyan általános protokollokat, mint az IP, Ethernet, TCP, VxLAN vagy MPLS. Ehelyett a P4 programozó leírja a programban a szükséges protokollok fejlécformátumait és mezőneveit, amelyeket viszont a lefordított program és a céleszköz értelmez és dolgoz fel.

A mező újrakonfigurálhatósága

A protokollfüggetlenség és az absztrakt nyelvi modell lehetővé teszi az újrakonfigurálást – a P4-célpontoknak képesnek kell lenniük a csomagfeldolgozás megváltoztatására a rendszer üzembe helyezése után. Ezt a képességet hagyományosan az általános célú processzorokon vagy hálózati processzorokon keresztül történő útválasztással társították, nem pedig a rögzített funkciójú integrált áramkörökön.

Bár a nyelvben nincs semmi, ami megakadályozná egy adott protokollkészlet teljesítményének optimalizálását, ezek az optimalizálások láthatatlanok a nyelv szerzője számára, és végső soron csökkenthetik a rendszer és a célok rugalmasságát, valamint azok újrakonfigurálhatóságát.

A nyelvnek ezeket a jellemzőit eredetileg alkotói határozták meg, a hálózati infrastruktúrában való széles körű használatára összpontosítva.

A nyelvet már sok cég használja:

1) Hyperscale adatközpontok;

A kínai Tencent a világ legnagyobb befektetési társasága és az egyik legnagyobb kockázati tőketársaság. A Tencent leányvállalatai mind Kínában, mind a világ más országaiban a high-tech üzletág különböző területeire szakosodtak, beleértve a különféle internetes szolgáltatásokat, a mesterséges intelligencia és az elektronikus szórakoztatás területén végzett fejlesztéseket.

A P4 és a programozható útválasztás olyan fejlett technológiák, amelyeket a vállalat hálózati architektúrájában használnak.

Az egyik ötletgazdaként a Google büszkén veszi tudomásul a P4 gyors elterjedését a hálózati iparban és különösen az adatközpontok építészeti tervezésében.

2) Kereskedelmi társaságok;

A Goldman Sachs kihasználja a nyílt forráskódú közösséggel való együttműködés előnyeit, valamint közös szabványok és megoldások kidolgozását a hálózati infrastruktúra megújítására és jobb megoldások biztosítására ügyfelei számára.

3) Termelés;

Az egész hálózati iparág számára előnyös lenne egy olyan nyelv, mint a P4, amely egyedileg határozza meg a továbbítási viselkedést. A Cisco emellett úgy gondolja, hogy termékvonalait ennek a nyelvnek a használatára kell átállítani.

A Juniper Networks számos termékbe beépítette a P4-et és a P4 Runtime-ot, és programozott hozzáférést biztosít a Juniper beágyazott processzorához és szoftverkódjához.

A Ruijie Networks határozottan támogatja a P4-et és a hálózatok számára nyújtott előnyöket. A P4 segítségével a vállalat a kategóriájában legjobb megoldásokat hozhatja létre és szállíthatja az ügyfelek széles körének.

4) Távközlési szolgáltatók;

Az AT&T a P4 korai alkalmazója volt, az elsők között, amely a P4-et használta a hálózataiban tapasztalható viselkedés meghatározására, és P4 programozható továbbítási eszközöket használt hálózatán.

A Deutsche Telekomnál a nyelvet az Access 4.0 program részeként a kulcsfontosságú hálózati funkciók prototípusára használják.

5) Félvezetőipar;

A nyelv lehetővé tette a Barefoot számára, hogy egy új paradigmát valósítson meg a szoftver képességeinek a hálózati útválasztási síkra való eljuttatására.

A Xilinx a P4.org egyik alapítója volt, és aktívan részt vett a P4 nyelv fejlesztésében, és implementálta azt FPGA alapú programozható platformokba SmartNIC és NFV hardverekhez, így az SDNet tervezés részeként kiadta az egyik első P416 fordítót.

6) Szoftver.

A VMware úgy véli, hogy a P4 óriási energiát, innovációt és közösséget teremt, ami értelmes és szükséges átalakulást eredményez a hálózatban. A VMware a kezdetek óta része ennek az iparági mozgalomnak, mivel az innováció új hullámát az infrastruktúra képességeit kiterjesztő és a legújabb termékekben megvalósító szoftveralapú megközelítések hajtják.

Így a P4 egy cél- és protokollfüggetlen programozási nyelv, amelyet az ipar és a tudományos körök használnak a csomagok útválasztási viselkedésének egyedi meghatározására programként, amely viszont több célhoz is lefordítható. Manapság a célpontok között szerepelnek hardver- és szoftverkapcsolók, hipervizor-kapcsolók, NPU-k, GPU-k, FPGA-k, SmartNIC-ek és ASIC-k.

A nyelv főbb jellemzői jelentősen kiterjesztik alkalmazási körét, és biztosítják a gyors megvalósítást a hálózati architektúrákban.

Az első lépések

A P4 egy nyitott projekt, minden lényeges információ megtalálható a weboldalon P4.org

Repository link https://github.com/p4lang, ahol példaforráskódot és oktatóanyagokat kaphat.

Csatlakoztat Eclipse számára P4 támogatással, de ajánlani tudjuk P4 Stúdió a Barefoottól.

P4 programozási nyelv

Nézzük a kernel fő absztrakcióit:

Fejlécek meghatározása — segítségükkel meghatározzák a protokoll fejléceket.

A fejléc definíciója meghatározza:

  • a csomagformátumok és a fejlécmezők neveinek leírása
  • rögzített és változó engedélyezett mezők

Például

header Ethernet_h{
    bit<48>  dstAddr;
    bit<48>  srcAddr;
    bit<16>  etherType;
}

header IPv4_h{
    bit<4>  version;
    bit<4>  ihl;
    bit<8>  diffserv;
    bit<16>  totalLen;
    bit<16>  identification;
    bit<3>  flags;
    bit<13>  fragOffset;
    bit<8>  ttl;
    bit<8>  protocol;
    bit<16>  hdrChecksum;
    bit<32>  srcAddr;
    bit<32>  dstAddr;
    varbit<320>  options;
}

Elemzők — feladatuk a főcímek elemzése.

A következő elemző példa meghatározza a gép végső állapotának átmenetét egy kezdeti állapotból a két végső állapot egyikébe:

P4 programozási nyelv

parser MyParser(){
 state  start{transition parse_ethernet;}
 state  parse_ethernet{
    packet.extract(hdr.ethernet);
    transition select(hdr.ethernet.etherType){
        TYPE_IPV4: parse_ipv4;
        default: accept;
        }
    }…
}

asztalok — tartalmazza a felhasználói kulcsokat műveletekkel összekapcsoló gépállapotokat. Tevékenység — annak leírása, hogyan kell a csomagot manipulálni.

A táblázatok (menedzsment szinten meghatározott) állapotokat tartalmaznak a csomagtovábbításhoz, leírják a Match-Action egységet

A csomagokat a következő illeszti:

  • Pontos egyezés
  • Leghosszabb előtagegyezés (LPM)
  • Háromszoros egyezés (maszkolás)

table ipv4_lpm{
    reads{
        ipv4.dstAddr: lpm;
    } actions {
        forward();
    }
}

Minden lehetséges műveletet előre táblázatokban kell meghatározni.

A műveletek kódból és adatokból állnak. Az adatok a felügyeleti szintről származnak (pl. IP címek/portszámok). Bizonyos, hurok nélküli primitívek közvetlenül megadhatók a műveletben, de az utasítások számának előre láthatónak kell lennie. Ezért a műveletek nem tartalmazhatnak ciklusokat vagy feltételes utasításokat.

action ipv4_forward(macAddr_t dstAddr, egressSpec_t port){
    standard_metadata.egress_spec = port;
    hdr.ethernet.srcAddr = hdr.ethernet.dstAddr;
    hdr.ethernet.dstAddr = dstAddr;
    hdr.ipv4.ttl = hdr.ipv4.ttl - 1;
}

Match-Action modulok — műveletek keresési kulcs létrehozásához, keresés egy táblázatban, műveletek végrehajtása.

Egy tipikus példa egy modulra az ábrán látható:

P4 programozási nyelv

Az áramlás szabályozása — jelzi a Match-Action modulok használatának sorrendjét. Ez egy elengedhetetlen program, amely meghatározza a magas szintű logikát és a Match-Action sorrendet. A vezérlési folyamat minden objektumot összekapcsol a vezérlés szintjének meghatározásával.

Külső tárgyak konkrét objektumok világosan meghatározott architektúrával és API interfészekkel. Például ellenőrző összeg számítás, regiszterek, számlálók, számlálók stb.

extern register{
    register(bit<32> size);
    void read(out T result, in bit<32> index);
    void write(in bit<32> index, in T value);
}

extern Checksum16{
  Checksum16();    //constructor
  void clear();    //prepare unit for computation
  void update(in T data);    //add data to checksum
  void remove(in T data);  /remove data from existing checksum
  bit<16> get(); //get the checksum for the data added since last clear
}

Metaadatok — az egyes csomagokhoz tartozó adatstruktúrák.

2 típusú metaadat létezik:

  Egyéni metaadatok (üres szerkezet minden csomaghoz)
    Ide rakhatsz, amit akarsz
    Az egész csővezetéken elérhető
    kényelmesen használható saját céljaira, például csomagkivonat tárolására

  Belső metaadatok – az architektúra által biztosított
    Itt van megadva a bemeneti és a kimeneti port
    Időbélyeg, amikor a csomag sorba állt, a sor mélysége
    multicast hash / multicast sor
    Csomag prioritás, csomag fontossága
    Kimeneti port specifikáció (pl. kimeneti sor)

P4 fordító

A P4 fordító (P4C) a következőket állítja elő:

  1. Adatsík futási ideje
  2. API a gép állapotának kezeléséhez az adatsíkon

P4 programozási nyelv

P4 szoftveres kapcsoló példa PXNUMX nyelven

A forráskódok letölthetők a tárolóból.

p4lang/p4c-bm: JSON-konfigurációt hoz létre a bmv2 számára
p4lang/bmv2: szoftverkapcsoló, amely megérti a bmv2 verziójú JSON-konfigurációkat

Az ábra a projekt összeállítási diagramját mutatja:

P4 programozási nyelv

Manipulációk táblázatokkal, leolvasási regiszterekkel, számlálókkal:

  • table_set_default <table name> <action name> <action parameters>
  • table_add <table name> <action name> <match fields> => <action
    parameters> [priority]
  • table_delete <table name> <entry handle>


A forráskód tartalmazza a simple_switch_CLI programot a szoftverkapcsoló API kényelmes használatához.

Ezt és más példákat letöltheti a tárolóból.

P4 programozási nyelv

PS Nyár elején az Intel megállapodást írt alá a Barefoot Networks felvásárlásáról, hogy gyorsan megfeleljen a Hyperscale Cloud-felhasználók igényeinek. Ahogy Navin Shenoy (az Intel Corporation adatközponti csoportjának ügyvezető alelnöke és vezérigazgatója) mondta, ez lehetővé teszi az Intel számára, hogy nagyobb munkaterhelést és több lehetőséget biztosítson az adatközpontok ügyfelei számára.

Személyes véleményem szerint nem szabad elfelejtenünk, hogy az Intel vezető szerepet tölt be az FPGA chipek gyártásában, és kiváló Quartus környezettel rendelkezik. Ez azt jelenti, hogy számíthatunk arra, hogy az Intel érkezésével a Barefoot nem csak a termékpalettáját bővíti, hanem a Quartus és a P4 Studio is komoly frissítéseket, kiegészítéseket kap a Toffino és Toffino 2 vonalon.

A P4 közösség hivatalos tagja - cég Tényezőcsoport.

Forrás: will.com

Hozzászólás