P4 programski jezik

P4 programski jezik
P4 je programski jezik dizajniran za programiranje pravila usmjeravanja paketa. Za razliku od jezika opće namjene kao što su C ili Python, P4 je jezik specifičan za domenu s nizom dizajna optimiziranih za mrežno usmjeravanje.

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 mrežne projekte otvorenog koda.
Jezik je izvorno skovan 2013. i opisan u dokumentu SIGCOMM CCR iz 2014. pod naslovom “Programiranje procesora neovisno o protokolu, paketno usmjeravanje”.

Od svog početka, P4 je eksponencijalno rastao i razvijao se, brzo postavši standard za opisivanje prijenosa paketa putem mrežnih uređaja, uključujući mrežne adaptere, preklopnike i usmjerivače.

"SDN je transformirao mrežnu industriju, a P4 podiže SDN na višu razinu dovodeći programabilnost u usmjeravanje", rekao je Guru Parulkar, izvršni direktor Open Networking Foundation.

Jezik P4 izvorno je stvorila grupa inženjera i istraživača iz Googlea, Intela, Microsoft Researcha, Barefoota, Princetona i Stanforda. Cilj je bio jednostavan: stvoriti jezik jednostavan za korištenje koji bi razvojni programer mogao naučiti u jednom danu i koristiti za točan opis kako se paketi šalju preko mreža.

Od samog početka, P4 je dizajniran da bude neovisan o cilju (tj. program napisan u P4 mogao se kompajlirati nepromijenjen za rad na različitim ciljevima kao što su ASIC-ovi, FPGA-ovi, CPU-i, NPU-i i GPU-ovi).

Jezik je također neovisan o protokolu (tj. P4 program može opisati postojeće standardne protokole ili se koristiti za određivanje 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đer uključivati ​​P4 specifikaciju.

P4 se može koristiti i za programabilne i za uređaje s fiksnom funkcijom. Na primjer, koristi se za točno bilježenje ponašanja cjevovoda prekidača u API-jima sučelja apstrakcije prekidača (SAI) koje koristi OS otvorenog koda SONiC prekidača. P4 se također koristi u projektu ONF Stratum za opisivanje ponašanja prebacivanja preko raznih fiksnih i programabilnih uređaja.

Po prvi put, opisivanje ponašanja preklopnika i mrežnih adaptera omogućuje vam stvaranje točnog izvršnog modela cijele mreže prije postavljanja. Veliki pružatelji usluga u oblaku mogu testirati i otklanjati greške u mreži u potpunosti pomoću softvera, značajno smanjujući vrijeme i troškove testiranja interoperabilnosti u laboratoriju bez potrebe za skupim hardverom.

Korištenjem P4, prodavači mrežne opreme mogu očekivati ​​zajedničko osnovno ponašanje usmjeravanja u svim proizvodima, dopuštajući ponovnu upotrebu testne infrastrukture, pojednostavljujući razvoj softvera za upravljanje i u konačnici osiguravajući interoperabilnost.

Naravno, P4 se može koristiti za pisanje programa koji opisuju potpuno nove načine usmjeravanja. Na primjer, P4 se široko koristi za telemetriju i mjerenja u podatkovnim centrima, poduzećima i mrežama pružatelja usluga.

Istraživačka zajednica također se pojačala. Nekoliko vodećih istraživačkih skupina za akademsko umrežavanje objavilo je uzbudljive nove aplikacije temeljene na P4 programima, uključujući balansiranje opterećenja, konsenzusne protokole i predmemoriju ključnih vrijednosti. Stvara se nova paradigma programiranja, inovacije se sele s hardvera na softver, što omogućuje pojavu mnogih neočekivanih, novih i genijalnih ideja.

Zajednica programera dala je značajan doprinos razvoju koda, uključujući prevoditelje, cjevovode, modele ponašanja, API-je, okvire za testiranje, aplikacije i još mnogo toga. Tvrtke 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 sveučilišta 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 neovisni projekt zajednice.

Tipična generacija kontrolera za jezik P4:

P4 programski jezik

Izgledi primjene

P4 programski jezik
Budući da je jezik namijenjen aplikacijama za usmjeravanje, popis zahtjeva i opcija dizajna drugačiji je u usporedbi s programskim jezicima opće namjene. Glavne karakteristike jezika su:

  1. Neovisnost o provedbi cilja;
  2. Neovisnost korištenog(ih) protokola(a);
  3. Mogućnost rekonfiguracije polja.

Neovisnost o provedbi cilja

P4 programi dizajnirani su da budu neovisni o implementaciji, što znači da se mogu kompajlirati za mnoge različite vrste izvršnih motora, kao što su procesori opće namjene, FPGA, sustavi na čipu, mrežni procesori i ASIC-ovi. Ove različite vrste strojeva poznate su kao P4 ciljevi, a svaki cilj zahtijeva kompajler za pretvaranje P4 izvornog koda u ciljni model preklopnika. Kompajler se može ugraditi u ciljni uređaj, vanjski softver ili čak uslugu u oblaku. Budući da su mnogi izvorni ciljevi za P4 programe bili za jednostavno prebacivanje paketa, vrlo je uobičajeno čuti izraz "P4 prekidač" iako je "P4 cilj" točniji.

Neovisnost korištenog protokola

P4 je neovisan o protokolu. To znači da jezik nema izvornu podršku za uobičajene protokole kao što su IP, Ethernet, TCP, VxLAN ili MPLS. Umjesto toga, programator P4 opisuje formate zaglavlja i nazive polja potrebnih protokola u programu, koje zauzvrat tumače i obrađuju kompajlirani program i ciljni uređaj.

Mogućnost rekonfiguracije polja

Neovisnost o protokolu i apstraktni jezični model dopuštaju rekonfigurabilnost—P4 ciljevi trebali bi moći promijeniti obradu paketa nakon što se sustav postavi. Ova se mogućnost tradicionalno povezivala s usmjeravanjem kroz procesore opće namjene ili mrežne procesore, a ne integrirane krugove s fiksnom funkcijom.

Iako u jeziku ne postoji ništa što bi spriječilo optimizaciju performansi određenog skupa protokola, te su optimizacije nevidljive autoru jezika i mogu u konačnici smanjiti fleksibilnost sustava i ciljeva te njihovu rekonfigurabilnost.

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

Jezik se već koristi u mnogim tvrtkama:

1) Hyperscale podatkovni centri;

Kineska tvrtka Tencent najveća je investicijska kompanija na svijetu i jedna od najvećih tvrtki rizičnog kapitala. Podružnice Tencenta, kako u Kini tako i u drugim zemljama diljem svijeta, specijalizirane su za različita područja visokotehnološkog poslovanja, uključujući razne internetske usluge, razvoj na području umjetne inteligencije i elektroničke zabave.

P4 i programabilno usmjeravanje su napredne tehnologije koje se koriste u mrežnoj arhitekturi tvrtke.

Kao jedan od začetnika, Google s ponosom primjećuje brzo usvajanje P4 u industriji umrežavanja, a posebno u arhitektonskom dizajnu podatkovnih centara.

2) trgovačka društva;

Goldman Sachs koristi prednosti rada sa zajednicom otvorenog izvornog koda i razvoja zajedničkih standarda i rješenja za inoviranje mrežne infrastrukture i pružanje boljih rješenja za klijente.

3) Proizvodnja;

Cijela bi mrežna industrija imala koristi od jezika poput P4 koji jedinstveno definira ponašanje prosljeđivanja. Cisco također vjeruje u prijenos svojih linija proizvoda na korištenje ovog jezika.

Juniper Networks je uključio P4 i P4 Runtime u brojne proizvode i omogućuje programski pristup Juniper ugrađenom procesoru i njegovom softverskom kodu.

Ruijie Networks snažno podržava P4 i prednosti koje on donosi mrežama. Uz P4, tvrtka može stvoriti i isporučiti rješenja najbolja u klasi širokom rasponu kupaca.

4) davatelji telekomunikacijskih usluga;

AT&T je bio rani usvojitelj P4, jedan od prvih koji je koristio P4 za definiranje ponašanja koje je želio vidjeti u svojim mrežama i za korištenje programabilnih uređaja za prosljeđivanje P4 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 poluvodiča;

Jezik je omogućio Barefootu da implementira novu paradigmu za isporuku softverskih mogućnosti u ravninu mrežnog usmjeravanja.

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

6) Softver.

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

Dakle, P4 je programski jezik neovisan o cilju i protokolu koji se koristi u industriji i akademskoj zajednici za jedinstveno definiranje ponašanja paketnog usmjeravanja kao programa, koji se pak može kompajlirati za više ciljeva. Danas mete uključuju hardverske i softverske sklopke, hipervizorske sklopke, NPU-ove, GPU-ove, FPGA-ove, SmartNIC-ove i ASIC-ove.

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

Početak

P4 je otvoreni projekt, sve relevantne informacije nalaze se na web stranici P4.org

Veza repozitorija https://github.com/p4lang, gdje možete dobiti primjere izvornog koda i upute.

Uključiti za Eclipse s podrškom za P4, ali možemo preporučiti Studio P4 od Bosih nogu.

P4 programski jezik

Pogledajmo glavne apstrakcije kernela:

Definiranje zaglavlja — pomoću njih se određuju zaglavlja protokola.

Definicija zaglavlja specificira:

  • opis formata paketa i imena polja zaglavlja
  • fiksna i promjenjiva dopuštena 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 — zadatak im je analizirati naslove.

Sljedeći primjer parsera odredit će prijelaz konačnog stanja stroja iz jednog početnog stanja u jedno od dva završ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 stroja koja povezuju korisničke ključeve s akcijama. Djelatnost — opis načina rukovanja paketom.

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

Paketi se podudaraju prema:

  • Točno podudaranje
  • Najdulje podudaranje prefiksa (LPM)
  • Trostruko podudaranje (maskiranje)

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

Sve moguće akcije moraju se unaprijed definirati u tablicama.

Akcije se sastoje od koda i podataka. Podaci dolaze s razine upravljanja (npr. IP adrese/brojevi portova). Određene primitive bez petlji mogu se specificirati izravno u akciji, ali broj instrukcija mora biti predvidljiv. Stoga akcije ne mogu sadržavati nikakve petlje ili uvjetne naredbe.

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 stvaranje ključa za pretraživanje, pretraživanje u tablici, izvođenje radnji.

Tipičan primjer modula prikazan je na slici:

P4 programski jezik

Kontrola protoka — označava redoslijed kojim se koriste Match-Action moduli. Ovo je imperativni program koji definira logiku visoke razine i Match-Action sekvencu. Kontrolni tok povezuje sve objekte definiranjem razine kontrole.

Vanjski objekti su specifični objekti s jasno definiranom arhitekturom i API sučeljima. Na primjer, izračun 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
}

metapodataka — podatkovne strukture povezane sa svakim paketom.

Postoje 2 vrste metapodataka:

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

  Interni metapodaci - osigurava arhitektura
    Ovdje su definirani ulazni i izlazni port
    Vremenska oznaka kada je paket stavljen u red čekanja, dubina reda čekanja
    multicast hash / multicast red čekanja
    Prioritet paketa, važnost paketa
    Specifikacija izlaznog priključka (npr. izlazni red čekanja)

P4 kompajler

P4 kompajler (P4C) generira:

  1. Vrijeme izvođenja podatkovne ravnine
  2. API za upravljanje stanjem stroja u podatkovnoj ravnini

P4 programski jezik

Primjer softverskog prekidača u P4 jeziku

Izvorni kodovi mogu se preuzeti iz repozitorija.

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

Slika prikazuje dijagram kompilacije projekta:

P4 programski jezik

Manipulacije s tablicama, čitanje registara, brojača:

  • 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čnu upotrebu API-ja softverskog prekidača.

Ovaj i druge primjere možete preuzeti iz repozitorija.

P4 programski jezik

PS Početkom ljeta Intel je potpisao ugovor o kupnji Barefoot Networksa u nastojanju da brzo zadovolji potrebe korisnika Hyperscale Clouda. Kao što je rekao Navin Shenoy (izvršni potpredsjednik i generalni direktor Grupe podatkovnih centara u Intel Corporation), ovo će omogućiti Intelu da pruži veća radna opterećenja i više mogućnosti za korisnike podatkovnih centara.

Po mom osobnom mišljenju, ne treba zaboraviti da je Intel lider u proizvodnji FPGA čipova i da ima izvrsno 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 i Quartus i P4 Studio dobiti ozbiljna ažuriranja i dodatke Toffino i Toffino 2 liniji.

Službeni član P4 zajednice - tvrtka Grupa faktora.

Izvor: www.habr.com

Dodajte komentar