A P4 programozási nyelv

A P4 programozási nyelv
A P4 egy programozási nyelv, amelyet a csomagok irányítási szabályainak megírására terveztek. Ellentétben a C-hez vagy a Pythonhoz hasonló általános célú nyelvekkel, a P4 egy domain-orientált nyelv, amely számos, a hálózati irányításhoz optimalizált konstrukcióval rendelkezik.

A P4 egy nyílt forráskódú nyelv, amelyet egy nonprofit szervezet, a P4 Language Consortium támogat és engedélyez. Támogatja továbbá az Open Networking Foundation (ONF) és a Linux Foundation (LF) – a hálózati technológiák területén két legnagyobb nyílt forráskódú projektet támogató szervezet is.
A nyelvet eredetileg 2013-ban találták ki, és 2014-ben írták le a SIGCOMM CCR folyóiratban a 'Protokollfüggetlen csomagirányító processzor programozásának' című dokumentumban.

A létrehozása óta a P4 exponenciálisan növekszik és fejlődik, gyorsan válva a hálózati eszközök számára a csomagátviteli szabvány leírásának, beleértve a hálózati adaptereket, switcheket és routereket.

"Az SDN átalakította a hálózati ipart, és a P4 egy új szintre emeli az SDN-t, biztosítva a programozhatóságot az irányítás terén" - 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ökeiből és kutatóiból álló csoport hozta létre. A cél egyszerű volt: egy könnyen használható nyelv létrehozása, amelyet a szoftverfejlesztők nap alatt megtanulhatnak, és amely pontosan leírja, hogy a csomagok hogyan haladnak a hálózaton.

A P4-től kezdve a céltól függetlenként fejlesztették (azaz egy P4-en írt program változtatás nélkül fordítható különböző célokra, mint például ASIC, FPGA, CPU, NPU és GPU).

A nyelv protokollfüggetlen is (azaz a P4 programok meglévő szabványos protokollokat írhatnak le, vagy új testre szabott címzési módokat definiálhatnak).

Az iparban a P4-et eszközök programozására használják. Lehetséges, hogy a jövőben az Internet-RFC és az IEEE szabványok is tartalmazni fogják a P4 specifikációját.

A P4 használható programozható és fix funkciójú eszközök számára is. Például pontosan rögzíti a kapcsoló cső viselkedését a kapcsoló absztrakciós interfészek (SAI) API-jában, amelyet az SONiC nyílt forráskódú operációs rendszerek használnak. A P4 szerepet játszik az ONF Stratum projektben is, amely a kapcsolás viselkedésének leírására szolgál különböző fix és programozható eszközökön keresztül.

A kapcsolók és hálózati adapterek viselkedésének leírása először lehetővé teszi a teljes hálózat pontos végrehajtható modelljének elkészítését a telepítés előtt. A nagy felhőszolgáltatók teljes mértékben tesztelhetik és hibakereshetik a hálózatot szoftver segítségével, ami jelentősen csökkenti a laboratóriumi kölcsönhatás tesztelésének idejét és költségeit, anélkül hogy drága berendezésekre lenne szükség.

A P4 használatával a hálózati eszközök gyártói számíthatnak a routing általános alap viselkedésére az összes termékben, ami lehetővé teszi a tesztelési infrastruktúra újrahasznosítását, leegyszerűsíti a kezelőszoftver fejlesztését, és végső soron garantálja a kompatibilitást.

Természetesen a P4 használható olyan programok írására, amelyek teljesen új routing módszereket írnak le. Például a P4 széleskörűen alkalmazzák telemetria és mérések terén adatközpontokban, vállalati hálózatokban és szolgáltatóknál.

A kutatói közösség is fellendült. Számos vezető akadémiai kutatócsoport a hálózati technológiák területén érdekes új alkalmazásokat publikált a P4 programok alapján, beleértve a terheléselosztást, az összehangolt protokollokat és a kulcskereső gyorsítótárazást. Egy új programozási paradigma jön létre, az innovációk átkerülnek a hardverből a szoftverbe, lehetővé téve sok váratlan, új és zseniális ötlet megjelenését.

A fejlesztői közösség jelentős hozzájárulást nyújtott a kód fejlesztéséhez, beleértve a fordítókat, csőprogramokat, viselkedési modelleket, API-interfészeket, tesztelési környezeteket, alkalmazásokat és még sok mást. Elkötelezett fejlesztők találhatók olyan vállalatoknál, mint az Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx és ZTE; egyetemek, beleértve a BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass és USI; valamint nyílt forráskódú projektek, például a CORD, FD.io, OpenDaylight, ONOS, OvS, SAI és Stratum, hangsúlyozzák, hogy a P4 egy független közszolgáltatás.

A P4 nyelvhez tartozó tipikus vezérlőgenerálás:

A P4 programozási nyelv

Alkalmazási perspektívák

A P4 programozási nyelv
Mivel a nyelvet irányítási alkalmazásokra szánták, a követelmények és a tervezési lehetőségek listája eltér a hagyományos programozási nyelvekétől. A nyelv főbb jellemzői a következők:

  1. A célmegvalósítástól való függetlenség;
  2. A használt protokoll(ok)tól való függetlenség;
  3. Mezők újrakonfigurálhatósága.

A célmegvalósítástól való függetlenség

A P4 programokat úgy alakítják, hogy ne függjenek a megvalósítástól, vagyis átkonvertálhatók különböző tipusú végrehajtó gépekre, mint például általános processzorok, FPGA-k, rendszerchippek, hálózati processzorok és ASIC-k. Ezeket a különböző típusú gépeket P4 céloknak nevezik, és minden célhoz szükséges egy fordító, amely a P4 forrást a célswitch modelljévé alakítja. A fordító beépíthető a céleszközbe, külső szoftverbe vagy akár felhőszolgáltatásba is. Mivel sok kezdeti cél a P4 programokhoz egyszerű csomagkapcsolásra szolgált, gyakran hallható a "P4 switch" kifejezés, még akkor is, ha a „P4 cél” használata pontosabb.

A használt protokoll(ok)tól való függetlenség

A P4 protokollfüggetlen. Ez azt jelenti, hogy a nyelv nem tartalmaz beépített támogatást a közismert protokollok, mint például az IP, Ethernet, TCP, VxLAN vagy MPLS számára. Ehelyett a P4 programozó a szükséges protokollok fejlécformátumait és mezőneveit írja le a programban, amelyeket a lefordított program és a céleszköz értelmez és feldolgoz.

Mezők újrakonfigurálhatósága

A protokolloktól és az absztrakt nyelvtől való függetlenség lehetővé teszi az újrakonfigurálhatóságot – a P4 céljainak lehetőséget kell biztosítaniuk a csomagok feldolgozásának módosítására a rendszer telepítése után. Ezt a lehetőséget hagyományosan a rendszerprocesszorok vagy a hálózati processzorok általi routolás, nem pedig a fix funkciókkal rendelkező integrált áramkörök biztosítják.

Bár a nyelv nem tartalmaz olyan elemeket, amelyek hátráltatnák egy adott protokollkészlet 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 céljainak rugalmasságát és újrakonfigurálhatóságát.

A nyelv ezen jellemzőit eredetileg a létrehozói a hálózati infrastruktúrában való széleskörű használatra orientálták.

A nyelvet már most is sok vállalat használja:

1) Hiperméretes adatközpontok;

A Tencent kínai vállalat a világ legnagyobb befektetési cége és az egyik legnagyobb kockázati tőkevállalat. A Tencent leányvállalatai, akár Kínában, akár más országokban, a magasan technológiájú üzletágak különböző területeire specializálódtak, beleértve az internetes szolgáltatásokat, a mesterséges intelligenciával kapcsolatos fejlesztéseket és az elektronikus szórakoztatást.

A P4 és a programozható routolás élvonalbeli technológiák, amelyeket a vállalat hálózati architektúrájában alkalmaznak.

Mint az egyik alkotó, a Google büszkén jegyzi meg a P4 gyors elterjedését a hálózati iparban, különösen a DC architektúrák tervezésében.

2) Kereskedelmi vállalatok;

A Goldman Sachs, kihasználva az open source közösséggel való együttműködést és a közös szabványok és megoldások fejlesztését, már most is innovációkat hoz a hálózati infrastruktúrába, és a legjobb megoldásokat kínálja az ügyfeleknek.

3) Gyártás;

Az egész hálózati ipar profitálni fog egy olyan nyelvből, mint a P4, amely egyértelműen meghatározza az irányítás viselkedését. Ezt a Cisco is osztja, amely a termékpalettáját erre a nyelvre való áttérésre törekszik.

A Juniper Networks beépítette a P4-et és a P4 Runtime-ot számos termékébe, és szoftveres hozzáférést biztosít a Juniper beépített processzorához és programkódjához.

A Ruijie Networks aktívan támogatja a P4-et és az általa a hálózatok számára nyújtott előnyöket. A P4 segítségével a vállalat legjobb minőségű megoldásokat tud létrehozni és szállítani széles ügyfélkör számára.

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

Az AT&T az egyik első támogatója volt a P4-nek, és az egyik első, aki a P4-et használta a hálózati viselkedés meghatározására, és P4 programozható átirányító eszközöket alkalmazott a hálózatában.

A Deutsche Telekomnál a nyelvet kulcsfontosságú hálózati funkciók prototípusának létrehozására használják az Access 4.0 program keretében.

5) Félvezetőipar;

A nyelv lehetővé tette egy új szoftvermegbízási paradigma megvalósítását a Barefoot által a hálózati irányítás síkjában.

A Xilinx az egyik alapítója volt a P4.org-nak, és aktívan részt vett a P4 nyelv fejlesztésében, valamint megvalósította azt FPGA-alapú programozható platformokon a SmartNIC és NFV berendezésekhez, és kiadta az egyik első P416 fordítót az SDNet dizájn részeként.

6) Szoftver.

A VMware-nél úgy vélik, hogy a P4 óriási energiát, innovációt és közösséget teremt, amely jelentős és szükséges átalakulásokhoz vezet a hálózatokban. A VMware kezdetben része volt ennek az iparági mozgalomnak, mivel az új innovációs hullámot programozási megközelítések okozzák, amelyek bővítik az infrastruktúra lehetőségeit és megvalósítják azt a legújabb termékekben.

Így a P4 egy célfüggetlen és protokollfüggetlen programozási nyelv, amelyet az ipar és a tudományos közösség használ a csomagirányítás viselkedésének egyértelmű meghatározására, mint egy program, amely viszont több célra is lefordítható. Ma a célok között szerepelnek a hardveres és szoftveres kapcsolók, a hipervizor kapcsolók, az NPU-k, a grafikus processzorok, az FPGA-k, a SmartNIC-ek és az ASIC-ek.

A nyelv főbb jellemzői jelentősen kibővítik alkalmazási területeit, és gyorsan implementálhatóvá teszik azt a hálózati architektúrákba.

Hogyan kezdjük?

A P4 egy nyílt projekt, minden aktuális információ a P4.org

link a tárolóra https://github.com/p4lang, ahol megkaphatja a példák forráskódját és oktatási anyagokat.

Plugin az Eclipse-hez P4 támogatással, de tudunk ajánlani P4 Studio a Barefoot-tól.

A P4 programozási nyelv

Nézzük meg a mag főbb absztrakcióit:

Címek meghatározása — ezek segítségével határozzák meg a protokoll címeket.

A címek meghatározásában van:

  • csomagformátumok leírása és a címek mezőinek nevei
  • rögzített és változó engedélyezett mezők

Például

fejléc Ethernet_h{
    bitdstAddr;
    bitsrcAddr;
    bitetherType;
}

fejléc IPv4_h{
    bitverzió;
    bitihl;
    bitdiffserv;
    bittotalLen;
    bitazonosító;
    bitzászlók;
    bitfragOffset;
    bitttl;
    bitprotokoll;
    bithdrChecksum;
    bitsrcAddr;
    bitdstAddr;
    varbitopciók;
}

Parser-ek — feladatuk a címek elemzése.

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

A 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;
        }
    }…
}

Táblázatok — tartalmazzák a gép állapotait, amelyek összekapcsolják a felhasználói kulcsokat a műveletekkel. Műveletek — leírja, hogyan kell manipulálni a csomagot.

A táblázatok állapotokat tartalmaznak (amelyeket vezérlési szinten határoznak meg) a csomagok átküldésére, leírják a Match-Action művelet egységét.

A csomagok összevetése ezen alapul:

  • Pontossági megfelelés
  • Leghosszabb prefixmatch (LPM)
  • Háromszoros megfelelés (maszk)

table ipv4_lpm{
    olvasta{
        ipv4.dstAddr: lpm;
    } actions {
        tovább();
    }
}

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

A műveletek kódot és adatokat tartalmaznak. Az adatok a vezérlési szintről érkeznek (például IP-címek / port számok). A meghatározott, ciklusmentes primitívek közvetlenül megadhatók a műveletben, de a parancsok számának előre kiszámí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 — a keresési kulcs létrehozására, a táblázatban való keresésre, műveletek végrehajtására vonatkozó tevékenységek.

A modul tipikus példája az alábbi ábrán látható:

A P4 programozási nyelv

Vezérlési áramlás — meghatározza a Match-Action modulok alkalmazásának sorrendjét. Ez egy imperatív program, amely megadja a magas szintű logikát és a Match-Action sorrendjét. A vezérlési áramlás összekapcsolja az összes objektumot, meghatározva a vezérlés szintjét.

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

extern regisztrálj{
    regisztrálj(bit méret);
    void olvas(out T eredmény, in bit index);
    void ír(in bit index, in T érték);
}

extern Checksum16{
  Checksum16();    //konstruktor
  void clear();    //elő készítése a számításra
  void update(in T data);    //adat hozzáadása a checksumhoz
  void remove(in T data);  //adat eltávolítása a meglévő checksumról
  bitget(); //a checksum lekérése az utolsó clear óta hozzáadott adatokhoz
}

Metainformációk — adatszerkezetek, amelyek minden egyes csomaghoz kapcsolódnak.

Kétféle metainformáció létezik:

  Felhasználói metainformáció (üres struktúra minden csomaghoz)
    Itt bármit elhelyezhet, amit szeretne
    elérhető a pipeline minden szakaszában
    használható a saját céljaira, például a csomag hash-ának tárolására

  Belső metainformáció — az architektúra biztosítja
    A bemeneti és kimeneti port itt kerülnek meghatározásra
    Időbélyeg, amikor a csomag sorba került, a sor mélysége
    multicast hash / multicast queue
    A csomag prioritása, a csomag fontossága
    A kimeneti port specifikációja (például a kimeneti sor)

P4 fordító

A P4 fordító (P4C) létrehozza:

  1. Adatlane futási idő
  2. API az adatlane gép állapotának kezelésére

A P4 programozási nyelv

P4 nyelven írt példa programváltó

A forráskódokat letöltheti a tárolóból.

p4lang/p4c-bm: JSON konfigurációt készít a bmv2 számára
p4lang/bmv2: olyan programváltó, amely megérti a bmv2 JSON verziójának konfigurációit

A ábrán a projekt fordításának séma látható:

A P4 programozási nyelv

Műveletek táblákkal, olvasási regiszterekkel, számlálókkal:

  • alapértelmezett_táblázat <table name> <action name> <action parameters>
  • asztal_add <table name> <action name> <match fields> => &lt;action
    parameters> [priority]
  • táblázat_törlés <table name> <entry handle>


A forráskódok tartalmazzák a simple_switch_CLI programot, amely megkönnyíti az API használatát.

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

A P4 programozási nyelv

P.S. Nyár elején az Intel megállapodást írt alá a Barefoot Networks felvásárlásáról, hogy gyorsan kielégítse a Hyperscale Cloud felhasználók igényeit. Ahogy Navin Shenoy (az Intel Corporation Adatközponti Csoportjának ügyvezető alelnöke és igazgatója) kijelentette — ez lehetővé teszi az Intel számára, hogy nagyobb munkaterheléseket és több lehetőséget kínáljon az adatközpontok ügyfelei számára.

Személyes véleményem szerint nem szabad elfelejteni, hogy az Intel a FPGA chipek gyártásának vezetője, és kiváló Quartus környezete van. Ezért várható, hogy az Intel berkeibe kerülve a Barefoot nemcsak a termékpalettáját bővíti, hanem a Quartus és a P4 Studio is komoly frissítéseket és bővítéseket vár Toffino és Toffino 2 modellekkel.

A P4 közösség hivatalos tagja — a cég Faktor csoport.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster