P4 programski jezik

P4 programski jezik
P4 je programski jezik dizajniran za programiranje pravila usmjeravanja paketa. Za razliku od jezika opšte namene kao što je C ili Python, P4 je jezik specifičan za domen sa brojnim dizajnom optimizovanim za mrežno rutiranje.

P4 je jezik otvorenog koda koji licencira i održava neprofitna organizacija pod nazivom P4 Language Consortium. Također ga podržavaju Open Networking Foundation (ONF) i Linux Foundation (LF), dvije najveće krovne organizacije za projekte umrežavanja otvorenog koda.
Jezik je prvobitno skovan 2013. godine i opisan u SIGCOMM CCR dokumentu iz 2014. pod naslovom “Protocol Independent, Packet Routing Processor Programming”.

Od svog početka, P4 je eksponencijalno rastao i evoluirao, brzo postajući standard za opisivanje prijenosa paketa putem mrežnih uređaja, uključujući mrežne adaptere, prekidače i rutere.

“SDN je transformirao industriju umrežavanja, a P4 podiže SDN na sljedeći nivo donoseći programibilnost u rutiranje,” rekao je Guru Parulkar, izvršni direktor Open Networking Foundation.

P4 jezik je prvobitno kreirala grupa inženjera i istraživača iz Google-a, Intel-a, Microsoft Research-a, Barefoot-a, Princetona i Stanforda. Cilj je bio jednostavan: stvoriti jezik jednostavan za korištenje koji bi programer softvera mogao naučiti za jedan dan i koristiti za precizno opisivanje kako se paketi šalju preko mreža.

Od samog početka, P4 je dizajniran da bude nezavisan od cilja (tj. program napisan u P4 mogao bi se kompajlirati nepromijenjen za rad na raznim ciljevima kao što su ASIC, FPGA, CPU, NPU i GPU).

Jezik je također nezavisan od protokola (tj., P4 program može opisati postojeće standardne protokole ili se koristiti za specificiranje novih prilagođenih načina adresiranja).

U industriji se P4 koristi za programiranje uređaja. Možda će u budućnosti Internet-RFC i IEEE standardi takođe uključivati ​​P4 specifikaciju.

P4 se može koristiti i za programabilne i za uređaje sa fiksnom funkcijom. Na primjer, koristi se za precizno snimanje ponašanja cevovoda prekidača u API-jima interfejsa za apstrakciju prekidača (SAI) koje koristi SONiC switch OS otvorenog koda. P4 se također koristi u ONF Stratum projektu za opis ponašanja prebacivanja na različitim fiksnim i programabilnim uređajima.

Po prvi put, opisivanje ponašanja prekidača i mrežnih adaptera omogućava vam da kreirate tačan izvršni model cijele mreže prije implementacije. Veliki provajderi u oblaku mogu testirati i otklanjati greške na mreži u potpunosti koristeći softver, značajno smanjujući vrijeme i troškove testiranja interoperabilnosti u laboratoriji bez potrebe za skupim hardverom.

Koristeći P4, dobavljači mrežne opreme mogu očekivati ​​zajedničko ponašanje rutiranja u svim proizvodima, omogućavajući ponovno korištenje testne infrastrukture, pojednostavljujući razvoj softvera za upravljanje i na kraju osiguravajući interoperabilnost.

Naravno, P4 se može koristiti za pisanje programa koji opisuju potpuno nove načine rutiranja. Na primjer, P4 se široko koristi za telemetriju i mjerenja u podatkovnim centrima, poslovnim mrežama i mrežama provajdera usluga.

Istraživačka zajednica se također pojačala. Nekoliko vodećih akademskih istraživačkih grupa za umrežavanje objavilo je uzbudljive nove aplikacije zasnovane na P4 programima, uključujući balansiranje opterećenja, protokole konsenzusa i keširanje ključnih vrijednosti. Stvara se nova programska paradigma, inovacije se kreću sa hardvera na softver, omogućavajući da se pojave mnoge neočekivane, nove i genijalne ideje.

Zajednica programera dala je značajan doprinos razvoju koda, uključujući kompajlere, cevovode, modele ponašanja, API-je, testne okvire, aplikacije i još mnogo toga. Kompanije kao što su Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx i ZTE imaju posvećene programere; sa univerziteta uključujući BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass i USI; i projekti otvorenog koda uključujući CORD, FD.io, OpenDaylight, ONOS, OvS, SAI i Stratum ističu činjenicu da je P4 nezavisan projekat zajednice.

Tipična generacija kontrolera za jezik P4:

P4 programski jezik

Izgledi za prijavu

P4 programski jezik
Pošto je jezik namenjen za rutiranje aplikacija, lista zahteva i opcija dizajna je drugačija u poređenju sa programskim jezicima opšte namene. Glavne karakteristike jezika su:

  1. Nezavisnost od implementacije cilja;
  2. Nezavisnost korištenih protokola;
  3. Rekonfiguracija terena.

Nezavisnost od implementacije cilja

P4 programi su dizajnirani da budu nezavisni od implementacije, što znači da se mogu kompajlirati za mnoge različite tipove izvršnih mašina, kao što su procesori opšte namene, FPGA, sistem na čipovima, mrežni procesori i ASIC. Ovi različiti tipovi mašina su poznati kao P4 ciljevi, a svaki cilj zahteva kompajler da konvertuje P4 izvorni kod u model ciljnog prekidača. Kompajler se može ugraditi u ciljni uređaj, eksterni softver ili čak uslugu u oblaku. Budući da su mnogi od originalnih ciljeva za P4 programe bili za jednostavnu komutaciju paketa, vrlo je uobičajeno čuti izraz "P4 switch" iako je "P4 cilj" precizniji.

Nezavisnost korištenog(ih) protokola(a).

P4 je nezavisan od protokola. To znači da jezik nema izvornu podršku za uobičajene protokole kao što su IP, Ethernet, TCP, VxLAN ili MPLS. Umjesto toga, P4 programator opisuje formate zaglavlja i imena polja potrebnih protokola u programu, koji se zauzvrat tumače i obrađuju od strane kompajliranog programa i ciljnog uređaja.

Rekonfiguracija terena

Nezavisnost protokola i model apstraktnog jezika omogućavaju rekonfiguraciju—P4 ciljevi bi trebali biti u mogućnosti da mijenjaju obradu paketa nakon što se sistem implementira. Ova mogućnost se tradicionalno povezivala sa usmjeravanjem kroz procesore opće namjene ili mrežne procesore, a ne integrirana kola fiksne funkcije.

Iako ne postoji ništa u jeziku što bi spriječilo optimizaciju performansi određenog skupa protokola, ove optimizacije su nevidljive za autora jezika i u konačnici mogu smanjiti fleksibilnost sistema i ciljeva i njihovu rekonfiguraciju.

Ove karakteristike jezika prvobitno su postavili njegovi kreatori sa fokusom na njegovu široku upotrebu u mrežnoj infrastrukturi.

Jezik se već koristi u mnogim kompanijama:

1) Hyperscale data centri;

Kineska kompanija Tencent najveća je investicijska kompanija na svijetu i jedna od najvećih kompanija rizičnog kapitala. Tencentove podružnice, kako u Kini tako iu drugim zemljama širom svijeta, specijalizirane su za različite oblasti poslovanja visoke tehnologije, uključujući razne internetske usluge, razvoj u oblasti umjetne inteligencije i elektronske zabave.

P4 i programabilno rutiranje su napredne tehnologije koje se koriste u mrežnoj arhitekturi kompanije.

Kao jedan od inicijatora, Google s ponosom bilježi brzo usvajanje P4 u industriji umrežavanja, a posebno u arhitektonskom dizajnu centara podataka.

2) privredna društva;

Goldman Sachs koristi prednost rada sa zajednicom otvorenog koda i razvija zajedničke standarde i rješenja za inoviranje mrežne infrastrukture i pružanje boljih rješenja za klijente.

3) proizvodnja;

Cijela industrija umrežavanja imala bi koristi od jezika poput P4 koji jedinstveno definira ponašanje prosljeđivanja. Cisco takođe veruje u prenošenje svojih proizvodnih linija na ovaj jezik.

Juniper Networks je uključio P4 i P4 Runtime u brojne proizvode i pruža programski pristup ugrađenom Juniper procesoru i njegovom softverskom kodu.

Ruijie Networks snažno podržava P4 i prednosti koje donosi mrežama. Sa P4, kompanija može kreirati i isporučiti najbolja rješenja u klasi širokom spektru kupaca.

4) provajderi telekomunikacija;

AT&T je rano usvojio P4, jedan od prvih koji je koristio P4 za definiranje ponašanja koje želi vidjeti u svojim mrežama i koji je koristio P4 programabilne uređaje za prosljeđivanje na svojoj mreži.

U Deutsche Telekomu, jezik se koristi za prototip ključnih mrežnih funkcija kao dio programa Access 4.0.

5) industrija poluprovodnika;

Jezik je omogućio Barefoot-u da implementira novu paradigmu za isporuku softverskih mogućnosti na ravni mrežnog rutiranja.

Xilinx je bio jedan od osnivača P4.org i bio je aktivno uključen u razvoj jezika P4 i implementirao ga u FPGA-bazirane programabilne platforme za SmartNIC i NFV hardver, izdajući jedan od prvih P416 kompajlera kao dio SDNet dizajna.

6) Softver.

VMware vjeruje da P4 stvara ogromnu energiju, inovaciju i zajednicu koja pokreće značajnu i neophodnu transformaciju u mreži. VMware je dio ovog industrijskog pokreta od samog početka, budući da je novi val inovacija vođen pristupima zasnovanim na softveru koji proširuju infrastrukturne mogućnosti i implementiraju ih u najnovije proizvode.

Dakle, P4 je programski jezik nezavisan od cilja i protokola koji se koristi u industriji i akademiji za jedinstveno definiranje ponašanja usmjeravanja paketa kao programa, koji se zauzvrat može kompajlirati za više ciljeva. Danas mete uključuju hardverske i softverske prekidače, hipervizorske prekidače, NPU, GPU, FPGA, SmartNIC i ASIC.

Glavne karakteristike jezika značajno proširuju opseg njegove primjene i osiguravaju njegovu brzu implementaciju u mrežnim arhitekturama.

Prvi koraci

P4 je otvoren projekat, sve relevantne informacije nalaze se na web stranici P4.org

Link spremišta https://github.com/p4lang, gdje možete dobiti primjer izvornog koda i tutorijale.

Plagin za Eclipse sa podrškom za P4, ali možemo preporučiti P4 Studio od Bosonogi.

P4 programski jezik

Pogledajmo glavne apstrakcije kernela:

Definiranje zaglavlja — uz njihovu pomoć određuju se zaglavlja protokola.

Definicija zaglavlja specificira:

  • opis formata paketa i imena polja zaglavlja
  • fiksna i varijabilna dozvoljena polja

Na primjer

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

Parseri — njihov zadatak je da analiziraju naslove.

Sljedeći primjer parsera će odrediti prijelaz konačnog stanja mašine iz jednog početnog stanja u jedno od dva konačna stanja:

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

Stolovi — sadrže stanja mašine koja povezuju korisničke ključeve sa akcijama. Akcije — opis načina na koji treba manipulirati paketom.

Tabele sadrže stanja (definirana na nivou upravljanja) za prosljeđivanje paketa, opisuju jedinicu Match-Action

Paketi se podudaraju sa:

  • Tačno podudaranje
  • Najduže podudaranje prefiksa (LPM)
  • Trostruko podudaranje (maskiranje)

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

Sve moguće radnje moraju biti unaprijed definirane u tabelama.

Akcije se sastoje od koda i podataka. Podaci dolaze sa nivoa upravljanja (npr. IP adrese/brojevi portova). Određeni primitivi bez petlje mogu se specificirati direktno u akciji, ali broj instrukcija mora biti predvidljiv. Stoga, akcije ne mogu sadržavati petlje ili uslovne izraze.

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 moduli — radnje za kreiranje ključa za pretragu, pretraživanje u tabeli, izvođenje radnji.

Tipičan primjer modula prikazan je na slici:

P4 programski jezik

Kontrolni tok — označava redosled kojim se koriste moduli Match-Action. Ovo je imperativ program koji definira logiku visokog nivoa i sekvencu Match-Action. Kontrolni tok povezuje sve objekte definiranjem razine kontrole.

Vanjski objekti su specifični objekti sa jasno definisanom arhitekturom i API interfejsima. Na primjer, izračunavanje kontrolne sume, registri, brojači, brojači 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
}

Metapodaci — strukture podataka povezane sa svakim paketom.

Postoje 2 vrste metapodataka:

  Prilagođeni metapodaci (prazna struktura za sve pakete)
    Ovdje možete staviti šta god želite
    Dostupan u cijelom cjevovodu
    pogodan za korištenje u vlastite svrhe, na primjer, za pohranjivanje hash paketa

  Interni metapodaci - obezbjeđeni arhitekturom
    Ovdje su definirani ulazni port, izlazni port
    Vremenska oznaka kada je paket stavljen u red čekanja, dubina reda
    multicast hash / multicast red
    Prioritet paketa, važnost paketa
    Specifikacija izlaznog porta (npr. izlazni red)

P4 kompajler

P4 kompajler (P4C) generiše:

  1. Vrijeme izvođenja podatkovne ravni
  2. API za upravljanje stanjem mašine u podatkovnoj ravni

P4 programski jezik

Primjer softverskog prekidača na jeziku P4

Izvorni kodovi se mogu preuzeti iz spremišta.

p4lang/p4c-bm: kreira JSON konfiguraciju za bmv2
p4lang/bmv2: softverski prekidač koji razumije konfiguracije JSON verzije bmv2

Na slici je prikazan dijagram kompilacije projekta:

P4 programski jezik

Manipulacije sa tabelama, čitajući registri, brojači:

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


Izvorni kod sadrži program simple_switch_CLI za praktično korištenje API-ja za prebacivanje softvera.

Možete preuzeti ovaj i druge primjere iz spremišta.

P4 programski jezik

PS Početkom ovog ljeta, Intel je potpisao ugovor o kupovini Barefoot Networks u nastojanju da brzo zadovolji potrebe korisnika Hyperscale Cloud-a. Kao što je Navin Shenoy (izvršni potpredsjednik i generalni direktor Grupe za podatkovne centre u Intel Corporation) rekao, ovo će omogućiti Intelu da obezbijedi veće obim posla i više mogućnosti za korisnike data centara.

Po mom ličnom mišljenju, ne treba zaboraviti da je Intel lider u proizvodnji FPGA čipova i da ima odlično Quartus okruženje. To znači da možemo očekivati ​​da će dolaskom Intela, Barefoot ne samo proširiti svoju liniju proizvoda, već će Quartus i P4 Studio dobiti ozbiljna ažuriranja i dodatke Toffino i Toffino 2 liniji.

Zvanični član P4 zajednice - kompanija Faktorska grupa.

izvor: www.habr.com

Dodajte komentar