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