P4 ohjelmointikieli

P4 ohjelmointikieli
P4 on ohjelmointikieli, joka on suunniteltu ohjelmoimaan pakettien reitityssääntöjä. Toisin kuin yleiskäyttöiset kielet, kuten C tai Python, P4 on verkkoaluekohtainen kieli, jossa on useita verkkoreititystä varten optimoituja malleja.

P4 on avoimen lähdekoodin kieli, jonka lisensoi ja ylläpitää voittoa tavoittelematon organisaatio nimeltä P4 Language Consortium. Sitä tukevat myös Open Networking Foundation (ONF) ja Linux Foundation (LF), kaksi suurinta avoimen lähdekoodin verkkoprojektien kattojärjestöä.
Kieli keksittiin alun perin vuonna 2013, ja se kuvattiin vuoden 2014 SIGCOMM CCR -paperissa "Protocol Independent, Packet Routing Processor Programming".

P4 on sen perustamisesta lähtien kasvanut ja kehittynyt eksponentiaalisesti, ja siitä on nopeasti tullut standardi verkkolaitteiden, mukaan lukien verkkosovittimien, kytkimien ja reitittimien, pakettien siirtämisen kuvaamiseen.

"SDN on muuttanut verkkoteollisuutta, ja P4 vie SDN:n seuraavalle tasolle tuomalla ohjelmoitavuuden reitittämiseen", sanoi Guru Parulkar, Open Networking Foundationin toiminnanjohtaja.

P4-kielen loi alun perin Googlen, Intelin, Microsoft Researchin, Barefootin, Princetonin ja Stanfordin insinöörejä ja tutkijoita. Tavoite oli yksinkertainen: luoda helppokäyttöinen kieli, jonka ohjelmistokehittäjä voisi oppia päivässä ja jonka avulla kuvataan tarkasti, kuinka paketteja lähetetään verkkojen välillä.

P4 oli alusta alkaen suunniteltu kohderiippumattomaksi (eli P4:llä kirjoitettu ohjelma voitiin kääntää muuttumattomana toimimaan useissa eri kohteissa, kuten ASIC:issa, FPGA:issa, CPU:issa, NPU:issa ja GPU:issa).

Kieli on myös protokollariippumaton (eli P4-ohjelma voi kuvata olemassa olevia standardiprotokollia tai sitä voidaan käyttää uusien mukautettujen osoitustilojen määrittämiseen).

Teollisuudessa P4:ää käytetään laiteohjelmointiin. Ehkä tulevaisuudessa Internet-RFC- ja IEEE-standardit sisältävät myös P4-määrityksen.

P4:ää voidaan käyttää sekä ohjelmoitavissa että kiinteästi toimivissa laitteissa. Sitä käytetään esimerkiksi tallentamaan tarkasti kytkimen liukuhihnan käyttäytyminen avoimen lähdekoodin SONiC-kytkinkäyttöjärjestelmän käyttämissä Switch Abstraction Interface (SAI) -sovellusliittymissä. P4:ää käytetään myös ONF Stratum -projektissa kuvaamaan kytkentäkäyttäytymistä useiden kiinteiden ja ohjelmoitavien laitteiden välillä.

Ensimmäistä kertaa kytkimien ja verkkosovittimien toiminnan kuvaaminen mahdollistaa tarkan suoritettavan mallin luomisen koko verkosta ennen käyttöönottoa. Suuret pilvipalveluntarjoajat voivat testata ja korjata verkkoa kokonaan ohjelmistojen avulla, mikä vähentää merkittävästi yhteentoimivuuden testaamiseen kuluvaa aikaa ja kustannuksia laboratoriossa ilman kalliita laitteistoja.

Käyttämällä P4:ää verkkolaitteiden toimittajat voivat odottaa yhteistä taustalla olevaa reitityskäyttäytymistä kaikissa tuotteissa, mikä mahdollistaa testiinfrastruktuurin uudelleenkäytön, yksinkertaistaa hallintaohjelmistojen kehitystä ja viime kädessä varmistaa yhteentoimivuuden.

Tietysti P4:llä voidaan kirjoittaa ohjelmia, jotka kuvaavat täysin uusia reititystapoja. Esimerkiksi P4:ää käytetään laajalti telemetriaan ja mittauksiin datakeskuksissa, yritysten ja palveluntarjoajien verkoissa.

Myös tutkijayhteisö on vahvistunut. Useat johtavat akateemiset verkottumistutkimusryhmät ovat julkaisseet jännittäviä uusia P4-ohjelmiin perustuvia sovelluksia, mukaan lukien kuormituksen tasapainotus, konsensusprotokollat ​​ja avainarvojen välimuisti. Uusi ohjelmointiparadigma luodaan, innovaatiot siirtyvät laitteistosta ohjelmistoon, jolloin monet odottamattomat, uudet ja nerokkaat ideat syntyvät.

Kehittäjäyhteisö on osallistunut merkittävästi koodin kehittämiseen, mukaan lukien kääntäjät, putkistot, käyttäytymismallit, API:t, testikehykset, sovellukset ja paljon muuta. Yrityksillä, kuten Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx ja ZTE, ovat omat kehittäjät; yliopistoista, mukaan lukien BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass ja USI; ja avoimen lähdekoodin projektit, kuten CORD, FD.io, OpenDaylight, ONOS, OvS, SAI ja Stratum, korostavat sitä tosiasiaa, että P4 on itsenäinen yhteisöprojekti.

Tyypillinen ohjaimien sukupolvi P4-kielelle:

P4 ohjelmointikieli

Sovellusnäkymät

P4 ohjelmointikieli
Koska kieli on tarkoitettu sovellusten reitittämiseen, vaatimuslista ja suunnitteluvaihtoehdot ovat erilaisia ​​yleiskäyttöisiin ohjelmointikieliin verrattuna. Kielen tärkeimmät ominaisuudet ovat:

  1. Riippumattomuus tavoitteiden toteuttamisesta;
  2. Käytettyjen protokollien riippumattomuus;
  3. Kentän uudelleenkonfiguroitavuus.

Riippumattomuus tavoitteiden toteuttamisesta

P4-ohjelmat on suunniteltu toteutuksesta riippumattomiksi, mikä tarkoittaa, että niitä voidaan kääntää useille erityyppisille suoritusmoottoreille, kuten yleiskäyttöisille prosessoreille, FPGA:ille, järjestelmäsiruille, verkkoprosessoreille ja ASIC:ille. Näitä erityyppisiä koneita kutsutaan P4-kohteiksi, ja jokainen kohde vaatii kääntäjän, joka muuntaa P4-lähdekoodin kohdekytkinmalliksi. Kääntäjä voidaan rakentaa kohdelaitteeseen, ulkoiseen ohjelmistoon tai jopa pilvipalveluun. Koska monet P4-ohjelmien alkuperäisistä kohteista olivat yksinkertaista pakettikytkentää, on hyvin yleistä kuulla termi "P4-kytkin", vaikka "P4-kohde" on tarkempi.

Käytettyjen protokollien riippumattomuus

P4 on protokollasta riippumaton. Tämä tarkoittaa, että kielellä ei ole natiivitukea yleisille protokollille, kuten IP, Ethernet, TCP, VxLAN tai MPLS. Sen sijaan P4-ohjelmoija kuvaa ohjelmassa tarvittavien protokollien otsikkomuodot ja kenttien nimet, jotka puolestaan ​​käännetty ohjelma ja kohdelaite tulkitsevat ja käsittelevät.

Kentän uudelleenkonfiguroitavuus

Protokollariippumattomuus ja abstrakti kielimalli mahdollistavat uudelleenkonfiguroitavuuden – P4-kohteiden pitäisi pystyä muuttamaan pakettien käsittelyä järjestelmän käyttöönoton jälkeen. Tämä ominaisuus on perinteisesti liitetty reitittämiseen yleiskäyttöisten prosessorien tai verkkosuorittimien kautta kiinteätoimisten integroitujen piirien sijaan.

Vaikka kielessä ei ole mitään, mikä estäisi tietyn protokollajoukon suorituskyvyn optimointia, nämä optimoinnit ovat kielen kirjoittajalle näkymättömiä ja voivat viime kädessä vähentää järjestelmän ja tavoitteiden joustavuutta ja niiden uudelleenkonfiguroitavuutta.

Nämä kielen ominaisuudet määrittelivät alun perin sen luojat keskittyen sen laajaan käyttöön verkkoinfrastruktuurissa.

Kieli on jo käytössä monissa yrityksissä:

1) Hyperscale-palvelinkeskukset;

Kiinalainen Tencent on maailman suurin sijoitusyhtiö ja yksi suurimmista riskipääomayrityksistä. Tencentin tytäryhtiöt sekä Kiinassa että muissa maissa ympäri maailmaa ovat erikoistuneet korkean teknologian liiketoiminnan eri osa-alueisiin, mukaan lukien erilaiset Internet-palvelut, tekoälyn ja elektronisen viihteen alan kehitys.

P4 ja ohjelmoitava reititys ovat edistyksellisiä teknologioita, joita käytetään yrityksen verkkoarkkitehtuurissa.

Yhtenä alullepanijoista Google on ylpeä voidessaan todeta P4:n nopean käyttöönoton verkkoteollisuudessa ja erityisesti datakeskusten arkkitehtonisessa suunnittelussa.

2) kaupalliset yhtiöt;

Goldman Sachs hyödyntää työskentelyä avoimen lähdekoodin yhteisön kanssa ja yhteisten standardien ja ratkaisujen kehittämistä verkkoinfrastruktuurin innovoimiseksi ja parempien ratkaisujen tarjoamiseksi asiakkaille.

3) Tuotanto;

Koko verkkoteollisuus hyötyisi P4:n kaltaisesta kielestä, joka määrittelee edelleenlähetyskäyttäytymisen yksilöllisesti. Cisco uskoo myös siirtävänsä tuotelinjansa käyttämään tätä kieltä.

Juniper Networks on sisällyttänyt P4:n ja P4 Runtimen useisiin tuotteisiin ja tarjoaa ohjelmallisen pääsyn Juniperin sulautettuun prosessoriin ja sen ohjelmistokoodiin.

Ruijie Networks tukee vahvasti P4:ää ja sen verkostoille tuomia etuja. P4:n avulla yritys voi luoda ja toimittaa luokkansa parhaita ratkaisuja laajalle asiakaskunnalle.

4) tietoliikenteen tarjoajat;

AT&T oli P4:n varhainen omaksuja, yksi ensimmäisistä, jotka käyttivät P4:ää määrittämään verkoissaan näkevän käyttäytymisen ja käyttämään P4-ohjelmoitavia edelleenlähetyslaitteita verkossaan.

Deutsche Telekomissa tätä kieltä käytetään tärkeimpien verkkotoimintojen prototyypeissä osana Access 4.0 -ohjelmaa.

5) Puolijohdeteollisuus;

Kielen ansiosta Barefoot pystyi toteuttamaan uuden paradigman ohjelmistoominaisuuksien toimittamiseen verkon reititystasolle.

Xilinx oli yksi P4.org:n perustajista ja osallistui aktiivisesti P4-kielen kehittämiseen ja toteutti sen FPGA-pohjaisiin ohjelmoitaviin alustoihin SmartNIC- ja NFV-laitteistoille ja julkaisi yhden ensimmäisistä P416-kääntäjistä osana SDNet-suunnittelua.

6) Ohjelmisto.

VMware uskoo, että P4 luo valtavaa energiaa, innovaatiota ja yhteisöllisyyttä, joka ajaa mielekästä ja tarpeellista muutosta verkossa. VMware on ollut osa tätä alan liikettä alusta asti, sillä uutta innovaatioaaltoa ohjaavat ohjelmistopohjaiset lähestymistavat, jotka laajentavat infrastruktuurin ominaisuuksia ja toteuttavat sen uusimmissa tuotteissa.

Näin ollen P4 on kohteista ja protokollista riippumaton ohjelmointikieli, jota teollisuus ja tiedemaailma käyttävät yksilöllisesti määrittämään pakettien reitityskäyttäytymistä ohjelmaksi, joka puolestaan ​​voidaan kääntää useille kohteille. Nykyään kohteita ovat laitteisto- ja ohjelmistokytkimet, hypervisor-kytkimet, NPU:t, GPU:t, FPGA:t, SmartNIC:t ja ASIC:t.

Kielen pääominaisuudet laajentavat merkittävästi sen sovellusaluetta ja varmistavat sen nopean käyttöönoton verkkoarkkitehtuureissa.

Aloitus

P4 on avoin projekti, kaikki asiaankuuluvat tiedot ovat verkkosivuilla P4.org

Tietovaraston linkki https://github.com/p4lang, josta saat esimerkkilähdekoodia ja opetusohjelmia.

Плагин Eclipselle P4-tuella, mutta voimme suositella P4 Studio Barefootilta.

P4 ohjelmointikieli

Katsotaanpa ytimen tärkeimpiä abstraktioita:

Otsikoiden määrittäminen - heidän avullaan määritetään protokollien otsikot.

Otsikon määritelmä määrittää:

  • kuvaus pakettimuodoista ja otsikkokenttien nimistä
  • kiinteät ja muuttuvat sallitut kentät

Esimerkiksi

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

Jäsentimet - heidän tehtävänsä on jäsentää otsikot.

Seuraava jäsentäjäesimerkki määrittää koneen lopullisen tilan siirtymisen yhdestä alkutilasta toiseen kahdesta lopputilasta:

P4 ohjelmointikieli

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

taulukot — sisältää koneen tilat, jotka yhdistävät käyttäjän avaimet toimintoihin. Aktiivisuus — kuvaus siitä, kuinka pakkausta tulee käsitellä.

Taulukot sisältävät tilat (määritelty hallintatasolla) pakettien edelleenlähettämistä varten, kuvaavat Match-Action -yksikköä

Paketit vastaavat:

  • Tarkka ottelu
  • Pisin etuliiteosuma (LPM)
  • Kolminkertainen vastaavuus (naamiointi)

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

Kaikki mahdolliset toimet on määriteltävä taulukoihin etukäteen.

Toiminnot koostuvat koodista ja tiedoista. Tiedot tulevat hallintatasolta (esim. IP-osoitteet/porttinumerot). Tietyt silmukattomat primitiivit voidaan määrittää suoraan toimintoon, mutta käskyjen määrän on oltava ennakoitavissa. Siksi toiminnot eivät voi sisältää silmukoita tai ehdollisia lausekkeita.

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 moduulit — toiminnot hakuavaimen luomiseksi, taulukosta hakemiseksi, toimien suorittamiseksi.

Tyypillinen esimerkki moduulista on esitetty kuvassa:

P4 ohjelmointikieli

Ohjaa virtausta — osoittaa järjestyksen, jossa Match-Action-moduuleja käytetään. Tämä on välttämätön ohjelma, joka määrittää korkean tason logiikan ja Match-Action -sekvenssin. Ohjauskulku linkittää kaikki objektit määrittämällä ohjaustason.

Ulkoiset esineet ovat erityisiä objekteja, joilla on selkeästi määritelty arkkitehtuuri ja API-rajapinnat. Esimerkiksi tarkistussumman laskenta, rekisterit, laskurit, laskurit 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
}

Metatiedot — kuhunkin pakettiin liittyvät tietorakenteet.

Metatietoja on kahdenlaisia:

  Muokatut metatiedot (tyhjä rakenne kaikille paketeille)
    Voit laittaa tänne mitä haluat
    Saatavilla koko putkilinjan ajan
    kätevä käyttää omiin tarkoituksiin, esimerkiksi paketin tiivisteen säilyttämiseen

  Sisäiset metatiedot - arkkitehtuurin tuottama
    Tuloportti ja lähtöportti määritellään tässä
    Aikaleima, jolloin paketti oli jonossa, jonon syvyys
    monilähetys hash / monilähetysjono
    Paketin prioriteetti, paketin tärkeys
    Lähtöportin määrittely (esim. lähtöjono)

P4 kääntäjä

P4-kääntäjä (P4C) luo:

  1. Datatason suoritusaika
  2. API koneen tilan hallintaan tietotasolla

P4 ohjelmointikieli

Esimerkki ohjelmistokytkimestä P4-kielellä

Lähdekoodit voi ladata arkistosta.

p4lang/p4c-bm: luo JSON-määritykset bmv2:lle
p4lang/bmv2: ohjelmistokytkin, joka ymmärtää bmv2-version JSON-kokoonpanot

Kuvassa on projektin kokoamiskaavio:

P4 ohjelmointikieli

Käsittelyt taulukoilla, lukurekistereillä, laskureilla:

  • 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ähdekoodi sisältää simple_switch_CLI-ohjelman, joka helpottaa ohjelmistokytkimen API:n käyttöä.

Voit ladata tämän ja muita esimerkkejä arkistosta.

P4 ohjelmointikieli

PS. Alkukesästä Intel allekirjoitti sopimuksen Barefoot Networksin ostamisesta vastatakseen nopeasti Hyperscale Cloud -käyttäjien tarpeisiin. Kuten Navin Shenoy (Intel Corporationin Data Center Groupin varatoimitusjohtaja ja johtaja) sanoi, tämä antaa Intelille mahdollisuuden tarjota suurempia työkuormia ja enemmän mahdollisuuksia datakeskusasiakkaille.

Henkilökohtaisen mielipiteeni mukaan emme saa unohtaa, että Intel on johtava FPGA-sirujen valmistaja ja sillä on erinomainen Quartus-ympäristö. Tämä tarkoittaa, että voimme odottaa, että Intelin saapuessa Barefoot ei ainoastaan ​​laajentaa tuotevalikoimaansa, vaan myös Quartus ja P4 Studio saavat vakavia päivityksiä ja lisäyksiä Toffino- ja Toffino 2 -sarjaan.

P4-yhteisön virallinen jäsen - yritys Tekijäryhmä.

Lähde: will.com

Lisää kommentti