P4 programlingvo

P4 programlingvo
P4 estas programlingvo dizajnita por programi pakaĵetajn vojregulojn. Male al ĝeneraluzebla lingvo kiel ekzemple C aŭ Python, P4 estas domajna-specifa lingvo kun kelkaj dezajnoj optimumigitaj por retvojigo.

P4 estas malfermfonta lingvo licencita kaj prizorgata de neprofitcela organizo nomata P4 Lingvo-Konsorcio. Ĝi ankaŭ estas subtenata de la Open Networking Foundation (ONF) kaj la Linux Foundation (LF), du el la plej grandaj tegmentaj organizoj por malfermfontaj retprojektoj.
La lingvo estis origine kreita en 2013 kaj priskribita en SIGCOMM CCR-artikolo de 2014 titolita "Protokolo Sendependa, Programado pri Pakaĵeto-Procesoro."

Ekde ĝia komenco, P4 kreskis kaj evoluis eksponente, rapide iĝante normo por priskribi la dissendon de pakaĵoj per retaj aparatoj, inkluzive de retadaptiloj, ŝaltiloj kaj enkursigiloj.

"SDN transformis la retan industrion, kaj P4 portas SDN al la sekva nivelo alportante programeblecon al vojigo," diris Guru Parulkar, plenuma direktoro de la Open Networking Foundation.

La lingvo P4 estis origine kreita de grupo de inĝenieroj kaj esploristoj de Google, Intel, Microsoft Research, Barefoot, Princeton kaj Stanfordo. La celo estis simpla: krei facile uzeblan lingvon, kiun programisto povus lerni en tago kaj uzi por precize priskribi kiel pakaĵetoj estas senditaj tra retoj.

De la komenco mem, P4 estis dizajnita por esti celo sendependa (t.e. programo skribita en P4 povus esti kompilita senŝanĝa por funkcii per gamo da celoj kiel ekzemple ASICoj, FPGAoj, CPUoj, NPUoj, kaj GPUoj).

La lingvo ankaŭ estas protokolo sendependa (t.e., P4-programo povas priskribi ekzistantajn normajn protokolojn aŭ esti uzita por specifi novajn specialadaptitajn adresreĝimojn).

En industrio, P4 estas uzata por aparato programado. Eble estonte Interreto-RFC kaj IEEE-normoj ankaŭ inkluzivos la P4-specifon.

P4 povas esti uzata por kaj programeblaj kaj fiksaj funkciaj aparatoj. Ekzemple, ĝi estas uzata por precize registri ŝaltilduktokonduton en la Switch Abstraction Interface (SAI) APIoj uzataj de la malfermfonta SONiC-ŝaltilo OS. P4 ankaŭ estas uzita en la ONF Stratum-projekto por priskribi ŝanĝan konduton tra gamo da fiksaj kaj programeblaj aparatoj.

Por la unua fojo, priskribi la konduton de la ŝaltilo kaj retaj adaptiloj permesas krei precizan plenumeblan modelon de la tuta reto antaŭ deplojo. Grandaj nubaj provizantoj povas testi kaj sencimigi la reton tute uzante programaron, signife reduktante la tempon kaj koston de kunfunkciebleco-testado en la laboratorio sen postulado de multekosta aparataro.

Uzante P4, vendistoj de retaj ekipaĵoj povas atendi oftan subestas envojigkonduton tra ĉiuj produktoj, permesante reuzon de testa infrastrukturo, simpligante administradprogramaran disvolviĝon kaj finfine certigante kunfunkcieblecon.

Kompreneble, P4 povas esti uzata por skribi programojn, kiuj priskribas tute novajn manierojn de vojigo. Ekzemple, P4 estas vaste uzata por telemetrio kaj mezuradoj en datencentroj, entreprenoj kaj teleliverantaj retoj.

La esplorkomunumo ankaŭ ekpaŝis. Pluraj gvidaj akademiaj retaj esplorgrupoj publikigis ekscitajn novajn aplikojn bazitajn sur P4-programoj, inkluzive de ŝarĝoekvilibro, konsentaj protokoloj kaj ŝlosilvalora kaŝmemoro. Nova programa paradigmo estas kreita, novigo moviĝas de aparataro al programaro, permesante aperi multajn neatenditajn, novajn kaj spritajn ideojn.

La programista komunumo faris signifajn kontribuojn al koda evoluo, inkluzive de kompililoj, duktoj, kondutismaj modeloj, APIoj, testaj kadroj, aplikoj kaj pli. Firmaoj kiel Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx, kaj ZTE havas dediĉitajn programistojn; de universitatoj inkluzive de BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanfordo, Technion, Tsinghua, UMass, kaj USI; kaj malfermfontaj projektoj inkluzive de CORD, FD.io, OpenDaylight, ONOS, OvS, SAI kaj Stratum reliefigas la fakton, ke P4 estas sendependa komunuma projekto.

Tipa generacio de regiloj por la P4-lingvo:

P4 programlingvo

Aplikaj perspektivoj

P4 programlingvo
Ĉar la lingvo estas celita por vojigo de aplikoj, la listo de postuloj kaj dezajnelektoj estas malsama kompare al ĝeneraluzeblaj programlingvoj. La ĉefaj trajtoj de la lingvo estas:

  1. Sendependeco de cela efektivigo;
  2. Sendependeco de la uzata(j) protokolo(j);
  3. Kampa reagordeblo.

Sendependeco de cela efektivigo

P4-programoj estas dizajnitaj por esti efektivigo sendependaj, signifante ke ili povas esti kompilitaj por multaj malsamaj specoj de ekzekutmotoroj, kiel ekzemple ĝeneraluzeblaj procesoroj, FPGAoj, sistemo-sur-blatoj, retprocesoroj, kaj ASICoj. Tiuj malsamaj specoj de maŝinoj estas konataj kiel P4-celoj, kaj ĉiu celo postulas kompililon konverti la P4 fontkodon en celŝaltilmodelon. La kompililo povas esti konstruita en la cela aparato, ekstera programaro, aŭ eĉ nuba servo. Ĉar multaj el la originaj celoj por P4-programoj estis por simpla pakaĵetŝanĝo, estas tre ofte aŭdi la esprimon "P4-ŝaltilo" kvankam "P4-celo" estas pli preciza.

Sendependeco de la uzata(j) protokolo(j).

P4 estas protokolo sendependa. Ĉi tio signifas, ke la lingvo ne havas denaskan subtenon por oftaj protokoloj kiel IP, Ethernet, TCP, VxLAN aŭ MPLS. Anstataŭe, la P4-programisto priskribas la kapformatojn kaj kamponomojn de la postulataj protokoloj en la programo, kiuj siavice estas interpretitaj kaj prilaboritaj de la kompilita programo kaj la cela aparato.

Kampa reagordeblo

La protokola sendependeco kaj abstrakta lingvomodelo permesas reagordeblon - P4-celoj devus povi ŝanĝi pakaĵetpretigon post kiam la sistemo estas deplojita. Tiu kapablo estis tradicie asociita kun vojigo tra ĝeneraluzeblaj procesoroj aŭ retprocesoroj prefere ol fiks-funkciaj integraj cirkvitoj.

Kvankam estas nenio en la lingvo, kiu malhelpus la optimumigon de la agado de aparta aro de protokoloj, ĉi tiuj optimumigoj estas nevideblaj por la lingvoaŭtoro kaj povas finfine redukti la flekseblecon de la sistemo kaj celoj kaj ilian reagordeblon.

Tiuj karakterizaĵoj de la lingvo estis komence fiksitaj fare de ĝiaj kreintoj kun fokuso sur ĝia ĝeneraligita uzo en retinfrastrukturo.

La lingvo jam estas uzata en multaj kompanioj:

1) Hyperscale datumcentroj;

La ĉina kompanio Tencent estas la plej granda investa kompanio en la mondo kaj unu el la plej grandaj entreprenoj pri riskkapitalo. La filioj de Tencent, kaj en Ĉinio kaj en aliaj landoj ĉirkaŭ la mondo, specialiĝas pri diversaj areoj de altteknologia komerco, inkluzive de diversaj Interretaj servoj, evoluoj en la kampo de artefarita inteligenteco kaj elektronika distro.

P4 kaj programebla vojigo estas altnivelaj teknologioj, kiuj estas uzataj en la reto-arkitekturo de la firmao.

Kiel unu el la kreintoj, Google fieras rimarki la rapidan adopton de P4 en la interkonekta industrio kaj precipe en la arkitektura dezajno de datumcentroj.

2) Komercaj kompanioj;

Goldman Sachs utiligas labori kun la malfermkoda komunumo kaj disvolvi komunajn normojn kaj solvojn por novigi retan infrastrukturon kaj provizi pli bonajn solvojn por klientoj.

3) Produktado;

La tuta interkonekta industrio profitus de lingvo kiel P4, kiu unike difinas sendokonduton. Cisco ankaŭ kredas translokigi siajn produktajn liniojn por uzi ĉi tiun lingvon.

Juniper Networks inkludis P4 kaj P4 Runtime en kelkaj produktoj, kaj disponigas programan aliron al la Juniper enigita procesoro kaj ĝia softvarkodo.

Ruijie Networks estas forta subtenanto de P4 kaj la avantaĝoj kiujn ĝi alportas al retoj. Kun P4, la kompanio povas krei kaj liveri plej bonajn solvojn al larĝa gamo de klientoj.

4) Telekomunikadaj provizantoj;

AT&T estis frua adoptanto de P4, unu el la unuaj se temas pri uzi P4 por difini la konduton, kiun ĝi volis vidi en siaj retoj, kaj uzi P4 programeblajn plusendajn aparatojn sur sia reto.

Ĉe Deutsche Telekom, la lingvo estas uzata por prototipi ŝlosilajn retfunkciojn kiel parto de la programo Access 4.0.

5) Semikondukta industrio;

La lingvo ebligis Barefoot efektivigi novan paradigmon por liverado de softvarkapabloj al la reto-vojigaviadilo.

Xilinx estis unu el la fondintoj de P4.org kaj estis aktive implikita en la evoluo de la P4-lingvo kaj efektivigis ĝin en FPGA-bazitajn programeblajn platformojn por SmartNIC kaj NFV-hardvaro, liberigante unu el la unuaj P416-kompililoj kiel parto de la SDNet-dezajno.

6) Programaro.

VMware opinias, ke P4 kreas enorman energion, novigon kaj komunumon, kiuj kondukas signifan kaj necesan transformon en la reto. VMware estis parto de ĉi tiu industria movado ekde la komenco, ĉar nova ondo de novigado estas pelita de programaro-bazitaj aliroj, kiuj etendas infrastrukturajn kapablojn kaj efektivigas ĝin en la plej novaj produktoj.

Tiel, P4 estas cel-sendependa kaj protokol-sendependa programlingvo kiu estas uzita fare de industrio kaj akademiularo por unike difini pakaĵetan vojigkonduton kiel programon, kiu en victurno povas esti kompilita por multoblaj celoj. Hodiaŭ, celoj inkluzivas aparataron kaj programajn ŝaltilojn, hipervizierajn ŝaltilojn, NPU-ojn, GPU-ojn, FPGA-ojn, SmartNIC-ojn kaj ASIC-ojn.

La ĉefaj trajtoj de la lingvo signife vastigas la amplekson de ĝia apliko kaj certigas ĝian rapidan efektivigon en retaj arkitekturoj.

akiranta Komencita

P4 estas malfermita projekto, ĉiuj koncernaj informoj estas en la retejo P4.org

Deponejo ligilo https://github.com/p4lang, kie vi povas akiri ekzemplon fontkodon kaj lernilojn.

Konekti por Eclipse kun P4-subteno, sed ni povas rekomendi P4 Studio el Nudpiede.

P4 programlingvo

Ni rigardu la ĉefajn abstraktaĵojn de la kerno:

Difinante Kapojn — kun ilia helpo, protokolaj kaplinioj estas determinitaj.

La kapdifino specifas:

  • priskribo de pakaj formatoj kaj kapnomoj de kampoj
  • fiksaj kaj variaj permesitaj kampoj

Ekzemple

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

Analiziloj — ilia tasko estas analizi la titolojn.

La sekva analizilo ekzemplo determinos la transiron de la fina stato de la maŝino de unu komenca stato al unu el du finaj statoj:

P4 programlingvo

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

Tabloj — enhavas maŝinajn ŝtatojn ligantajn uzantŝlosilojn kun agoj. Agoj — priskribo de kiel la pakaĵo estu manipulita.

La tabeloj enhavas ŝtatojn (difinitajn ĉe la administra nivelo) por pakaĵeto, priskribas la Match-Action-unuon

Pakoj estas egalitaj per:

  • Ĝuste kongruo
  • Plej Longa Prefiksa Matĉo (LPM)
  • Triobla kongruo (maskado)

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

Ĉiuj eblaj agoj devas esti difinitaj en tabeloj antaŭe.

Agoj konsistas el kodo kaj datumoj. La datumoj venas de la administra nivelo (ekz. IP-adresoj/havennombroj). Certaj, buklo-liberaj primitivuloj povas esti precizigitaj rekte en la ago, sed la nombro da instrukcioj devas esti antaŭvidebla. Tial, agoj ne povas enhavi iujn ajn buklojn aŭ kondiĉajn deklarojn.

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-Ago-moduloj — agoj por krei serĉŝlosilon, serĉi en tabelo, plenumi agojn.

Tipa ekzemplo de modulo estas montrita en la figuro:

P4 programlingvo

Kontrolu fluon — indikas la sinsekvon en kiu Match-Action-moduloj estas uzataj. Ĉi tio estas imperativa programo, kiu difinas la altnivelan logikon kaj Match-Ago-sekvencon. La kontrolfluo ligas ĉiujn objektojn difinante la nivelon de kontrolo.

Eksteraj objektoj estas specifaj objektoj kun klare difinita arkitekturo kaj API-interfacoj. Ekzemple, ĉeksumkalkulo, registroj, nombriloj, nombriloj, ktp.

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
}

Metadatenoj — datumstrukturoj asociitaj kun ĉiu pako.

Estas 2 specoj de metadatenoj:

  Propraj metadatenoj (malplena strukturo por ĉiuj pakaĵoj)
    Vi povas meti ĉion, kion vi volas ĉi tie
    Havebla tra la dukto
    oportuna por uzi por viaj propraj celoj, ekzemple, por stoki pakaĵon hash

  Internaj metadatenoj - provizitaj de la arkitekturo
    Eniga haveno, eligo haveno estas difinitaj ĉi tie
    Tempostampo kiam la pako estis vicigita, vostoprofundo
    multicast hash / multicast queuo
    Paka prioritato, paka graveco
    Eliga havenspecifo (ekz. eligvosto)

P4-kompililo

La P4-kompililo (P4C) generas:

  1. Datenaviadilo rultempo
  2. API por administri maŝinan staton en la datumaviadilo

P4 programlingvo

Ekzemplo de softvarŝaltilo en P4-lingvo

Fontkodoj elŝuteblas el la deponejo.

p4lang/p4c-bm: kreas JSON-agordon por bmv2
p4lang/bmv2: programara ŝaltilo kiu komprenas bmv2-versiajn JSON-agordojn

La figuro montras la projektan kompildiagramon:

P4 programlingvo

Manipuladoj kun tabeloj, legaj registroj, nombriloj:

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


La fontkodo enhavas la programon simple_switch_CLI por oportuna uzo de la programara ŝaltilo API.

Vi povas elŝuti ĉi tiun kaj aliajn ekzemplojn el la deponejo.

P4 programlingvo

PS Komence de ĉi tiu somero, Intel subskribis interkonsenton por akiri Barefoot Networks por rapide renkonti la bezonojn de Hyperscale Cloud-uzantoj. Kiel diris Navin Shenoy (administra vicprezidanto kaj ĝenerala direktoro de Data Center Group ĉe Intel Corporation), ĉi tio permesos al Intel provizi pli grandajn laborŝarĝojn kaj pli da ŝancoj por datumcentraj klientoj.

Laŭ mia persona opinio, ni ne forgesu, ke Intel estas gvidanto en la produktado de FPGA-blatoj kaj ĝi havas bonegan Quartus-medion. Ĉi tio signifas, ke ni povas atendi, ke kun la alveno de Intel, Barefoot ne nur vastigos sian produktan linion, sed ankaŭ Quartus kaj P4 Studio ricevos seriozajn ĝisdatigojn kaj aldonojn al la linio Toffino kaj Toffino 2.

Oficiala membro de la P4-komunumo - firmao Faktorgrupo.

fonto: www.habr.com

Aldoni komenton