programovací jazyk P4

programovací jazyk P4
P4 je programovací jazyk určený na programovanie pravidiel smerovania paketov. Na rozdiel od univerzálneho jazyka, ako je C alebo Python, P4 je doménovo špecifický jazyk s množstvom návrhov optimalizovaných pre sieťové smerovanie.

P4 je open source jazyk licencovaný a udržiavaný neziskovou organizáciou s názvom P4 Language Consortium. Podporujú ho aj Open Networking Foundation (ONF) a Linux Foundation (LF), dve najväčšie zastrešujúce organizácie pre open source sieťové projekty.
Jazyk bol pôvodne vytvorený v roku 2013 a opísaný v dokumente SIGCOMM CCR z roku 2014 s názvom „Protocol Independent, Packet Routing Processor Programming“.

Od svojho vzniku P4 exponenciálne rástol a vyvíjal sa a rýchlo sa stal štandardom pre popis prenosu paketov sieťovými zariadeniami vrátane sieťových adaptérov, prepínačov a smerovačov.

„SDN transformovalo sieťové odvetvie a P4 posúva SDN na ďalšiu úroveň tým, že prináša programovateľnosť do smerovania,“ povedal Guru Parulkar, výkonný riaditeľ Open Networking Foundation.

Jazyk P4 pôvodne vytvorila skupina inžinierov a výskumníkov zo spoločností Google, Intel, Microsoft Research, Barefoot, Princeton a Stanford. Cieľ bol jednoduchý: vytvoriť ľahko použiteľný jazyk, ktorý by sa vývojár softvéru mohol naučiť za deň a použiť ho na presný opis toho, ako sa pakety posielajú cez siete.

Od samého začiatku bol P4 navrhnutý tak, aby bol nezávislý od cieľa (t. j. program napísaný v P4 mohol byť skompilovaný bez zmeny, aby bežal na rôznych cieľoch, ako sú ASIC, FPGA, CPU, NPU a GPU).

Jazyk je tiež nezávislý od protokolu (t. j. program P4 môže opísať existujúce štandardné protokoly alebo ho použiť na špecifikáciu nových vlastných režimov adresovania).

V priemysle sa P4 používa na programovanie zariadení. Možno v budúcnosti budú štandardy Internet-RFC a IEEE obsahovať aj špecifikáciu P4.

P4 je možné použiť pre programovateľné aj pevné funkčné zariadenia. Používa sa napríklad na presné zaznamenávanie správania prepínača v rozhraní API pre abstraktné prepínače (SAI), ktoré používa operačný systém prepínačov SONiC s otvoreným zdrojom. P4 sa používa aj v projekte ONF Stratum na opis správania pri prepínaní medzi rôznymi pevnými a programovateľnými zariadeniami.

Po prvýkrát vám popis správania prepínača a sieťových adaptérov umožňuje vytvoriť presný spustiteľný model celej siete pred nasadením. Veľkí poskytovatelia cloudu môžu testovať a ladiť sieť výlučne pomocou softvéru, čo výrazne znižuje čas a náklady na testovanie interoperability v laboratóriu bez potreby drahého hardvéru.

Pri používaní P4 môžu predajcovia sieťových zariadení očakávať spoločné smerovanie vo všetkých produktoch, čo umožňuje opätovné použitie testovacej infraštruktúry, zjednodušuje vývoj softvéru na správu a v konečnom dôsledku zabezpečuje interoperabilitu.

Samozrejme, P4 je možné použiť na písanie programov, ktoré popisujú úplne nové spôsoby smerovania. Napríklad P4 sa široko používa na telemetriu a merania v dátových centrách, podnikoch a sieťach poskytovateľov služieb.

Zintenzívnila sa aj výskumná komunita. Niekoľko popredných akademických sieťových výskumných skupín zverejnilo vzrušujúce nové aplikácie založené na programoch P4, vrátane vyrovnávania záťaže, konsenzuálnych protokolov a ukladania kľúčových hodnôt do vyrovnávacej pamäte. Vytvára sa nová programovacia paradigma, inovácie sa presúvajú od hardvéru k softvéru, čo umožňuje vznik mnohých neočakávaných, nových a dômyselných nápadov.

Vývojárska komunita významne prispela k vývoju kódu vrátane kompilátorov, kanálov, modelov správania, rozhraní API, testovacích rámcov, aplikácií a ďalších. Spoločnosti ako Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx a ZTE majú špecializovaných vývojárov; z univerzít vrátane BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass a USI; a open source projekty vrátane CORD, FD.io, OpenDaylight, ONOS, OvS, SAI a Stratum zdôrazňujú skutočnosť, že P4 je nezávislý komunitný projekt.

Typická generácia ovládačov pre jazyk P4:

programovací jazyk P4

Vyhliadky na uplatnenie

programovací jazyk P4
Keďže jazyk je určený pre aplikácie smerovania, zoznam požiadaviek a možností návrhu je odlišný v porovnaní so všeobecnými programovacími jazykmi. Hlavné rysy jazyka sú:

  1. Nezávislosť od implementácie cieľa;
  2. Nezávislosť použitého protokolu (protokolov);
  3. Rekonfigurovateľnosť poľa.

Nezávislosť od cieľovej implementácie

Programy P4 sú navrhnuté tak, aby boli nezávislé od implementácie, čo znamená, že môžu byť zostavené pre mnoho rôznych typov vykonávacích motorov, ako sú univerzálne procesory, FPGA, systém na čipoch, sieťové procesory a ASIC. Tieto rôzne typy strojov sú známe ako ciele P4 a každý cieľ vyžaduje kompilátor na konverziu zdrojového kódu P4 na model cieľového prepínača. Kompilátor môže byť zabudovaný do cieľového zariadenia, externého softvéru alebo dokonca cloudovej služby. Pretože mnohé z pôvodných cieľov pre programy P4 boli pre jednoduché prepínanie paketov, je veľmi bežné počuť výraz „prepínač P4“, aj keď „cieľ P4“ je presnejší.

Nezávislosť použitého protokolu (protokolov).

P4 je nezávislý od protokolu. To znamená, že jazyk nemá natívnu podporu pre bežné protokoly ako IP, Ethernet, TCP, VxLAN alebo MPLS. Namiesto toho programátor P4 popisuje formáty hlavičiek a názvy polí požadovaných protokolov v programe, ktoré sú následne interpretované a spracované kompilovaným programom a cieľovým zariadením.

Rekonfigurovateľnosť poľa

Nezávislosť od protokolu a abstraktný jazykový model umožňuje rekonfigurovateľnosť – ciele P4 by mali byť schopné zmeniť spracovanie paketov po nasadení systému. Táto schopnosť sa tradične spájala so smerovaním cez univerzálne procesory alebo sieťové procesory a nie integrované obvody s pevnou funkciou.

Hoci v jazyku nie je nič, čo by bránilo optimalizácii výkonu konkrétnej sady protokolov, tieto optimalizácie sú pre autora jazyka neviditeľné a v konečnom dôsledku môžu znížiť flexibilitu systému a cieľov a ich rekonfigurovateľnosť.

Tieto vlastnosti jazyka pôvodne stanovili jeho tvorcovia so zameraním na jeho široké využitie v sieťovej infraštruktúre.

Tento jazyk sa už používa v mnohých spoločnostiach:

1) dátové centrá hyperscale;

Čínska spoločnosť Tencent je najväčšou investičnou spoločnosťou na svete a jednou z najväčších spoločností rizikového kapitálu. Dcérske spoločnosti Tencent v Číne aj v iných krajinách sveta sa špecializujú na rôzne oblasti high-tech biznisu, vrátane rôznych internetových služieb, vývoja v oblasti umelej inteligencie a elektronickej zábavy.

P4 a programovateľné smerovanie sú pokročilé technológie, ktoré sa využívajú v sieťovej architektúre spoločnosti.

Ako jeden z pôvodcov je Google hrdý na rýchle prijatie P4 v sieťovom priemysle a najmä v architektonickom dizajne dátových centier.

2) obchodné spoločnosti;

Goldman Sachs využíva výhody spolupráce s open source komunitou a vývoj spoločných štandardov a riešení na inováciu sieťovej infraštruktúry a poskytovanie lepších riešení pre klientov.

3) Výroba;

Celému sieťovému priemyslu by prospel jazyk ako P4, ktorý jedinečne definuje správanie pri preposielaní. Cisco tiež verí v prevod svojich produktových radov na používanie tohto jazyka.

Juniper Networks zahrnul P4 a P4 Runtime do množstva produktov a poskytuje programový prístup k vstavanému procesoru Juniper a jeho softvérovému kódu.

Ruijie Networks je silným zástancom P4 a výhod, ktoré do sietí prináša. S P4 môže spoločnosť vytvárať a dodávať najlepšie riešenia vo svojej triede širokému spektru zákazníkov.

4) telekomunikační poskytovatelia;

Spoločnosť AT&T bola prvým používateľom P4, jedným z prvých, ktorí použili P4 na definovanie správania, ktoré chcel vidieť vo svojich sieťach, a na používanie P4 programovateľných preposielacích zariadení vo svojej sieti.

V Deutsche Telekom sa tento jazyk používa na prototypovanie kľúčových sieťových funkcií v rámci programu Access 4.0.

5) polovodičový priemysel;

Tento jazyk umožnil spoločnosti Barefoot implementovať novú paradigmu na poskytovanie softvérových funkcií do roviny smerovania siete.

Xilinx bol jedným zo zakladateľov P4.org a aktívne sa podieľal na vývoji jazyka P4 a implementoval ho do programovateľných platforiem založených na FPGA pre hardvér SmartNIC a NFV, čím uvoľnil jeden z prvých kompilátorov P416 ako súčasť dizajnu SDNet.

6) Softvér.

VMware je presvedčený, že P4 vytvára obrovskú energiu, inovácie a komunitu, ktorá poháňa zmysluplnú a potrebnú transformáciu v sieti. VMware je súčasťou tohto priemyselného hnutia od začiatku, pretože nová vlna inovácií je poháňaná softvérovými prístupmi, ktoré rozširujú možnosti infraštruktúry a implementujú ich do najnovších produktov.

P4 je teda programovací jazyk nezávislý na cieli a protokole, ktorý používa priemysel a akademická obec na jedinečnú definíciu správania pri smerovaní paketov ako programu, ktorý je možné zostaviť pre viacero cieľov. Dnes medzi ciele patria hardvérové ​​a softvérové ​​prepínače, prepínače hypervízora, NPU, GPU, FPGA, SmartNIC a ASIC.

Hlavné vlastnosti jazyka výrazne rozširujú rozsah jeho použitia a zabezpečujú jeho rýchlu implementáciu v sieťových architektúrach.

začíname

P4 je otvorený projekt, všetky relevantné informácie sú na webovej stránke P4.org

Odkaz na úložisko https://github.com/p4lang, kde môžete získať vzorový zdrojový kód a návody.

Плагин pre Eclipse s podporou P4, ale môžeme odporučiť Štúdio P4 z Bosej nohy.

programovací jazyk P4

Pozrime sa na hlavné abstrakcie jadra:

Definovanie hlavičiek — s ich pomocou sa určujú hlavičky protokolov.

Definícia hlavičky špecifikuje:

  • popis formátov paketov a názvov polí hlavičky
  • pevné a variabilné povolené polia

Napríklad

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

Analyzátory — ich úlohou je analyzovať titulky.

Nasledujúci príklad syntaktického analyzátora určí prechod konečného stavu stroja z jedného počiatočného stavu do jedného z dvoch konečných stavov:

programovací jazyk P4

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

stoly — obsahuje stavy stroja spájajúce užívateľské kľúče s akciami. Činnosť — popis, ako sa má s balíkom manipulovať.

Tabuľky obsahujú stavy (definované na úrovni riadenia) pre preposielanie paketov, popisujú jednotku Match-Action

Pakety sa zhodujú podľa:

  • Presná zhoda
  • Najdlhšia zhoda prefixu (LPM)
  • Trojitá zhoda (maskovanie)

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

Všetky možné akcie musia byť vopred definované v tabuľkách.

Akcie pozostávajú z kódu a údajov. Údaje pochádzajú z úrovne riadenia (napr. IP adresy/čísla portov). Niektoré primitívy bez slučiek môžu byť špecifikované priamo v akcii, ale počet inštrukcií musí byť predvídateľný. Preto akcie nemôžu obsahovať žiadne slučky ani podmienené príkazy.

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 moduly — akcie na vytvorenie kľúča vyhľadávania, vyhľadávanie v tabuľke, vykonávanie akcií.

Typický príklad modulu je znázornený na obrázku:

programovací jazyk P4

Kontrolný tok — označuje poradie, v ktorom sa používajú moduly Match-Action. Toto je nevyhnutný program, ktorý definuje logiku vysokej úrovne a postupnosť Match-Action. Riadiaci tok spája všetky objekty definovaním úrovne riadenia.

Vonkajšie predmety sú špecifické objekty s jasne definovanou architektúrou a API rozhraniami. Napríklad výpočet kontrolného súčtu, registre, počítadlá, počítadlá atď.

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
}

Metadáta — dátové štruktúry spojené s každým balíkom.

Existujú 2 typy metadát:

  Vlastné metadáta (prázdna štruktúra pre všetky balíčky)
    Môžete si sem dať, čo chcete
    Dostupné v celom potrubí
    vhodné na použitie na vlastné účely, napríklad na ukladanie hash balíka

  Interné metadáta – poskytuje architektúra
    Tu sú definované vstupné a výstupné porty
    Časová pečiatka, kedy bol paket zaradený do frontu, hĺbka frontu
    multicast hash / multicast fronta
    Priorita balíka, dôležitosť balíka
    Špecifikácia výstupného portu (napr. výstupný front)

Kompilátor P4

Kompilátor P4 (P4C) generuje:

  1. Spustenie dátovej roviny
  2. API pre správu stavu stroja v dátovej rovine

programovací jazyk P4

Príklad softvérového prepínača v jazyku P4

Zdrojové kódy je možné stiahnuť z úložiska.

p4lang/p4c-bm: vytvorí konfiguráciu JSON pre bmv2
p4lang/bmv2: softvérový prepínač, ktorý rozumie konfiguráciám JSON verzie bmv2

Obrázok ukazuje schému zostavenia projektu:

programovací jazyk P4

Manipulácia s tabuľkami, čítacími registrami, počítadlami:

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


Zdrojový kód obsahuje program simple_switch_CLI na pohodlné používanie rozhrania API softvérového prepínača.

Tento a ďalšie príklady si môžete stiahnuť z úložiska.

programovací jazyk P4

PS Začiatkom leta Intel podpísal dohodu o akvizícii Barefoot Networks v snahe rýchlo uspokojiť potreby používateľov Hyperscale Cloud. Ako povedal Navin Shenoy (výkonný viceprezident a generálny manažér Data Center Group v Intel Corporation), Intelu to umožní poskytovať väčšie pracovné zaťaženie a viac príležitostí pre zákazníkov dátových centier.

Podľa môjho osobného názoru netreba zabúdať, že Intel je lídrom vo výrobe FPGA čipov a disponuje výborným prostredím Quartus. To znamená, že môžeme očakávať, že s príchodom Intelu Barefoot nielen rozšíri svoj produktový rad, ale aj Quartus a P4 Studio dostanú vážne aktualizácie a doplnky do radu Toffino a Toffino 2.

Oficiálny člen komunity P4 – spoločnosť faktorová skupina.

Zdroj: hab.com

Pridať komentár