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 ainepõhine keel, millel on mitmed konstruktsioonid, mis on optimeeritud võrgu marsruutimise jaoks.

P4 on avatud lähtekoodiga keel, mida litsentseerib ja toetab mittetulundusühing nimega P4 Language Consortium. Seda toetavad ka Open Networking Foundation (ONF) ja Linux Foundation (LF) - kaks suurimat katvusorganisatsiooni avatud lähtekoodi projektides võrgu tehnoloogiate valdkonnas.
Keel loodi esmakordselt 2013. aastal ja kirjeldati 2014. aastal SIGCOMM CCR dokumendis pealkirjaga "Protokollist sõltumatu pakettide marsruutimise programmeerimine."

Alates oma loomisest on P4 eksponentsiaalselt kasvanud ja arenenud, saades kiiresti standardiks, kuidas võrgu seadmed, sealhulgas võrguadapterid, lülitid ja marsruuterid, pakettide edastamist kirjeldavad.

"SDN on muutnud võrgu tööstust, ja P4 viib SDN uuele tasemele, pakkudes marsruutimises programmeeritavust," ütles Guru Parulkar, Open Networking Foundationi tegevjuht.

P4 keel loodi algselt Google'i, Inteli, Microsoft Researchi, Barefooti, Princetoni ja Stanfordi inseneride ja teadlaste grupi poolt. Eesmärk oli lihtne: luua kergesti kasutatav keel, mille programmist arendaja suudab päevas selgeks õppida ja kasutada selleks, et täpselt kirjeldada, kuidas pakette võrgus edastatakse.

Alates esimesest päevast on P4 arendatud sihtkohta sõltumatuna (st programm, mis on kirjutatud P4-s, võib olla kompileeritud muutmata erinevatele platvormidele nagu ASIC, FPGA, CPU, NPU ja GPU).

Samuti on keel protokollist sõltumatu (st P4 programm võib kirjeldada olemasolevaid standardprotokolle või kasutada uusi kohandatud adresseerimisrežiime).

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

P4 saab kasutada nii programmeeritavates kui ka fikseeritud funktsioonide seadmetes. Näiteks kasutatakse seda kommutaatori API liideste (SAI) kaudu kommutaatori käitumise täpset salvestamist, mida rakendavad avatud lähtekoodiga SONiC kommutaatorite operatsioonisüsteemid. P4-d kasutatakse ka ONF Stratum projektis kommuteerimise käitumise kirjeldamiseks läbi mitmete fikseeritud ja programmeeritavate seadmete.

Kommutaatori ja võrkarteptorite käitumise kirjeldamine võimaldab esmakordselt luua kogu võrgu täpse teostatava mudeli enne juurutamist. Suured pilveteenuse pakkujad saavad võrku täielikult testida ja siluda tarkvara abil, mis vähendab oluliselt aega ja kulusid, mis on vajalikud laboratooriumi koostoime testimiseks, ilma kallite seadmete vajaduseta.

P4 abil saavad võrgu seadmete tootjad loota järjepidevusele kõikide toodete marsruutimise põhikäitumises, mis võimaldab taaskasutada testimise infrastruktuuri, lihtsustab haldustarkvara arendamist ja tagab lõpuks ühilduvuse.

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

Uurimiskogukond on samuti aktiivselt tegutsemas. Mitmed juhtivad akadeemilised võrktehnoloogiate uurimisgrupid on avaldanud huvitavaid uusi P4-põhiseid rakendusi, sealhulgas koormuse jagamist, kooskõlastatud protokolle ja võtme väärtuse vahemälastamist. Moodustatakse uus programmeerimise paradigma, innovatsioon liikudes riistvarast tarkvarasse, mis võimaldab paljude ootamatute, uute ja geniaalsete ideede sündi.

Arenduse kogukond on andnud märkimisväärse panuse koodi arendamisse, sealhulgas kompilaatoritesse, toruvööndiprogrammidesse, käitumismudelitesse, API liidestesse, testikeskkondadesse, rakendustesse 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 koodi projektides nagu CORD, FD.io, OpenDaylight, ONOS, OvS, SAI ja Stratum, rõhutades, et P4 on sõltumatu avalik projekt.

Tüüpiline P4 keele kontrollerite genereerimine:

Programmeerimiskeel P4

Rakenduste perspektiivid

Programmeerimiskeel P4
Kuna keel on mõeldud marsruutimistarkvaraks, erinevad nõudmiste ja disainivalikute loend võrreldes üldotstarbeliste programmeerimiskeeltega. Keel tugineb järgmistele peamistele omadustele:

  1. Sõltumatus sihtrealisatsioonist;
  2. Sõltumatus kasutatavast protokollist(-idest);
  3. Väljade rekonfigureeritavus.

Sõltumatus sihtrealisatsioonist

P4 programmid on kujundatud nii, et need ei sõltuks rakendusest, see tähendab, et neid saab kompileerida mitmesugustele sihtseadmete tüüpidele, nagu üldotstarbelised protsessorid, FPGA, süsteemid kiibis, võrguprotsessorid ja ASIC-id. Need erinevad seadmed on tuntud kui P4 sihid ja iga sihtkoha jaoks on vajalik kompilaator P4 lähtekoodi teisendamiseks sihtlüliti mudeliks. Kompilaator võib olla integreeritud sihiseadmisse, välishaldustarkvarasse või isegi pilveteenusesse. Kuna palju algseid P4 programmide sihid kasutati paketipööramiseks, kasutatakse tihti mõistet „P4 lüliti“, isegi kui „P4 siht“ on täpsem.

Sõltumatus kasutatavast protokollist(-idest)

P4 on protokollide suhtes 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 vajalike protokollide pealkirjade formaate ja väljade nimesid programmis, mis seejärel tõlgitakse ja töödeldakse kompileeritud programmi ja sihtseadmise poolt.

Väljade rekonfigureeritavus

Protokolli ja abstraktse keele mudeli sõltumatus lubab rekonstruktiivsust — P4 eesmärgid peavad võimaldama pakettide töötlemise muutmist pärast süsteemi juurutamist. See võimalus on traditsiooniliselt seotud marsruutimisega tavaliste protsessorite või võrguprotsessorite kaudu, mitte fikseeritud funktsioonidega integreeritud ringide kaudu.

Kuigi keeles pole midagi, mis takistaks teatud protokollide töö kiiret optimeerimist, on need optimeeringud keelekirjutajale nähtamatud ja võivad lõpuks vähendada süsteemi paindlikkust ja eesmärke ning nende rekonstruktiivsust.

Need keele omadused olid selle loojate poolt algselt suunatud selle laialdasele kasutusele võrgutööstuses.

Juba praegu kasutatakse keelt paljudes ettevõtetes:

1) Üksikute andmekeskuste hiiglaslikud mastaabid;

Hiina ettevõte Tencent on maailma suurim investeerimisettevõte ja üks suurimaid riskikapitalifirmasid. Tencent'i tütarettevõtted, nii Hiinas kui ka mujal maailmas, on spetsialiseerunud erinevatele kõrgtehnoloogia valdkondadele, sealhulgas erinevatele Interneti-teenustele, tehisintellekti arendamisele ja elektroonilistele meelelahutusele.

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

Olles üks loojatest, uhkeldab Google P4 kiiret kasutuselevõttu võrgu tööstuses ning eriti andmekeskuste arhitektuuri projekteerimises.

2) Kaubandusettevõtted;

Goldman Sachs, kasutades avatud lähtekoodiga kogukonnaga koostöö eeliseid ja arendades ühiseid standardeid ja lahendusi, toob juba praegu uuendusi võrguturustusse ja pakub oma klientidele parimaid lahendusi.

3) Tootmine;

Kogu võrgutööstus saab kasu sellisest keelest nagu P4, mis määratleb üheselt ümbersuunamise käitumise. Samuti usuvad selles Cisco, kes viib oma tooteportfellid selle keele kasutusele.

Juniper Networks on lisanud P4 ja P4 Runtime mitmesse tootesse ning tagab juurdepääsu Juniperi sisseehitatud protsessorile ja selle programmikoodile.

Ruijie Networks on aktiivne P4 toetaja ja selle toomise eeliste pooldaja võrkudes. P4 abil suudab ettevõte luua ja pakkuda oma ala parimaid lahendusi laiale klantide ringile.

4) Telekommunikatsiooniteenuse pakkujad;

AT&T oli üks esimesi P4 toetajaid, kelle hulka kuulus P4 kasutamine soovitud käitumise määratlemiseks võrku ning P4 programmiga suunatavate seadmete kasutamine oma võrgus.

Deutsche Telekom kasutab keelt võtmevõrgu funktsioonide prototüüpide loomiseks Access 4.0 programmi raames.

5) Pooljuhtide tööstus;

Keel võimaldas Barefootil rakendada uut tarkvaraülekande paradigm, mis suunab võrgu marsruutimise tasandile.

Xilinx oli P4.org asutaja ja mängis aktiivset rolli P4 keele arendamisel, integreerides selle FPGA-põhiste programmeeritavate platvormidega SmartNICi ja NFV seadmetes, välja andes ühe esimestest P416 kompilaatoritest SDNeti disaini osana.

6) Tarkvara.

VMware usub, et P4 loob tohutut energiat, innovatsiooni ja kogukonda, mis viib oluliste ja vajalikeni muutusteni võrkudes. VMware oli algselt selle tööstusliikumise osa, kuna uus innovatsioonilaine on põhjustatud tarkvara lähenemisviisidest, mis laiendavad infrastruktuuri võimekust ja viivad selle ellu uusimates toodetes.

Seega on P4 eesmärgist ja protokollist sõltumatu programmeerimiskeel, mida tööstus ja teadusmaailm kasutavad pakettide marsruutimise käitumise kindlaksmääramiseks kui programmi, mida võib omakorda kompileerida mitme eesmärgi jaoks. Tänapäeval hõlmavad eesmärgid risthäälte ja programmikommutaatorite, hüperviisori kommutaatorite, NPU, graafikaprotsessorid, FPGA, SmartNIC ja ASIC.

Keele peamised omadused laiendavad oluliselt selle rakenduste valdkonda ja tagavad selle kiire rakendamise võrgustruktuurides.

Kust alustada

P4 on avatud projekt, kõik asjakohane teave on saadaval veebisaidil P4.org

Link ladustamisruumile https://github.com/p4lang, kus saate alla laadida näidiste ja õpetusmaterjale lähtekoodid.

Pistikprogramm Eclipse'ile P4 toe jaoks, kuid saame soovitada P4 Studio Barefootilt.

Programmeerimiskeel P4

Käsitleme põhijõudluse abstraktsioone:

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

Pealkirjade määratlemises määratakse:

  • paketiformaatide kirjeldus ja pealkirjafeldide nimed
  • fikseeritud ja muutuvad lubatud väljad

Näiteks

päis Ethernet_h{
    bittdstAddr;
    bittsrcAddr;
    bittetherType;
}

päis IPv4_h{
    bittversion;
    bittihl;
    bittdiffserv;
    bitttotalLen;
    bittidentification;
    bittflags;
    bittfragOffset;
    bittttl;
    bittprotocol;
    bitthdrChecksum;
    bittsrcAddr;
    bittdstAddr;
    varbitoptions;
}

Parsilendid — nende ülesanne on pealkirjade analüüsimine.

Järgmine parsija näitab, kuidas masina lõppolek muutub ühest algolekust ühte kahest lõppolekust:

Programmeerimiskeel P4

parsiija MinuParsiija(){
 olek algus{ülemineku parsi_ethernet;}
 olek parsi_ethernet{
    pakett.eralda(hdr.ethernet);
    üleminek vali(hdr.ethernet.etherType){
        TÜÜP_IPV4: parsi_ipv4;
        vaikimisi: aktsepteeri;
        }
    }…
}

Tabelid — sisaldavad masina olekuid, seostades kasutaja võtmed tegevustega. Tegevused — kirjeldus, kuidas paketti käsitleda.

Tabelid sisaldavad olekuid (määratud juhtimislevel) pakettide edastamiseks, kirjeldavad Match-Action tegevuse ühikut

Pakettide sobitamine toimub järgmistel alustel:

  • Täpset vastavust
  • Pikima prefikssi sobitamine (LPM)
  • Kolmekordne sobitamine (maskimine)

table ipv4_lpm{
    loeb{
        ipv4.sihtAadress: lpm;
    } tegevused {
        edasi();
    }
}

Kõik võimalikud tegevused peavad olema tabelites eelnevalt määratud.

Tegevused koosnevad koodidest ja andmetest. Andmed tulevad juhtimislevel'ist (nt IP-aadressid / pordinumerid). Määratud, tsüklivabad primitiivid võivad olla otse tegevuses, kuid käskude arv peab olema etteaimatav. Seetõttu ei või tegevustes olla mingeid tsükleid või tingimuslikke operaatori.

tegevus 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 toodud joonisel:

Programmeerimiskeel P4

Kontrollivoog — näitab Match-Action moodulite rakendamise järjekorda. See on imperatiivne programm, mis määratleb kõrgtaseme loogika ja Match-Action järjekorra. Kontrollivoog seob kõik objektid, määrates juhtimise taseme.

Välistest objektidest — need on spetsiifilised objektid selgelt määratletud arhitektuuri ja API-liidestega. Näiteks kontrollsumma, registrid, loendurid jne.

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

väline Checksum16{
  Checksum16();    //konstruktor
  void clear();    //valmistage üksus arvutamiseks
  void update(in T data);    //lisage andmed kontrollsummale
  void remove(in T data);  //eemaldage andmed olemasolevast kontrollsummast
  bittget(); //saage kontrollsumma viimati selgeks tehtud andmete jaoks
}

Metaandmed — andmestruktuurid, mis on seotud iga paketiga.

Metaandmeid on kahte tüüpi:

  Kasutajametad (tühi struktuur kõikide paketide jaoks)
    Siia võite panna kõik, mida soovite
    Saadaval kogu pipeline'i ulatuses
    mugav oma vajaduste jaoks, näiteks paketi hash'i salvestamiseks

  Sisemised metaandmed — tagatud arhitektuuriga
    Sisendport, väljundport määratakse siin
    Aeg, millal pakk pandi järjekorda, järjekorra sügavus
    multicast hash/multicast queue
    Packet priority, packet importance
    Output port specification (e.g., output queue)

P4 compiler

The P4 compiler (P4C) generates:

  1. Data plane runtime
  2. API for managing the state machine in the data plane

Programmeerimiskeel P4

Example of a software switch in P4 language

The source codes can be downloaded from the repository.

p4lang/p4c-bm: creates JSON configuration for bmv2
p4lang/bmv2: software switch that understands JSON configurations of version bmv2

The diagram shows the compilation scheme of the project:

Programmeerimiskeel P4

Manipulations with tables, read registers, counters:

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


The source codes include the simple_switch_CLI program for easy use of the software switch API.

You can download this and other examples from the repository.

Programmeerimiskeel P4

P.S. At the beginning of summer, Intel signed an agreement to acquire Barefoot Networks, aiming to swiftly meet the needs of Hyperscale Cloud users. According to Navin Shenoy (executive vice president and general manager of the Data Center Group at Intel Corporation) — this will enable Intel to provide larger workloads and more capabilities for data center customers.

In my personal opinion, it shouldn't be forgotten that Intel is a leader in FPGA chip production, and they have an excellent Quartus environment. So, one can expect that with Barefoot's integration into Intel, not only will the product line expand, but also Quartus and P4 Studio are due for significant updates, along with the Toffino and Toffino 2 lines.

Official member of the P4 community — company Faktor grup.

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster