P4 programmeerimiskeel

P4 programmeerimiskeel
P4 on programmeerimiskeel, mis on loodud pakettide marsruutimise reeglite programmeerimiseks. Erinevalt üldotstarbelistest keeltest, nagu C või Python, on P4 domeenispetsiifiline keel, millel on mitu võrgu marsruutimiseks optimeeritud kujundust.

P4 on avatud lähtekoodiga keel, mille litsentsi ja haldab mittetulundusorganisatsioon nimega P4 Language Consortium. Seda toetavad ka Open Networking Foundation (ONF) ja Linux Foundation (LF), kaks suurimat avatud lähtekoodiga võrguprojektide katusorganisatsiooni.
Keel loodi algselt 2013. aastal ja seda kirjeldati 2014. aasta SIGCOMM CCR-i dokumendis pealkirjaga "Protokollist sõltumatu, pakettmarsruutimise protsessori programmeerimine".

Alates selle loomisest on P4 plahvatuslikult kasvanud ja arenenud, muutudes kiiresti standardiks, mis kirjeldab pakettide edastamist võrguseadmete, sealhulgas võrguadapterite, kommutaatorite ja ruuterite kaudu.

"SDN on muutnud võrgutööstust ja P4 viib SDN-i järgmisele tasemele, tuues marsruutimisse programmeeritavuse," ütles Guru Parulkar, Open Networking Foundationi tegevdirektor.

P4 keele lõi algselt Google'i, Inteli, Microsoft Researchi, Barefooti, ​​Princetoni ja Stanfordi inseneride ja teadlaste rühm. Eesmärk oli lihtne: luua lihtsalt kasutatav keel, mida tarkvaraarendaja saaks ühe päevaga selgeks õppida ja mille abil täpselt kirjeldada, kuidas pakette võrkudes saadetakse.

Algusest peale oli P4 kavandatud olema sihtmärgist sõltumatu (st P4-s kirjutatud programmi sai muutmata kujul kompileerida, et see töötaks mitmesugustel sihtmärkidel, nagu ASIC-id, FPGA-d, CPU-d, NPU-d ja GPU-d).

Keel on ka protokollist sõltumatu (st P4 programm võib kirjeldada olemasolevaid standardprotokolle või seda saab kasutada uute kohandatud adresseerimisrežiimide määramiseks).

Tööstuses kasutatakse P4 seadmete programmeerimiseks. Võib-olla sisaldavad tulevikus Internet-RFC ja IEEE standardid ka P4 spetsifikatsiooni.

P4 saab kasutada nii programmeeritavate kui ka fikseeritud funktsioonidega seadmete jaoks. Näiteks kasutatakse seda lüliti konveieri käitumise täpseks salvestamiseks SAI (Switch Abstraction Interface) API-des, mida kasutab avatud lähtekoodiga SONiC switch OS. P4 kasutatakse ka ONF Stratum projektis, et kirjeldada lülituskäitumist mitmesugustes fikseeritud ja programmeeritavates seadmetes.

Esmakordselt võimaldab lüliti ja võrguadapterite käitumise kirjeldamine enne juurutamist luua kogu võrgu täpse käivitatava mudeli. Suured pilveteenuse pakkujad saavad võrku testida ja siluda täielikult tarkvara abil, vähendades märkimisväärselt laboris koostalitlusvõime testimise aega ja kulusid, ilma et oleks vaja kallist riistvara.

Kasutades P4, võivad võrguseadmete müüjad eeldada ühist marsruutimiskäitumist kõigis toodetes, võimaldades testimise infrastruktuuri taaskasutamist, lihtsustada haldustarkvara arendamist ja lõpuks tagada koostalitlusvõime.

Muidugi saab P4 abil kirjutada programme, mis kirjeldavad täiesti uusi marsruutimise viise. Näiteks kasutatakse P4 laialdaselt telemeetria ja mõõtmiste jaoks andmekeskustes, ettevõtete ja teenusepakkujate võrkudes.

Ka teadlaskond on hoogu võtnud. Mitmed juhtivad akadeemilised võrkude uurimisrühmad on avaldanud uusi põnevaid P4-programmidel põhinevaid rakendusi, sealhulgas koormuse tasakaalustamine, konsensusprotokollid ja võtmeväärtuste vahemälu. Loomisel on uus programmeerimisparadigma, innovatsioon liigub riistvaralt tarkvarale, võimaldades tekkida palju ootamatuid, uusi ja geniaalseid ideid.

Arendajate kogukond on andnud olulise panuse koodi arendamisse, sealhulgas kompilaatorid, konveierid, käitumismudelid, API-d, testraamistikud, rakendused ja palju muud. Sellistel ettevõtetel nagu Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx ja ZTE on spetsiaalsed arendajad; ülikoolidest, sealhulgas BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass ja USI; ja avatud lähtekoodiga projektid, sealhulgas CORD, FD.io, OpenDaylight, ONOS, OvS, SAI ja Stratum, rõhutavad tõsiasja, et P4 on iseseisev kogukonnaprojekt.

Tüüpiline P4 keele kontrollerite põlvkond:

P4 programmeerimiskeel

Taotluse väljavaated

P4 programmeerimiskeel
Kuna keel on mõeldud rakenduste marsruutimiseks, on nõuete loetelu ja kujundusvõimalused üldotstarbeliste programmeerimiskeeltega võrreldes erinevad. Keele peamised omadused on järgmised:

  1. Sõltumatus eesmärgi rakendamisest;
  2. Kasutatava(te) protokolli(de) sõltumatus;
  3. Väljade ümberkonfigureeritavus.

Sõltumatus eesmärgi rakendamisest

P4 programmid on loodud olema rakendamisest sõltumatud, mis tähendab, et neid saab kompileerida paljude erinevat tüüpi täitmismootorite jaoks, nagu üldotstarbelised protsessorid, FPGA-d, süsteem-kiibid, võrguprotsessorid ja ASIC-id. Neid erinevat tüüpi masinaid tuntakse P4 sihtmärkidena ja iga sihtmärk nõuab kompilaatorit, mis teisendab P4 lähtekoodi sihtlüliti mudeliks. Kompilaatori saab sisse ehitada sihtseadmesse, välisesse tarkvarasse või isegi pilveteenusesse. Kuna paljud P4-programmide algsed sihtmärgid olid mõeldud lihtsaks pakettkommuteerimiseks, on väga tavaline kuulda terminit "P4 lüliti", kuigi "P4 sihtmärk" on täpsem.

Kasutatava(te) protokolli(de) sõltumatus

P4 on protokollist sõltumatu. See tähendab, et keel ei toeta tavapäraste protokollide, nagu IP, Ethernet, TCP, VxLAN või MPLS, jaoks. Selle asemel kirjeldab P4 programmeerija programmis vajalike protokollide päisevorminguid ja väljanimesid, mida omakorda tõlgendab ja töötleb koostatud programm ja sihtseade.

Väljade ümberkonfigureeritavus

Protokolli sõltumatus ja abstraktne keelemudel võimaldavad ümberkonfigureerimist – P4-sihtmärgid peaksid pärast süsteemi juurutamist saama paketitöötlust muuta. Seda võimalust on traditsiooniliselt seostatud marsruutimisega üldotstarbeliste protsessorite või võrguprotsessorite kaudu, mitte fikseeritud funktsiooniga integraallülituste kaudu.

Kuigi keeles pole midagi, mis takistaks konkreetse protokollikomplekti jõudluse optimeerimist, on need optimeerimised keele autorile nähtamatud ning võivad lõppkokkuvõttes vähendada süsteemi ja eesmärkide paindlikkust ning nende ümberkonfigureeritavust.

Need keele omadused määrasid algselt selle loojad, keskendudes selle laialdasele kasutamisele võrgu infrastruktuuris.

Keel on juba kasutusel paljudes ettevõtetes:

1) Hüperskaala andmekeskused;

Hiina ettevõte Tencent on maailma suurim investeerimisettevõte ja üks suurimaid riskikapitaliettevõtteid. Tencenti tütarettevõtted nii Hiinas kui ka teistes riikides üle maailma on spetsialiseerunud kõrgtehnoloogilise äri erinevatele valdkondadele, sealhulgas erinevatele internetiteenustele, tehisintellekti valdkonna arengutele ja elektroonilisele meelelahutusele.

P4 ja programmeeritav marsruutimine on arenenud tehnoloogiad, mida kasutatakse ettevõtte võrguarhitektuuris.

Ühe loojana märgib Google uhkusega P4 kiiret kasutuselevõttu võrgutööstuses ja eriti andmekeskuste arhitektuurilises disainis.

2) Äriühingud;

Goldman Sachs kasutab avatud lähtekoodiga kogukonnaga koostööd ning ühiste standardite ja lahenduste väljatöötamist võrguinfrastruktuuri uuendamiseks ja klientidele paremate lahenduste pakkumiseks.

3) Tootmine;

Kogu võrgutööstus saaks kasu sellisest keelest nagu P4, mis määratleb üheselt edastamiskäitumise. Cisco usub ka oma tootesarjade üleviimisse selle keele kasutamiseks.

Juniper Networks on lisanud P4 ja P4 Runtime mitmetesse toodetesse ning pakub programmilist juurdepääsu Juniperi manustatud protsessorile ja selle tarkvarakoodile.

Ruijie Networks on P4 ja selle võrkudele pakutavate eeliste tugev toetaja. P4 abil saab ettevõte luua ja pakkuda oma klassi parimaid lahendusi paljudele klientidele.

4) telekommunikatsiooni pakkujad;

AT&T oli P4 varajane kasutuselevõtja, üks esimesi, kes kasutas P4-d, et määratleda käitumist, mida ta oma võrkudes näha soovis, ja kasutas oma võrgus P4 programmeeritavaid edastamisseadmeid.

Deutsche Telekomis kasutatakse seda keelt Access 4.0 programmi osana peamiste võrgufunktsioonide prototüüpimiseks.

5) Pooljuhtide tööstus;

Keel võimaldas Barefootil rakendada uut paradigmat tarkvara võimaluste edastamiseks võrgu marsruutimistasandile.

Xilinx oli üks P4.org asutajatest ja osales aktiivselt P4 keele väljatöötamises ning juurutas selle FPGA-põhistesse programmeeritavatesse platvormidesse SmartNIC ja NFV riistvara jaoks, andes SDNeti disaini osana välja ühe esimestest P416 kompilaatoritest.

6) Tarkvara.

VMware usub, et P4 loob tohutut energiat, innovatsiooni ja kogukonda, mis juhib võrgus mõttekaid ja vajalikke ümberkujundamisi. VMware on olnud selle tööstuse liikumise osa algusest peale, kuna uut innovatsioonilainet juhivad tarkvarapõhised lähenemisviisid, mis laiendavad infrastruktuuri võimalusi ja rakendavad seda uusimates toodetes.

Seega on P4 sihtmärgist sõltumatu ja protokollist sõltumatu programmeerimiskeel, mida tööstus ja akadeemiline ringkond kasutavad pakettide marsruutimise käitumise unikaalseks määratlemiseks programmina, mida saab omakorda kompileerida mitme sihtmärgi jaoks. Tänapäeval on sihtmärkideks riist- ja tarkvaralülitid, hüperviisorlülitid, NPU-d, GPU-d, FPGA-d, SmartNIC-id ja ASIC-id.

Keele põhiomadused laiendavad oluliselt selle rakendusala ja tagavad selle kiire rakendamise võrguarhitektuurides.

Alustamine

P4 on avatud projekt, kogu asjakohane info on kodulehel P4.org

Hoidla link https://github.com/p4lang, kust saate lähtekoodi ja õpetusi.

Plugin P4 toega Eclipse'i jaoks, kuid võime soovitada P4 stuudio alates Barefoot.

P4 programmeerimiskeel

Vaatame tuuma peamisi abstraktsioone:

Päiste määratlemine - nende abiga määratakse protokolli päised.

Päise definitsioon täpsustab:

  • paketivormingute ja päiseväljade nimede kirjeldus
  • fikseeritud ja muutuv lubatud väljad

Näiteks

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

Parserid — nende ülesanne on pealkirju sõeluda.

Järgmine parseri näide määrab masina lõppoleku ülemineku ühest algolekust ühte kahest lõppolekust:

P4 programmeerimiskeel

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

Tabelid — sisaldab masina olekuid, mis seovad kasutaja võtmed toimingutega. Tegevus — pakendiga manipuleerimise kirjeldus.

Tabelid sisaldavad pakettide edastamise olekuid (määratletud haldustasemel), kirjeldavad Match-Action üksust

Paketid sobivad:

  • Täpne vaste
  • Pikim eesliite vaste (LPM)
  • Kolmekordne sobitamine (maskeerimine)

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

Kõik võimalikud toimingud tuleb eelnevalt tabelites määratleda.

Toimingud koosnevad koodist ja andmetest. Andmed pärinevad haldustasandilt (nt IP-aadressid/pordinumbrid). Teatud silmusteta primitiive saab määrata otse tegevuses, kuid käskude arv peab olema etteaimatav. Seetõttu ei saa toimingud sisaldada silmuseid ega tingimuslauseid.

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 moodulid — toimingud otsinguvõtme loomiseks, tabelist otsimiseks, toimingute sooritamiseks.

Tüüpiline mooduli näide on näidatud joonisel:

P4 programmeerimiskeel

Voolu juhtimine — näitab Match-Actioni moodulite kasutamise järjekorda. See on hädavajalik programm, mis määratleb kõrgetasemelise loogika ja Match-Action jada. Juhtvoog seob kõik objektid, määratledes juhtimise taseme.

Välised objektid on konkreetsed objektid, millel on selgelt määratletud arhitektuur ja API liidesed. Näiteks kontrollsumma arvutamine, registrid, loendurid, loendurid jne.

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
}

Metaandmed — iga paketiga seotud andmestruktuurid.

Metaandmeid on kahte tüüpi:

  Kohandatud metaandmed (tühi struktuur kõigi pakettide jaoks)
    Siia võid panna mida tahad
    Saadaval kogu torujuhtme ulatuses
    mugav kasutada enda tarbeks, näiteks pakiräsi hoidmiseks

  Sisemised metaandmed – pakub arhitektuur
    Siin on määratletud sisendport ja väljundport
    Ajatempel, millal pakett oli järjekorras, järjekorra sügavus
    multisaadete räsi / multisaadete järjekord
    Paki prioriteet, pakendi tähtsus
    Väljundpordi spetsifikatsioon (nt väljundi järjekord)

P4 kompilaator

P4 kompilaator (P4C) genereerib:

  1. Andmetasandi käitusaeg
  2. API masina oleku haldamiseks andmetasandil

P4 programmeerimiskeel

Tarkvaralüliti näide P4 keeles

Lähtekoode saab hoidlast alla laadida.

p4lang/p4c-bm: loob bmv2 jaoks JSON-i konfiguratsiooni
p4lang/bmv2: tarkvaralüliti, mis mõistab bmv2 versiooni JSON-i konfiguratsioone

Joonisel on projekti koostamise diagramm:

P4 programmeerimiskeel

Manipulatsioonid tabelite, lugemisregistrite, loenduritega:

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


Lähtekood sisaldab programmi simple_switch_CLI tarkvaralüliti API mugavaks kasutamiseks.

Selle ja muid näiteid saate hoidlast alla laadida.

P4 programmeerimiskeel

PS Selle suve alguses allkirjastas Intel Barefoot Networksi omandamise lepingu, et kiiresti vastata Hyperscale Cloudi kasutajate vajadustele. Nagu Navin Shenoy (Intel Corporationi andmekeskuste grupi tegevasepresident ja peadirektor) ütles, võimaldab see Intelil pakkuda andmekeskuste klientidele suuremat töökoormust ja rohkem võimalusi.

Minu isikliku arvamuse kohaselt ei tohiks me unustada, et Intel on FPGA kiipide tootmisel liider ja sellel on suurepärane Quartuse keskkond. See tähendab, et võime eeldada, et Inteli tulekuga ei laienda Barefoot ainult oma tootesarja, vaid ka Quartus ja P4 Studio saavad tõsiseid uuendusi ja täiendusi Toffino ja Toffino 2 sarjale.

P4 kogukonna ametlik liige - ettevõte Faktorirühm.

Allikas: www.habr.com

Lisa kommentaar