P4 ir programmÄÅ”anas valoda, kas paredzÄta pakeÅ”u marÅ”rutÄÅ”anas noteikumu programmÄÅ”anai. AtŔķirÄ«bÄ no vispÄrÄjas nozÄ«mes valodas, piemÄram, C vai Python, P4 ir domÄnam specifiska valoda ar vairÄkiem dizainiem, kas optimizÄti tÄ«kla marÅ”rutÄÅ”anai.
P4 ir atvÄrtÄ pirmkoda valoda, kuru licencÄ un uztur bezpeļÅas organizÄcija P4 Language Consortium. To atbalsta arÄ« Open Networking Foundation (ONF) un Linux Foundation (LF), divas no lielÄkajÄm atvÄrtÄ koda tÄ«kla projektu jumta organizÄcijÄm.
Valoda sÄkotnÄji tika izstrÄdÄta 2013. gadÄ un aprakstÄ«ta 2014. gada SIGCOMM CCR dokumentÄ ar nosaukumu āProtokola neatkarÄ«ga, pakeÅ”u marÅ”rutÄÅ”anas procesora programmÄÅ”anaā.
KopÅ” tÄs pirmsÄkumiem P4 ir eksponenciÄli audzis un attÄ«stÄ«jies, Ätri kļūstot par standartu, lai aprakstÄ«tu pakeÅ”u pÄrsÅ«tÄ«Å”anu ar tÄ«kla ierÄ«cÄm, tostarp tÄ«kla adapteriem, slÄdžiem un marÅ”rutÄtÄjiem.
"SDN ir pÄrveidojis tÄ«klu nozari, un P4 paceļ SDN uz nÄkamo lÄ«meni, nodroÅ”inot marÅ”rutÄÅ”anas programmÄjamÄ«bu," sacÄ«ja Guru Parulkars, Open Networking Foundation izpilddirektors.
P4 valodu sÄkotnÄji izveidoja inženieru un pÄtnieku grupa no Google, Intel, Microsoft Research, Barefoot, Princeton un Stanford. MÄrÄ·is bija vienkÄrÅ”s: izveidot viegli lietojamu valodu, ko programmatÅ«ras izstrÄdÄtÄjs varÄtu apgÅ«t vienas dienas laikÄ un izmantot, lai precÄ«zi aprakstÄ«tu, kÄ paketes tiek nosÅ«tÄ«tas pa tÄ«kliem.
No paÅ”a sÄkuma P4 tika izstrÄdÄts tÄ, lai tas bÅ«tu neatkarÄ«gs no mÄrÄ·a (t.i., programmu, kas rakstÄ«ta P4, varÄja kompilÄt nemainÄ«tÄ veidÄ, lai tÄ darbotos dažÄdos mÄrÄ·os, piemÄram, ASIC, FPGA, CPU, NPU un GPU).
Valoda ir arÄ« neatkarÄ«ga no protokola (t.i., P4 programma var aprakstÄ«t esoÅ”os standarta protokolus vai izmantot, lai norÄdÄ«tu jaunus pielÄgotus adresÄcijas režīmus).
RÅ«pniecÄ«bÄ P4 izmanto ierÄ«Äu programmÄÅ”anai. IespÄjams, nÄkotnÄ Internet-RFC un IEEE standartos tiks iekļauta arÄ« P4 specifikÄcija.
P4 var izmantot gan programmÄjamÄm, gan fiksÄtu funkciju ierÄ«cÄm. PiemÄram, to izmanto, lai precÄ«zi reÄ£istrÄtu slÄdža konveijera uzvedÄ«bu Switch Abstraction Interface (SAI) API, ko izmanto atvÄrtÄ koda SONiC slÄdža operÄtÄjsistÄma. P4 tiek izmantots arÄ« ONF Stratum projektÄ, lai aprakstÄ«tu pÄrslÄgÅ”anÄs uzvedÄ«bu dažÄdÄs fiksÄtÄs un programmÄjamÄs ierÄ«cÄs.
Pirmo reizi slÄdža un tÄ«kla adapteru darbÄ«bas aprakstÄ«Å”ana ļauj izveidot precÄ«zu visa tÄ«kla izpildÄmo modeli pirms izvietoÅ”anas. Lieli mÄkoÅdatoÅ”anas pakalpojumu sniedzÄji var pilnÄ«bÄ pÄrbaudÄ«t un atkļūdot tÄ«klu, izmantojot programmatÅ«ru, ievÄrojami samazinot laiku un izmaksas, kas nepiecieÅ”amas sadarbspÄjas testÄÅ”anai laboratorijÄ, neprasot dÄrgu aparatÅ«ru.
Izmantojot P4, tÄ«kla iekÄrtu pÄrdevÄji var sagaidÄ«t kopÄju pamatÄ esoÅ”o marÅ”rutÄÅ”anas uzvedÄ«bu visos produktos, ļaujot atkÄrtoti izmantot testa infrastruktÅ«ru, vienkÄrÅ”ot pÄrvaldÄ«bas programmatÅ«ras izstrÄdi un galu galÄ nodroÅ”inÄt savietojamÄ«bu.
Protams, P4 var izmantot, lai rakstÄ«tu programmas, kas apraksta pilnÄ«gi jaunus marÅ”rutÄÅ”anas veidus. PiemÄram, P4 plaÅ”i izmanto telemetrijai un mÄrÄ«jumiem datu centros, uzÅÄmumu un pakalpojumu sniedzÄju tÄ«klos.
ArÄ« pÄtnieku kopiena ir pastiprinÄjusies. VairÄkas vadoÅ”Äs akadÄmiskÄs tÄ«klu pÄtniecÄ«bas grupas ir publicÄjuÅ”as aizraujoÅ”as jaunas lietojumprogrammas, kuru pamatÄ ir P4 programmas, tostarp slodzes lÄ«dzsvaroÅ”ana, konsensa protokoli un galveno vÄrtÄ«bu keÅ”atmiÅa. Tiek veidota jauna programmÄÅ”anas paradigma, inovÄcijas virzÄs no aparatÅ«ras uz programmatÅ«ru, ļaujot rasties daudzÄm negaidÄ«tÄm, jaunÄm un Ä£eniÄlÄm idejÄm.
IzstrÄdÄtÄju kopiena ir devusi nozÄ«mÄ«gu ieguldÄ«jumu koda izstrÄdÄ, tostarp kompilatoru, konveijeru, uzvedÄ«bas modeļu, API, testÄÅ”anas ietvaru, lietojumprogrammu un daudz ko citu. TÄdiem uzÅÄmumiem kÄ Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx un ZTE ir Ä«paÅ”i izstrÄdÄtÄji; no universitÄtÄm, tostarp BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass un USI; un atvÄrtÄ pirmkoda projekti, tostarp CORD, FD.io, OpenDaylight, ONOS, OvS, SAI un Stratum, uzsver faktu, ka P4 ir neatkarÄ«gs kopienas projekts.
Tipiska kontrolleru paaudze P4 valodai:
PieteikÅ”anÄs perspektÄ«vas
TÄ kÄ valoda ir paredzÄta lietojumprogrammu marÅ”rutÄÅ”anai, prasÄ«bu saraksts un dizaina iespÄjas atŔķiras no vispÄrÄjas nozÄ«mes programmÄÅ”anas valodÄm. GalvenÄs valodas iezÄ«mes ir:
- NeatkarÄ«ba no mÄrÄ·a Ä«stenoÅ”anas;
- IzmantotÄ(-u) protokola(-u) neatkarÄ«ba;
- Lauka pÄrkonfigurÄjamÄ«ba.
NeatkarÄ«ba no mÄrÄ·a Ä«stenoÅ”anas
P4 programmas ir izstrÄdÄtas tÄ, lai tÄs bÅ«tu neatkarÄ«gas no ievieÅ”anas, kas nozÄ«mÄ, ka tÄs var apkopot dažÄdiem izpildes dzinÄju veidiem, piemÄram, vispÄrÄjas nozÄ«mes procesoriem, FPGA, sistÄmas mikroshÄmÄm, tÄ«kla procesoriem un ASIC. Å ie dažÄdie maŔīnu veidi ir pazÄ«stami kÄ P4 mÄrÄ·i, un katram mÄrÄ·im ir nepiecieÅ”ams kompilators, lai pÄrveidotu P4 avota kodu mÄrÄ·a slÄdža modelÄ«. Kompilatoru var iebÅ«vÄt mÄrÄ·a ierÄ«cÄ, ÄrÄjÄ programmatÅ«rÄ vai pat mÄkoÅpakalpojumÄ. TÄ kÄ daudzi sÄkotnÄjie P4 programmu mÄrÄ·i bija paredzÄti vienkÄrÅ”ai pakeÅ”u pÄrslÄgÅ”anai, ļoti bieži tiek dzirdÄts termins "P4 slÄdzis", lai gan "P4 mÄrÄ·is" ir precÄ«zÄks.
IzmantotÄ(-u) protokola(-u) neatkarÄ«ba
P4 ir neatkarÄ«gs no protokola. Tas nozÄ«mÄ, ka valodai nav vietÄjo protokolu atbalsta, piemÄram, IP, Ethernet, TCP, VxLAN vai MPLS. TÄ vietÄ P4 programmÄtÄjs apraksta programmÄ nepiecieÅ”amo protokolu galvenes formÄtus un lauku nosaukumus, kurus savukÄrt interpretÄ un apstrÄdÄ kompilÄtÄ programma un mÄrÄ·a ierÄ«ce.
Lauka pÄrkonfigurÄjamÄ«ba
Protokola neatkarÄ«ba un abstraktÄs valodas modelis ļauj pÄrkonfigurÄt ā P4 mÄrÄ·iem jÄspÄj mainÄ«t pakeÅ”u apstrÄdi pÄc sistÄmas izvietoÅ”anas. Å Ä« iespÄja tradicionÄli ir saistÄ«ta ar marÅ”rutÄÅ”anu, izmantojot vispÄrÄjas nozÄ«mes procesorus vai tÄ«kla procesorus, nevis fiksÄtas funkcijas integrÄlÄs shÄmas.
Lai gan valodÄ nav nekÄ, kas liegtu optimizÄt noteikta protokolu kopas veiktspÄju, Ŕīs optimizÄcijas valodas autoram ir neredzamas un galu galÄ var samazinÄt sistÄmas un mÄrÄ·u elastÄ«bu un to pÄrkonfigurÄjamÄ«bu.
Å Ä«s valodas Ä«paŔības sÄkotnÄji noteica tÄs veidotÄji, koncentrÄjoties uz tÄs plaÅ”u izmantoÅ”anu tÄ«kla infrastruktÅ«rÄ.
Valoda jau tiek izmantota daudzos uzÅÄmumos:
1) HipermÄroga datu centri;
Ķīnas uzÅÄmums Tencent ir lielÄkÄ investÄ«ciju kompÄnija pasaulÄ un viena no lielÄkajÄm riska kapitÄla firmÄm. Tencent meitasuzÅÄmumi gan ĶīnÄ, gan citÄs pasaules valstÄ«s specializÄjas dažÄdÄs augsto tehnoloÄ£iju biznesa jomÄs, tostarp dažÄdos interneta servisos, izstrÄdÄs mÄkslÄ«gÄ intelekta un elektroniskÄs izklaides jomÄ.
P4 un programmÄjamÄ marÅ”rutÄÅ”ana ir progresÄ«vas tehnoloÄ£ijas, kas tiek izmantotas uzÅÄmuma tÄ«kla arhitektÅ«rÄ.
KÄ viens no izstrÄdÄtÄjiem Google ar lepnumu atzÄ«mÄ P4 straujo ievieÅ”anu tÄ«klu nozarÄ un jo Ä«paÅ”i datu centru arhitektÅ«ras projektÄÅ”anÄ.
2) Komercsabiedrības;
Goldman Sachs izmanto priekÅ”rocÄ«bas, ko sniedz sadarbÄ«ba ar atvÄrtÄ pirmkoda kopienu un kopÄ«gu standartu un risinÄjumu izstrÄde, lai ieviestu jauninÄjumus tÄ«kla infrastruktÅ«rÄ un nodroÅ”inÄtu labÄkus risinÄjumus klientiem.
3) RažoŔana;
Visa tÄ«kla nozare gÅ«tu labumu no tÄdas valodas kÄ P4, kas unikÄli definÄ pÄrsÅ«tÄ«Å”anas uzvedÄ«bu. Cisco arÄ« tic savu produktu lÄ«niju nodoÅ”anai, lai izmantotu Å”o valodu.
Juniper Networks ir iekļÄvis P4 un P4 Runtime vairÄkos produktos un nodroÅ”ina programmatisku piekļuvi Juniper iegultajam procesoram un tÄ programmatÅ«ras kodam.
Ruijie Networks stingri atbalsta P4 un priekÅ”rocÄ«bas, ko tas sniedz tÄ«kliem. Izmantojot P4, uzÅÄmums var radÄ«t un piegÄdÄt savÄ klasÄ labÄkos risinÄjumus plaÅ”am klientu lokam.
4) telekomunikÄciju pakalpojumu sniedzÄji;
AT&T bija agrÄ«ns P4 ieviesÄjs, viens no pirmajiem, kas izmantoja P4, lai definÄtu uzvedÄ«bu, ko tÄ vÄlÄjÄs redzÄt savos tÄ«klos, un savÄ tÄ«klÄ izmantoja P4 programmÄjamÄs pÄradresÄcijas ierÄ«ces.
UzÅÄmumÄ Deutsche Telekom Ŕī valoda tiek izmantota galveno tÄ«kla funkciju prototipÄÅ”anai kÄ daļa no programmas Access 4.0.
5) PusvadÄ«tÄju rÅ«pniecÄ«ba;
Å Ä« valoda ļÄva Barefoot ieviest jaunu paradigmu programmatÅ«ras iespÄju nodroÅ”inÄÅ”anai tÄ«kla marÅ”rutÄÅ”anas plaknÄ.
Xilinx bija viens no P4.org dibinÄtÄjiem un aktÄ«vi iesaistÄ«jÄs P4 valodas izstrÄdÄ un ieviesa to uz FPGA balstÄ«tÄs programmÄjamÄs platformÄs SmartNIC un NFV aparatÅ«rai, izlaižot vienu no pirmajiem P416 kompilatoriem kÄ daļu no SDNet dizaina.
6) Programmatūra.
VMware uzskata, ka P4 rada milzÄ«gu enerÄ£iju, inovÄcijas un kopienu, kas veicina nozÄ«mÄ«gas un nepiecieÅ”amas pÄrveides tÄ«klÄ. VMware ir bijusi daļa no Ŕīs nozares kustÄ«bas kopÅ” pirmsÄkumiem, jo āājaunu inovÄciju vilni virza uz programmatÅ«ru balstÄ«tas pieejas, kas paplaÅ”ina infrastruktÅ«ras iespÄjas un ievieÅ” to jaunÄkajos produktos.
TÄdÄjÄdi P4 ir no mÄrÄ·a neatkarÄ«ga un no protokola neatkarÄ«ga programmÄÅ”anas valoda, ko izmanto nozare un akadÄmiskÄs aprindas, lai unikÄli definÄtu pakeÅ”u marÅ”rutÄÅ”anas uzvedÄ«bu kÄ programmu, kuru savukÄrt var apkopot vairÄkiem mÄrÄ·iem. MÅ«sdienÄs mÄrÄ·i ir aparatÅ«ras un programmatÅ«ras slÄdži, hipervizora slÄdži, NPU, GPU, FPGA, SmartNIC un ASIC.
Valodas galvenÄs iezÄ«mes ievÄrojami paplaÅ”ina tÄs pielietojuma jomu un nodroÅ”ina tÄs Ätru ievieÅ”anu tÄ«kla arhitektÅ«rÄs.
Darba sÄkÅ”ana
P4 ir atvÄrts projekts, visa attiecÄ«gÄ informÄcija ir mÄjaslapÄ
Repozitorija saite
ApskatÄ«sim galvenÄs kodola abstrakcijas:
Virsrakstu definÄÅ”ana ā ar viÅu palÄ«dzÄ«bu tiek noteiktas protokolu galvenes.
Galvenes definÄ«cijÄ ir norÄdÄ«ts:
- pakeÅ”u formÄtu un galvenes lauku nosaukumu apraksts
- fiksÄtie un mainÄ«gie atļautie lauki
PiemÄram
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;
}
ParsÄtÄji ā viÅu uzdevums ir parsÄt virsrakstus.
Å is parsÄtÄja piemÄrs noteiks iekÄrtas beigu stÄvokļa pÄreju no viena sÄkuma stÄvokļa uz vienu no diviem gala stÄvokļiem:
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;
}
}ā¦
}
Tabulas ā satur maŔīnas stÄvokļus, kas saista lietotÄja atslÄgas ar darbÄ«bÄm. AktivitÄte ā apraksts par to, kÄ ar iepakojumu jÄrÄ«kojas.
TabulÄs ir pakeÅ”u pÄrsÅ«tÄ«Å”anas stÄvokļi (definÄti pÄrvaldÄ«bas lÄ«menÄ«), aprakstiet atbilstÄ«bas darbÄ«bas vienÄ«bu.
Paketes tiek saskaÅotas ar:
- Precīza sakritība
- GarÄkÄ prefiksa atbilstÄ«ba (LPM)
- TrÄ«skÄrÅ”a saskaÅoÅ”ana (maskÄÅ”ana)
table ipv4_lpm{
reads{
ipv4.dstAddr: lpm;
} actions {
forward();
}
}
Visas iespÄjamÄs darbÄ«bas iepriekÅ” jÄdefinÄ tabulÄs.
DarbÄ«bas sastÄv no koda un datiem. Dati nÄk no pÄrvaldÄ«bas lÄ«meÅa (piemÄram, IP adreses/portu numuri). Dažus primitÄ«vus bez cilpas var norÄdÄ«t tieÅ”i darbÄ«bÄ, taÄu instrukciju skaitam jÄbÅ«t paredzamam. TÄpÄc darbÄ«bÄs nedrÄ«kst bÅ«t cilpas vai nosacÄ«juma priekÅ”raksti.
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 moduļi ā darbÄ«bas, lai izveidotu meklÄÅ”anas taustiÅu, meklÄtu tabulÄ, veiktu darbÄ«bas.
Tipisks moduļa piemÄrs ir parÄdÄ«ts attÄlÄ:
KontrolÄt plÅ«smu ā norÄda secÄ«bu, kÄdÄ tiek izmantoti Match-Action moduļi. Å Ä« ir obligÄta programma, kas nosaka augsta lÄ«meÅa loÄ£iku un Match-Action secÄ«bu. VadÄ«bas plÅ«sma saista visus objektus, definÄjot kontroles lÄ«meni.
ÄrÄjie objekti ir konkrÄti objekti ar skaidri definÄtu arhitektÅ«ru un API saskarnÄm. PiemÄram, kontrolsummas aprÄÄ·inÄÅ”ana, reÄ£istri, skaitÄ«tÄji, skaitÄ«tÄji utt.
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
}
Metadati ā ar katru pakotni saistÄ«tÄs datu struktÅ«ras.
Ir 2 veidu metadati:
PielÄgoti metadati (tukÅ”a struktÅ«ra visÄm pakotnÄm)
Å eit jÅ«s varat ievietot visu, ko vÄlaties
Pieejams visÄ cauruļvadÄ
Ärts lietoÅ”anai saviem mÄrÄ·iem, piemÄram, iepakojuma hash uzglabÄÅ”anai
IekÅ”Äjie metadati ā to nodroÅ”ina arhitektÅ«ra
Å eit ir definÄts ievades ports, izvades ports
Laika zÄ«mogs, kad pakete bija rindÄ, rindas dziļums
multicast hash / multicast rinda
Pakas prioritÄte, iepakojuma nozÄ«me
Izvades porta specifikÄcija (piemÄram, izvades rinda)
P4 kompilators
P4 kompilators (P4C) Ä£enerÄ:
- Datu plaknes izpildlaiks
- API maŔīnas stÄvokļa pÄrvaldÄ«Å”anai datu plaknÄ
ProgrammatÅ«ras slÄdža piemÄrs P4 valodÄ
Avota kodus var lejupielÄdÄt no repozitorija.
p4lang/p4c-bm: izveido JSON konfigurÄciju bmv2
p4lang/bmv2: programmatÅ«ras slÄdzis, kas saprot bmv2 versijas JSON konfigurÄcijas
AttÄlÄ parÄdÄ«ta projekta kompilÄcijas diagramma:
ManipulÄcijas ar tabulÄm, nolasÄ«Å”anas reÄ£istriem, skaitÄ«tÄjiem:
- 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>
Avota kods satur simple_switch_CLI programmu Ärtai programmatÅ«ras slÄdža API lietoÅ”anai.
Å o un citus piemÄrus varat lejupielÄdÄt no krÄtuves.
PS Å Ä«s vasaras sÄkumÄ Intel parakstÄ«ja lÄ«gumu par Barefoot Networks iegÄdi, cenÅ”oties Ätri apmierinÄt Hyperscale Cloud lietotÄju vajadzÄ«bas. KÄ teica Navins Å enojs (Intel Corporation datu centru grupas izpilddirektors un Ä£enerÄldirektors), tas ļaus Intel nodroÅ”inÄt lielÄku darba slodzi un vairÄk iespÄju datu centru klientiem.
ManuprÄt, nevajadzÄtu aizmirst, ka Intel ir lÄ«deris FPGA mikroshÄmu ražoÅ”anÄ un tam ir lieliska Quartus vide. Tas nozÄ«mÄ, ka varam sagaidÄ«t, ka lÄ«dz ar Intel ienÄkÅ”anu Barefoot ne tikai paplaÅ”inÄs savu produktu lÄ«niju, bet arÄ« Quartus un P4 Studio saÅems nopietnus Toffino un Toffino 2 lÄ«nijas atjauninÄjumus un papildinÄjumus.
OficiÄlais P4 kopienas dalÄ«bnieks - uzÅÄmums
Avots: www.habr.com