P4 programski jezik

P4 programski jezik
P4 je programski jezik, zasnovan za programiranje pravil usmerjanja paketov. Za razliko od splošnega jezika, kot sta C ali Python, je P4 domensko specifičen jezik s številnimi zasnovami, optimiziranimi za omrežno usmerjanje.

P4 je odprtokodni jezik, ki ga licencira in vzdržuje neprofitna organizacija, imenovana P4 Language Consortium. Podpirata ga tudi Open Networking Foundation (ONF) in Linux Foundation (LF), dve največji krovni organizaciji za odprtokodne omrežne projekte.
Jezik je bil prvotno skovan leta 2013 in opisan v dokumentu SIGCOMM CCR iz leta 2014 z naslovom »Programiranje procesorja za usmerjanje paketov, neodvisno od protokola«.

Od svojega začetka je P4 eksponentno rasel in se razvijal ter hitro postal standard za opis prenosa paketov z omrežnimi napravami, vključno z omrežnimi adapterji, stikali in usmerjevalniki.

"SDN je preoblikoval omrežno industrijo in P4 popelje SDN na višjo raven, tako da prinaša programljivost usmerjanja," je povedal Guru Parulkar, izvršni direktor Open Networking Foundation.

Jezik P4 je prvotno ustvarila skupina inženirjev in raziskovalcev iz podjetij Google, Intel, Microsoft Research, Barefoot, Princeton in Stanford. Cilj je bil preprost: ustvariti jezik, enostaven za uporabo, ki bi se ga lahko razvijalec programske opreme naučil v enem dnevu in uporabil za natančen opis, kako se paketi pošiljajo po omrežjih.

Od samega začetka je bil P4 zasnovan tako, da je neodvisen od cilja (tj. program, napisan v P4, je bilo mogoče nespremenjen prevesti za delovanje na različnih ciljih, kot so ASIC, FPGA, CPE, NPE in GPU).

Jezik je tudi neodvisen od protokola (tj. program P4 lahko opiše obstoječe standardne protokole ali se uporablja za določanje novih načinov naslavljanja po meri).

V industriji se P4 uporablja za programiranje naprav. Morda bodo v prihodnosti standardi Internet-RFC in IEEE vključevali tudi specifikacijo P4.

P4 se lahko uporablja tako za programabilne kot naprave s fiksno funkcijo. Uporablja se na primer za natančno beleženje obnašanja cevovoda stikala v API-jih vmesnika abstrakcije stikala (SAI), ki jih uporablja odprtokodni OS stikala SONiC. P4 se uporablja tudi v projektu ONF Stratum za opis preklopnega obnašanja med različnimi fiksnimi in programabilnimi napravami.

Prvič vam opis obnašanja stikala in omrežnih adapterjev omogoča ustvarjanje natančnega izvršljivega modela celotnega omrežja pred uvedbo. Veliki ponudniki oblakov lahko testirajo in odpravljajo napake v omrežju v celoti z uporabo programske opreme, kar znatno zmanjša čas in stroške testiranja interoperabilnosti v laboratoriju, ne da bi potrebovali drago strojno opremo.

Z uporabo P4 lahko prodajalci omrežne opreme pričakujejo skupno osnovno vedenje usmerjanja v vseh izdelkih, kar omogoča ponovno uporabo testne infrastrukture, poenostavi razvoj programske opreme za upravljanje in na koncu zagotovi interoperabilnost.

Seveda je P4 mogoče uporabiti za pisanje programov, ki opisujejo popolnoma nove načine usmerjanja. P4 se na primer pogosto uporablja za telemetrijo in meritve v podatkovnih centrih, omrežjih podjetij in ponudnikov storitev.

Okrepila se je tudi raziskovalna skupnost. Več vodilnih skupin za raziskovanje akademskih omrežij je objavilo vznemirljive nove aplikacije, ki temeljijo na programih P4, vključno z uravnoteženjem obremenitve, soglasnimi protokoli in predpomnjenjem ključnih vrednosti. Ustvarja se nova programska paradigma, inovacije se selijo s strojne opreme na programsko opremo, kar omogoča nastanek številnih nepričakovanih, novih in genialnih idej.

Skupnost razvijalcev je pomembno prispevala k razvoju kode, vključno s prevajalniki, cevovodi, vedenjskimi modeli, API-ji, testnimi okviri, aplikacijami in še več. Podjetja, kot so Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx in ZTE, imajo predane razvijalce; z univerz, vključno z BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass in USI; in odprtokodni projekti, vključno s CORD, FD.io, OpenDaylight, ONOS, OvS, SAI in Stratum, poudarjajo dejstvo, da je P4 neodvisen projekt skupnosti.

Tipična generacija krmilnikov za jezik P4:

P4 programski jezik

Možnosti uporabe

P4 programski jezik
Ker je jezik namenjen aplikacijam za usmerjanje, je seznam zahtev in možnosti oblikovanja drugačen v primerjavi s splošnimi programskimi jeziki. Glavne značilnosti jezika so:

  1. Neodvisnost od izvajanja cilja;
  2. neodvisnost uporabljenega(-ih) protokola(-ov);
  3. Rekonfigurabilnost polja.

Neodvisnost od ciljne izvedbe

Programi P4 so zasnovani tako, da so neodvisni od implementacije, kar pomeni, da jih je mogoče prevesti za veliko različnih tipov izvajalskih mehanizmov, kot so procesorji za splošne namene, FPGA, sistemi na čipih, omrežni procesorji in ASIC. Te različne vrste strojev so znane kot cilji P4 in vsak cilj zahteva prevajalnik za pretvorbo izvorne kode P4 v model ciljnega stikala. Prevajalnik je lahko vgrajen v ciljno napravo, zunanjo programsko opremo ali celo storitev v oblaku. Ker je bilo veliko prvotnih ciljev za programe P4 za preprosto preklapljanje paketov, je zelo pogosto slišati izraz "preklop P4", čeprav je "cilj P4" natančnejši.

Neodvisnost uporabljenega(-ih) protokola(-ov).

P4 je neodvisen od protokola. To pomeni, da jezik nima izvorne podpore za običajne protokole, kot so IP, Ethernet, TCP, VxLAN ali MPLS. Namesto tega programer P4 opiše formate glav in imena polj zahtevanih protokolov v programu, ki jih nato interpretirata in obdelata prevedeni program in ciljna naprava.

Rekonfigurabilnost polja

Neodvisnost protokola in abstraktni jezikovni model omogočata rekonfigurabilnost – cilji P4 bi morali imeti možnost spremeniti obdelavo paketov po uvedbi sistema. Ta zmožnost je bila tradicionalno povezana z usmerjanjem prek procesorjev za splošne namene ali omrežnih procesorjev in ne integriranih vezij s fiksno funkcijo.

Čeprav v jeziku ni ničesar, kar bi preprečilo optimizacijo delovanja določenega niza protokolov, so te optimizacije avtorju jezika nevidne in lahko na koncu zmanjšajo prilagodljivost sistema in cilje ter njihovo rekonfigurabilnost.

Te značilnosti jezika so sprva določili njegovi ustvarjalci s poudarkom na njegovi široki uporabi v omrežni infrastrukturi.

Jezik se že uporablja v številnih podjetjih:

1) Hyperscale podatkovni centri;

Kitajsko podjetje Tencent je največje investicijsko podjetje na svetu in eno največjih podjetij tveganega kapitala. Podružnice Tencenta, tako na Kitajskem kot v drugih državah po svetu, so specializirane za različna področja visokotehnološkega poslovanja, vključno z različnimi internetnimi storitvami, razvojem na področju umetne inteligence in elektronske zabave.

P4 in programabilno usmerjanje sta napredni tehnologiji, ki se uporabljata v omrežni arhitekturi podjetja.

Kot eden od začetnikov Google s ponosom opaža hitro sprejetje P4 v omrežni industriji in zlasti v arhitekturnem načrtovanju podatkovnih centrov.

2) gospodarske družbe;

Goldman Sachs izkorišča prednosti sodelovanja z odprtokodno skupnostjo ter razvijanje skupnih standardov in rešitev za inovacije omrežne infrastrukture in zagotavljanje boljših rešitev za stranke.

3) proizvodnja;

Celotna omrežna industrija bi imela koristi od jezika, kot je P4, ki edinstveno definira vedenje posredovanja. Cisco prav tako verjame v prenos svojih proizvodnih linij na uporabo tega jezika.

Juniper Networks je P4 in P4 Runtime vključil v številne izdelke in omogoča programski dostop do vgrajenega procesorja Juniper in njegove programske kode.

Ruijie Networks močno podpira P4 in prednosti, ki jih prinaša omrežjem. S P4 lahko podjetje ustvari in dostavi najboljše rešitve v svojem razredu širokemu krogu strank.

4) ponudniki telekomunikacij;

AT&T je bil prvi, ki je sprejel P4, eden prvih, ki je uporabil P4 za definiranje vedenja, ki ga je želel videti v svojih omrežjih, in za uporabo programirljivih posredovalnih naprav P4 v svojem omrežju.

Pri Deutsche Telekomu se jezik uporablja za prototip ključnih omrežnih funkcij kot del programa Access 4.0.

5) Polprevodniška industrija;

Jezik je Barefootu omogočil implementacijo nove paradigme za zagotavljanje zmogljivosti programske opreme na ravnini omrežnega usmerjanja.

Xilinx je bil eden od ustanoviteljev P4.org in je aktivno sodeloval pri razvoju jezika P4 in ga implementiral v programabilne platforme, ki temeljijo na FPGA, za strojno opremo SmartNIC in NFV ter izdal enega prvih prevajalnikov P416 kot del zasnove SDNet.

6) Programska oprema.

VMware verjame, da P4 ustvarja ogromno energije, inovacij in skupnosti, ki spodbujajo smiselno in potrebno transformacijo v omrežju. VMware je del tega industrijskega gibanja že od samega začetka, saj nov val inovacij poganjajo programsko zasnovani pristopi, ki razširjajo infrastrukturne zmogljivosti in jih implementirajo v najnovejše izdelke.

Tako je P4 programski jezik, neodvisen od ciljev in protokolov, ki ga uporabljajo industrija in akademski krogi za enolično definiranje vedenja pri usmerjanju paketov kot programa, ki se nato lahko sestavi za več ciljev. Danes cilji vključujejo strojna in programska stikala, hipervizorska stikala, NPE, GPE, FPGA, SmartNIC in ASIC.

Glavne značilnosti jezika bistveno razširijo obseg njegove uporabe in zagotavljajo njegovo hitro implementacijo v omrežne arhitekture.

Kje začeti

P4 je odprt projekt, vse pomembne informacije so na spletni strani P4.org

Povezava do skladišča https://github.com/p4lang, kjer lahko dobite primer izvorne kode in vadnice.

Плагин za Eclipse s podporo za P4, vendar ga lahko priporočamo Studio P4 od Barefoot.

P4 programski jezik

Oglejmo si glavne abstrakcije jedra:

Definiranje glav — z njihovo pomočjo se določijo glave protokola.

Definicija glave določa:

  • opis formatov paketov in imen polj glave
  • fiksna in spremenljiva dovoljena polja

Na primer

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

Razčlenjevalniki — njihova naloga je razčleniti naslove.

Naslednji primer razčlenjevalnika bo določil prehod končnega stanja stroja iz enega začetnega stanja v eno od dveh končnih stanj:

P4 programski jezik

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

Mize — vsebujejo strojna stanja, ki povezujejo uporabniške ključe z dejanji. Dejavnost — opis, kako je treba ravnati s tovorkom.

Tabele vsebujejo stanja (definirana na ravni upravljanja) za posredovanje paketov, opisujejo enoto Match-Action

Paketi se ujemajo z:

  • Natančno ujemanje
  • Najdaljše ujemanje predpone (LPM)
  • Trojno ujemanje (maskiranje)

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

Vsa možna dejanja morajo biti vnaprej opredeljena v tabelah.

Dejanja so sestavljena iz kode in podatkov. Podatki prihajajo z ravni upravljanja (npr. naslovi IP/številke vrat). Določene primitive brez zank je mogoče podati neposredno v dejanju, vendar mora biti število navodil predvidljivo. Zato dejanja ne morejo vsebovati nobenih zank ali pogojnih stavkov.

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

Moduli Match-Action — dejanja za ustvarjanje iskalnega ključa, iskanje v tabeli, izvajanje dejanj.

Tipičen primer modula je prikazan na sliki:

P4 programski jezik

Nadzor pretoka — označuje vrstni red, v katerem se uporabljajo moduli Match-Action. To je nujen program, ki definira logiko na visoki ravni in zaporedje ujemanja dejanj. Kontrolni tok povezuje vse objekte z definiranjem nivoja nadzora.

Zunanji predmeti so specifični objekti z jasno definirano arhitekturo in API vmesniki. Na primer izračun kontrolne vsote, registri, števci, števci itd.

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
}

Metapodatki — podatkovne strukture, povezane z vsakim paketom.

Obstajata dve vrsti metapodatkov:

  Metapodatki po meri (prazna struktura za vse pakete)
    Tukaj lahko postavite, kar želite
    Na voljo v celotnem cevovodu
    priročno za uporabo za lastne namene, na primer za shranjevanje zgoščene vrednosti paketa

  Notranji metapodatki – zagotavlja jih arhitektura
    Tu so definirana vhodna in izhodna vrata
    Časovni žig, ko je bil paket v čakalni vrsti, globina čakalne vrste
    multicast hash / multicast čakalna vrsta
    Prednost paketa, pomembnost paketa
    Specifikacija izhodnih vrat (npr. izhodna čakalna vrsta)

P4 prevajalnik

Prevajalnik P4 (P4C) ustvari:

  1. Čas izvajanja podatkovne ravnine
  2. API za upravljanje stanja stroja v podatkovni ravnini

P4 programski jezik

Primer programskega stikala v jeziku P4

Izvorne kode je mogoče prenesti iz repozitorija.

p4lang/p4c-bm: ustvari konfiguracijo JSON za bmv2
p4lang/bmv2: programsko stikalo, ki razume konfiguracije JSON različice bmv2

Slika prikazuje diagram kompilacije projekta:

P4 programski jezik

Manipulacije s tabelami, bralni registri, števci:

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


Izvorna koda vsebuje program simple_switch_CLI za priročno uporabo API-ja programskega stikala.

Ta in druge primere lahko prenesete iz repozitorija.

P4 programski jezik

PS V začetku tega poletja je Intel podpisal pogodbo o nakupu Barefoot Networks, da bi hitro zadovoljil potrebe uporabnikov Hyperscale Cloud. Kot je dejal Navin Shenoy (izvršni podpredsednik in generalni direktor skupine podatkovnih centrov pri Intel Corporation), bo to Intelu omogočilo, da zagotovi večje delovne obremenitve in več priložnosti za stranke podatkovnih centrov.

Po mojem osebnem mnenju ne smemo pozabiti, da je Intel vodilni v proizvodnji čipov FPGA in ima odlično okolje Quartus. To pomeni, da lahko pričakujemo, da bo Barefoot s prihodom Intela ne samo razširil svojo linijo izdelkov, ampak bosta Quartus in P4 Studio deležna resnih posodobitev in dopolnitev linij Toffino in Toffino 2.

Uradni član skupnosti P4 - podjetje Faktorska skupina.

Vir: www.habr.com

Dodaj komentar