Programmeerimiskeel P4

Programmeerimiskeel P4
P4 on programmeerimiskeel, mis on mõeldud pakettide marsruutimise reeglite programmeerimiseks. Erinevalt üldotstarbelistest keeltest nagu C või Python, on P4 valdkonnapõhine keel, millel on rida konstruktsioone, mis on optimeeritud võrgumarsruutimiseks.

P4 on avatud lähtekoodiga keel, mida litsentseeritakse ja toetatakse mittetulundusühingu nimega P4 Language Consortium. Seda toetavad ka Open Networking Foundation (ONF) ja Linux Foundation (LF) — kaks suuremat algatust avatud lähtekoodi projektides võrgutehnoloogia valdkonnas.
Keel kujundati algselt 2013. aastal ja kirjeldati 2014. aastal SIGCOMM CCR dokumendis pealkirjaga „Protokollist sõltumatu pakettide marsruutimise protsessorite programmeerimine”.

Alates oma loomisest on P4 eksponentsiaalselt kasvanud ja arenenud, saades kiiresti standardiks pakettide edastamise kirjeldamisel võrgu seadmete, sealhulgas võrgukaartide, lülitite ja marsruuterite puhul.

«SDN on muutnud võrgu tööstust, ja P4 tõukab SDN uutesse kõrgustesse, pakkudes marsruutimise valdkonnas programmeeritavust,» ütles Guru Parulkar, Open Networking Foundationi tegevjuht.

P4 keel loodi algselt Google'i, Intel'i, Microsoft Research'i, Barefoot'i, Princetoni ja Stanfordi inseneride ning teadlaste grupi poolt. Eesmärk oli lihtne: luua hõlpsasti kasutatav keel, mille tarkvaraarendaja suudab päevaga selgeks õppida ja kasutada, et täpselt kirjeldada, kuidas paketid võrgus edastatakse.

Alates algusest peale on P4-d arendatud eesmärgist sõltumatu keelena (st P4-s kirjutatud programm saab kompileerida ilma muudatusteta, et töötada erinevates sihtkohtades, nagu ASIC, FPGA, CPU, NPU ja GPU).

Samuti on keel protokollist sõltumatu (st P4 programm saab kirjeldada olemasolevaid standardprotokolle või kasutatakse uute kohandatud aadressimisrežiimide määratlemiseks).

Tööstuses kasutatakse P4 seadmete programmeerimiseks. Tulevikus võivad Internet-RFC ja IEEE standardid samuti sisaldada P4 spetsifikatsiooni.

P4 saab kasutada nii programmeeritavate kui ka fikseeritud funktsiooniga seadmetes. Näiteks kasutatakse seda konnektori käitusloogika täpsel salvestamisel lüliti abstraktsiooniliideste (SAI) API-des, mida kasutatakse avatud lähtekoodiga SONiC lülitite operatsioonisüsteemis. P4-d kasutatakse ka ONF Stratum projektis lülitamise käitumise kirjeldamiseks läbi mitmete fikseeritud ja programmeeritavate seadmete.

Lülitite ja võrgukaartide käitumise kirjeldamine võimaldab esmakordselt luua kogu võrgu täpse täitmisvõime mudeli enne rakendamist. Suured pilveteenuse pakkujad saavad võrku täielikult testida ja siluda tarkvara abil, mis vähendab märgatavalt laboratoorse koostöö testimise aega ja kulusid, ilma et oleks vaja kallist varustust.

Kasutades P4, saavad võrgutootjad loota ühtsele marsruutimiskäitumisele kõikides toodetes, mis võimaldab taaskasutada testimisinfra ja lihtsustab juhtimise tarkvara väljatöötamist ning lõpuks tagab ühilduvuse.

Muidugi saab P4 kasutada programmide kirjutamiseks, mis kirjeldavad täiesti uusi marsruutimisviise. Näiteks kasutatakse P4 laialdaselt telemeetrias ja mõõtmistes andmekeskustes, ettevõtte võrkudes ning teenusepakkujates.

Uurimisteaduskond on samuti aktiivseks muutunud. Mitmed juhtivad akadeemilised teadusgrupid, kes uurivad võrgutehnoloogiaid, on avaldanud huvitavaid uusi rakendusi P4 programmide põhjal, sealhulgas koormuse tasakaalustamine, kooskõlastatud protokollid ja võtmeväärtuse vahemälu. Luues uusi programmeerimise paradigmasid, liiguvad uuendused riistvarast tarkvarasse, võimaldades paljude ootamatute, uute ja geniaalsete ideede sünni.

Arenduse kogukond on andnud märkimisväärse panuse koodi arendamisse, sealhulgas kompilaatorid, toruprogrammid, käitumismudelid, API-liidesed, testkeskkonnad, rakendused ja palju muud. Pühendunud arendajad töötavad sellistes ettevõtetes nagu Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx ja ZTE; ülikoolides, sealhulgas BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass ja USI; ning avatud lähtekoodiga projektides, sealhulgas CORD, FD.io, OpenDaylight, ONOS, OvS, SAI ja Stratum, rõhutavad fakti, et P4 on sõltumatu avalik projekt.

Tüüpiline P4 keele kontrollerite genereerimine:

Programmeerimiskeel P4

Rakendamise väljavaated

Programmeerimiskeel P4
Kuna keel on mõeldud marsruutimise rakenduste jaoks, on nõuete ja disaini valik erinev üldotstarbeliste programmeerimiskeelte omadest. Keele peamised omadused on:

  1. Sihipärase elluviimise sõltumatus;
  2. Protokollide sõltumatus;
  3. Väljade ümberkonfigureeritavus.

Sihipärase elluviimise sõltumatus

P4 programmid on välja töötatud nii, et need ei sõltuks rakendusest, st neid saab kompilatsiooni jaoks kohandada paljude erinevate täitmismasinate, näiteks üldotstarbeliste protsessorite, FPGA-de, süsteemide, mis asuvad kiibil, võrguprotsessorite ja ASIC-ide jaoks. Need erinevad tüübid masinaid on tuntud kui P4 sihid ja iga sihi jaoks on vajalik kompilaator, et muuta P4 lähtekood sihtkommutatori mudeliks. Kompilaator võib olla integreeritud sihtseadmestikku, välistesse tarkvaradesse või isegi pilveteenusesse. Kuna paljusid algseid sihte P4 programmide jaoks kasutati lihtsaks pakettide edastamiseks, võib sageli kuulda terminit "P4 kommutaator", isegi kui "P4 siht" kasutamine on täpsem.

Sõltumatus kasutatavast protokollist(-idest)

P4 on protokollidest sõltumatu. See tähendab, et keeles ei ole sisseehitatud tuge levinud protokollidele, nagu IP, Ethernet, TCP, VxLAN või MPLS. Selle asemel kirjeldab P4 programmeerija vajalikest protokollidest pealkirjade formaate ja väljade nimesid, mis omakorda tõlgendatakse ja töödeldakse kompileeritud programmi ja sihtseadmaga.

Väljade ümberkonfigureeritavus

Protokollide sõltumatus ja abstraktse keele mudel võimaldavad ümberkonfigureeritavust — P4 sihtseadmed peavad olema võimelised muutma pakettide töötlemist pärast süsteemi juurutamist. See võimalus on traditsiooniliselt seotud marsruutimisega, kasutades üldotstarbelisi protsessoreid või võrguprotsessoreid, mitte fikseeritud funktsioonidega integraalide.

Kuigi keeles ei ole midagi, mis takistaks teatud protokollide optimeerimist, on need optimeerimised kirjutaja jaoks nähtamatud ja võivad lõpuks vähendada süsteemi ja sihtseadmete paindlikkust ning nende ümberkonfigureeritavust.

Selle keele omadused kujundati esialgselt selle loojate poolt silmas pidades laialdast kasutamist võrguinfrastruktuuris.

Juba praegu kasutatakse keelt paljudes ettevõtetes:

1) Ülemõõdulised andmekeskused;

Hiina ettevõte Tencent on maailma suurim investeerimisfirma ja üks suurimaid riskikapitalifirmasid. Tencentile kuuluvad tütarettevõtted nii Hiinas kui ka mujal maailmas, mis spetsialiseeruvad erinevatele kõrgetehnoloogilistele tegevusaladele, sealhulgas erinevatele internetiteenustele, tehisintellekti arendustele ja elektroonilistele meelelahutustele.

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

Olles üks loojaid, rõõmustab Google P4 kiire rakendamise üle võrgutööstuses ja eriti andmekeskuse arhitektuuridisainis.

2) Kaubandusettevõtted;

Goldman Sachs toob innovatsiooni võrgutaristusse ja pakub parimaid lahendusi klientidele, kasutades avatud koodi ühisuse eeliseid ja arendades ühiseid standardeid ja lahendusi.

3) Tootmine;

Kogu võrgutööstus võidab P4 keele kasutamisest, mis määratleb selgelt suunamisotsuste käitumise. Seda usub ka Cisco, kes viib oma tooteportfelli üle selle keele kasutamisele.

Juniper Networks on lisanud P4 ja P4 Runtime mitmeid tooteid ning tagab tarkvaralise juurdepääsu integreeritud Juniperi protsessorile ja selle tarkvarale.

Ruijie Networks on P4 tuline toetaja ja tunneb selle pakkumise eeliseid võrkudele. P4 abil suudab ettevõte luua ja pakkuda oma klassi parimaid lahendusi laiale klientide ringile.

4) Telekommunikatsiooniteenuse pakkujad;

AT&T oli üks P4 esimesi toetajaid, üks esimestest, kes kasutas P4-öid käitumise määratlemiseks, mida ta soovis oma võrkudesse, ning kasutas oma võrgus programmeeritavaid suunamis-P4 seadmeid.

Deutsche Telekom kasutab keelt võrgufunktsioonide prototüüpimiseks Access 4.0 programmi raames.

5) Pooljuhtide tööstus;

Keel võimaldas rakendada uut paradigma tarkvarafunktsioonide edastamiseks võrgusüsteemide marsruutimise kontekstis Barefooti poolt.

Xilinx oli üks P4.org asutajatest ja mängis aktiivset rolli P4 keele arendamisel, integreerides selle FPGA-põhistes programmeeritavatesse platvormidesse SmartNICi ja NFV seadmete jaoks, välja andes ühe esimestest P416 kompilaatoritest SDNet'i disaini osana.

6) Tarkvara.

VMware'is usuvad, et P4 loob tohutu energia, innovatsiooni ja kogukonna, mis viib oluliste ja vajalike muudatusteni võrgus. VMware oli algselt osa sellest tööstuslikust liikumisest, kuna uus innovatsioonilaine on tingitud tarkvaralistest lähenemistest, mis laiendavad infrastruktuuri võimalusi ning rakendavad seda uusimates toodetes.

Seega on P4 protokollist ja eesmärgist sõltumatu programmeerimiskeel, mida tööstus ja teaduskond kasutavad pakettide marsruutimiskäitumise üheselt määratlemiseks kui programmi, mida saab koostada mitmete eesmärkide jaoks. Tänapäeval hõlmavad eesmärgid riistvaralisi ja tarkvaralisi lüliteid, hüperviisori lüliteid, NPU-sid, graafikaprotsessoreid, FPGA-sid, SmartNIC-e ja ASIC-e.

Keele peamised omadused laiendavad oluliselt tema kasutusvõimalusi ja tagavad selle kiire rakendamise võrguarhitektuurides.

Kust alustada

P4 on avatud projekt, kõik ajakohane teave on saadaval veebilehel P4.org

Link hoidla juurde https://github.com/p4lang, kus saate alla laadida näidiskoode ja õpetavaid materjale.

Plugin Eclipse'i jaoks, mis toetab P4, aga soovitame P4 Studio ettevõttelt Barefoot.

Programmeerimiskeel P4

Vaadakem põhistruktuurid:

Pealkirjade määratlemine — nende abil määratakse protokolli pealkirjad.

Pealkirjade määratlemisel määratakse:

  • pakettide formaatide kirjeldused ja pealkirjade väljade nimed
  • fikseeritud ja muutuvad lubatud väljad

Piemēram

pealkiri Ethernet_h{
    bitti  dstAddr;
    bitti  srcAddr;
    bitti  etherType;
}

pealkiri IPv4_h{
    bitti versioon;
    bitti ihl;
    bitti diffserv;
    bitti totalLen;
    bitti identifitseerimine;
    bitti lipud;
    bitti fragOffset;
    bitti ttl;
    bitti protokoll;
    bitti hdrChecksum;
    bitti srcAddr;
    bitti dstAddr;
    varbit valikud;
}

Pärserid — nende ülesanne on analüüsida pealkirju.

Järgmine parsi näide määrab ülemineku lõppseisundisse masinast ühe algseisundi kaudu kahte lõppseisundisse:

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

Tabelid — sisaldavad masina seisundeid, mis seovad kasutaja võtmed tegevustega. Toimingud — kirjeldus sellest, kuidas paketti manipuleerida.

Tabelid sisaldavad (halduse tasemel määratud) seisundeid pakettide edastamiseks, kirjeldavad Match-Action tegevuse üksust

Pakettide sobitamine toimub:

  • Täpse vastavuse põhjal
  • Pikaima prefiksi sobitamise (LPM) põhjal
  • Kolmeosalise sobitamise (maskimise) põhjal

tabel ipv4_lpm{
    loeb{
        ipv4.sihtAddr: lpm;
    } actions {
        edasi();
    }
}

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

Tegevused koosnevad koodist ja andmetest. Andmed tulevad halduse tasemelt (näiteks IP-aadressid / pordinumbrid). Määratud, tsükli vabad primitiivid võivad olla otse tegevuses määratletud, kuid käskude arv peab olema ettearvatav. Seetõttu ei või tegevustes olla tsükleid või tingimuslikke operaatorid.

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 — tegevused otsinguvõtme loomise, tabelis otsimise, tegevuste täitmise osas.

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

Programmeerimiskeel P4

Juhtimisvoog — näitab Match-Action moodulite rakendamise järjekorda. See on käskprogrammeerimine, mis määratleb kõrgtaseme loogika ja Match-Actioni järjestuse. Juhtimisvoog seob kõik objektid, määrates juhtimise taseme.

Välimised objektid — on spetsiifilised objektid, millel on selgelt määratletud arhitektuur ja API liidesed. Näiteks kontrollsummade arvutamine, registrid, loendurid jms.

väline registreeri{
    registreeri(bit<32> suurus);
    void loe(out T tulemus, in bit<32> indeks);
    void kirjuta(in bit<32> indeks, in T väärtus);
}

väline Kontrollsumm16{
  Kontrollsumm16();    //konstruktor
  void tühjenda();    //valmistage seade arvutamiseks
  void uuenda(in T andmed);    //lisage andmed kontrollsummale
  void eemalda(in T andmed);  /eemaldage andmed olemasolevast kontrollsummast
  bittisaadud(); //saada kontrollsumma andmete jaoks, mis on lisatud pärast viimast tühjendamist
}

Metadatas — andmestruktuurid, mis on seotud iga paketiga.

On olemas 2 tüüpi metaandmeid:

  Kasutaja metaandmed (tühi struktuur kõikidele pakettidele)
    Siia võite panna kõike, mida soovite
    Saadaval kogu pipeline'i ulatuses
    mugav kasutada oma eesmärkide saavutamiseks, näiteks paketi räsi hoidmiseks

  Sisemised metaandmed — määratletud arhitektuuriga
    Sisendiport, väljundiport määratletakse siin
    Ajatempli andmed, millal pakk järjekorda pandi, järjekorra sügavus
    multicast hash / multicast queue
    Paketi prioriteet, paketi olulisus
    Väljundi porti spetsifikatsioon (nt väljundi järjekord)

P4 kompilaator

R4 kompilaator (P4C) genereerib:

  1. Andmeplaneedi tööaeg
  2. API andmeplaneedi masina seisundi haldamiseks

Programmeerimiskeel P4

Näide P4 keeles kirjutatud tarkvaralise lüliti kohta

Algkoodi saab alla laadida hoidlast.

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

Joonisel on näidatud projekti kompileerimise skeem:

Programmeerimiskeel P4

Tabelitega, lugemisregisteritega, loenduritega manipuleerimine:

  • vaikearvuti_seaded <table name> <action name> <action parameters>
  • table_add <table name> <action name> <match fields> => &lt;action
    parameters> [priority]
  • kustuta tabel <table name> <entry handle>


Algkoodides on toodud simple_switch_CLI programm, et hõlbustada tarkvaralise lüliti API kasutamist.

Seda ja teisi näiteid saate alla laadida hoidlast.

Programmeerimiskeel P4

P.S. Suve alguses allkirjastas Intel lepingu Barefoot Networks'i omandamiseks, et kiiresti rahuldada Hyperscale Cloud kasutajate vajadusi. Navin Shenoy (Intel Corporatsiooni andmekeskuse grupi tegevasepresident ja peajuhataja) ütles, et see võimaldab Intelil pakkuda suuremaid töökoormusi ja rohkem võimalusi andmekeskuse klientidele.

Isiklikust arvamusest lähtuvalt ei tohi unustada, et ettevõte Intel on FPGA-kiipide tootmise liider ja neil on suurepärane keskkond Quartus. Seetõttu võib oodata, et Inteli saabumisega täieneb Barefooti tootmisportfell, samuti ootavad uuendusi ja uusi lisandeid Quartus ja P4 Studio Toffino ja Toffino 2 seeriaga.

P4 kogukonna ametlik liige on ettevõte Faktor grup.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster