ʻO ka P4 kahi ʻōlelo hoʻolālā i hoʻolālā ʻia e papahana i nā lula hoʻokele packet. ʻAʻole like me ka ʻōlelo kumu nui e like me C a i ʻole Python, ʻo P4 kahi ʻōlelo kikoʻī domain me ka nui o nā hoʻolālā i hoʻopaʻa ʻia no ka hoʻokele pūnaewele.
ʻO ka P4 kahi ʻōlelo kumu ākea i laikini ʻia a mālama ʻia e kahi hui waiwai ʻole i kapa ʻia ʻo P4 Language Consortium. Kākoʻo ʻia ʻo ia e ka Open Networking Foundation (ONF) a me ka Linux Foundation (LF), ʻelua o nā hui umbrella nui loa no nā papahana pūnaewele open source.
Ua hoʻokumu mua ʻia ka ʻōlelo ma 2013 a wehewehe ʻia ma kahi pepa SIGCOMM CCR 2014 i kapa ʻia ʻo "Protocol Independent, Packet Routing Processor Programming."
Mai kona hoʻomaka ʻana, ua ulu a ulu nui ʻo P4, lilo koke i mea maʻamau no ka wehewehe ʻana i ka hoʻouna ʻana o nā ʻeke e nā mea ʻoihana pūnaewele, me nā mea hoʻopili pūnaewele, nā hoʻololi, a me nā mea ala.
"Ua hoʻololi ʻo SDN i ka ʻoihana pūnaewele, a lawe ʻo P4 i ka SDN i kahi pae aʻe ma o ka lawe ʻana i ka programmability i ke alahele," wahi a Guru Parulkar, ka luna hoʻokele o ka Open Networking Foundation.
Ua hana mua ʻia ka ʻōlelo P4 e kahi hui o nā ʻenekinia a me nā mea noiʻi mai Google, Intel, Microsoft Research, Barefoot, Princeton a me Stanford. He maʻalahi ka pahuhopu: hana i kahi ʻōlelo maʻalahi i hiki i ka mea hoʻomohala polokalamu ke aʻo i ka lā hoʻokahi a hoʻohana e wehewehe pololei i ka hoʻouna ʻia ʻana o nā ʻeke ma nā pūnaewele.
Mai ka hoʻomaka ʻana, ua hoʻolālā ʻia ʻo P4 i mea kūʻokoʻa kūʻokoʻa (ʻo ia hoʻi, hiki ke hoʻopili ʻia kahi papahana i kākau ʻia ma P4 me ka hoʻololi ʻole ʻia e holo ma nā ʻano pahuhopu like ʻole e like me ASIC, FPGA, CPU, NPU, a me GPU).
He protocol kūʻokoʻa ka ʻōlelo (ʻo ia hoʻi, hiki i kahi papahana P4 ke wehewehe i nā protocol maʻamau i loaʻa a i ʻole e hoʻohana ʻia e kuhikuhi i nā ʻano ʻōlelo maʻamau hou).
I ka ʻoihana, hoʻohana ʻia ʻo P4 no ka hoʻonohonoho ʻana i nā polokalamu. Malia paha i ka wā e hiki mai ana ʻo Internet-RFC a me nā kūlana IEEE e hoʻokomo pū i ka kikoʻī P4.
Hiki ke hoʻohana ʻia ka P4 no nā polokalamu ʻelua a me nā mea hana paʻa. No ka laʻana, hoʻohana ʻia ia no ka hoʻopaʻa pololei ʻana i ke ʻano o ka pipeline hoʻololi i nā API Switch Abstraction Interface (SAI) i hoʻohana ʻia e ka open source SONiC switch OS. Hoʻohana pū ʻia ʻo P4 i ka papahana ONF Stratum e wehewehe i ka hoʻololi ʻana i ka ʻano ma waena o nā ʻano mea paʻa a hiki ke hoʻonohonoho ʻia.
No ka manawa mua, ʻo ka wehewehe ʻana i ke ʻano o ka hoʻololi a me nā mea hoʻopili pūnaewele hiki iā ʻoe ke hana i kahi kumu hoʻokō kūpono o ka pūnaewele holoʻokoʻa ma mua o ka hoʻolaha ʻana. Hiki i nā mea hoʻolako ao nui ke hoʻāʻo a debug i ka pūnaewele me ka hoʻohana ʻana i ka lako polokalamu, e hōʻemi nui ana i ka manawa a me ke kumukūʻai o ka hoʻāʻo interoperability i loko o ka lab me ka ʻole o ka pono ʻana i nā lako waiwai.
Ma ka hoʻohana ʻana i ka P4, hiki i nā mea kūʻai aku ʻoihana pūnaewele ke manaʻo i ke ʻano maʻamau o ke ala ala ma waena o nā huahana a pau, e ʻae i ka hoʻohana hou ʻana i nā ʻōnaehana hoʻāʻo, hoʻomaʻamaʻa i ka hoʻomohala ʻana i nā polokalamu hoʻokele, a me ka hōʻoia ʻana i ka interoperability.
ʻOiaʻiʻo, hiki ke hoʻohana ʻia ka P4 e kākau i nā papahana e wehewehe ana i nā ala hou loa o ke ala ala. No ka laʻana, hoʻohana nui ʻia ʻo P4 no ka telemetry a me nā ana ma nā kikowaena ʻikepili, ʻoihana a me nā ʻoihana lawelawe.
Ua piʻi pū ka hui noiʻi. Ua paʻi kekahi mau pūʻulu noiʻi ʻoihana hoʻonaʻauao alakaʻi i nā noi hou hoihoi e pili ana i nā papahana P4, e komo pū ana me ka load balancing, consensus protocols, a me ka caching waiwai nui. Ke hana ʻia nei kahi paradigm hoʻolālā hou, ke neʻe nei ka mea hou mai ka ʻenehana a i ka lako polokalamu, e ʻae ana i nā manaʻo i manaʻo ʻole ʻia, nā manaʻo hou a me ka noʻonoʻo.
Ua hāʻawi nui ke kaiāulu hoʻomohala i ka hoʻomohala ʻana i nā code, me nā mea hōʻuluʻulu, nā paipu, nā ʻano hoʻohālike, nā API, nā papa hana hoʻāʻo, nā noi, a me nā mea hou aku. ʻO nā hui e like me Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx, a me ZTE i hoʻolaʻa i nā mea hoʻomohala; mai nā kulanui me BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass, a me USI; a me nā papahana open source me CORD, FD.io, OpenDaylight, ONOS, OvS, SAI a me Stratum e hōʻike ana i ka ʻoiaʻiʻo he papahana kaiāulu kūʻokoʻa ʻo P4.
Ka hana maʻamau o nā mea hoʻoponopono no ka ʻōlelo P4:
Nā manaʻo noi
No ka mea ua manaʻo ʻia ka ʻōlelo no ka hoʻokele ʻana i nā noi, ʻokoʻa ka papa inoa o nā koi a me nā koho hoʻolālā i ka hoʻohālikelike ʻana i nā ʻōlelo hoʻolālā maʻamau. ʻO nā hiʻohiʻona nui o ka ʻōlelo:
- Kūʻokoʻa mai ka hoʻokō pahuhopu;
- Ke kūʻokoʻa o ka protocol (s) i hoʻohana ʻia;
- Ka hoʻonohonoho hou ʻana o ke kahua.
Kūʻokoʻa mai ka hoʻokō ʻana
Hoʻolālā ʻia nā papahana P4 e hoʻokō kūʻokoʻa, ʻo ia ka mea hiki ke hōʻuluʻulu ʻia no nā ʻano ʻenekini hoʻokō like ʻole, e like me nā kaʻina hana maʻamau, nā FPGA, nā SoC, nā mea hana pūnaewele, a me nā ASIC. Ua ʻike ʻia kēia mau ʻano mīkini like ʻole he mau pahuhopu P4, a pono kēlā me kēia pahuhopu i kahi mea hoʻopili e hoʻohuli i ka code kumu P4 i kahi kumu hoʻololi hoʻololi. Hiki ke kūkulu ʻia ka mea hōʻuluʻulu i loko o ka mea i manaʻo ʻia, nā polokalamu waho, a i ʻole kahi lawelawe kapuaʻi. Ma muli o ka nui o nā pahuhopu kumu no nā polokalamu P4 no ka hoʻololi packet maʻalahi, he mea maʻamau ka lohe ʻana i ka huaʻōlelo "P4 switch" ʻoiai ʻoi aku ka pololei o "P4 target".
ʻO ke kūʻokoʻa o ka protocol (s) i hoʻohana ʻia
He protocol kūʻokoʻa ka P4. ʻO ia hoʻi, ʻaʻohe kākoʻo maoli o ka ʻōlelo no nā protocol maʻamau e like me IP, Ethernet, TCP, VxLAN a i ʻole MPLS. Akā, wehewehe ka mea papahana P4 i nā ʻano poʻomanaʻo a me nā inoa kahua o nā protocols i koi ʻia i ka papahana, a laila e unuhi ʻia a hoʻoponopono ʻia e ka papahana i hui ʻia a me ka mea i hoʻopaʻa ʻia.
Ka hoʻonohonoho hou ʻana o ke kahua
ʻO ke kūʻokoʻa o ka protocol a me ke kumu hoʻohālike ʻōlelo abstract hiki ke hoʻololi hou ʻia-P4 nā pahuhopu e hiki ke hoʻololi i ka hoʻoili ʻana i ka ʻeke ma hope o ka hoʻomoe ʻana o ka ʻōnaehana. Hoʻopili ʻia kēia mana me ke alahele ma o nā kaʻina hana maʻamau a i ʻole nā mea hana pūnaewele ma mua o nā kaapuni hoʻohui paʻa.
ʻOiai ʻaʻohe mea i loko o ka ʻōlelo e pale ai i ka hoʻokō ʻana i ka hana o kahi pūʻulu protocol, ʻaʻole ʻike ʻia kēia mau loiloi e ka mea kākau ʻōlelo a hiki ke hōʻemi i ka maʻalahi o ka ʻōnaehana a me nā pahuhopu a me kā lākou hoʻoponopono hou ʻana.
ʻO kēia mau hiʻohiʻona o ka ʻōlelo i waiho mua ʻia e nā mea nāna i hana me ka nānā ʻana i kona hoʻohana nui ʻana i ka ʻoihana pūnaewele.
Ua hoʻohana mua ʻia ka ʻōlelo ma nā ʻoihana he nui:
1) Nā kikowaena ʻikepili Hyperscale;
ʻO ka hui Kina ʻo Tencent ka ʻoihana waiwai nui loa ma ka honua a ʻo kekahi o nā ʻoihana ʻoihana nui loa. ʻO nā lālā o Tencent, ma Kina a me nā ʻāina ʻē aʻe a puni ka honua, ʻike loea i nā ʻano ʻoihana ʻenehana kiʻekiʻe, me nā lawelawe pūnaewele like ʻole, nā hoʻomohala ʻana i ke kahua o ka naʻauao artificial a me ka leʻaleʻa uila.
ʻO ka P4 a me ka programmable routing nā ʻenehana holomua i hoʻohana ʻia i ka hoʻolālā pūnaewele o ka hui.
E like me kekahi o nā mea hoʻokumu, haʻaheo ʻo Google e ʻike i ka hoʻokomo wikiwiki ʻana o P4 i ka ʻoihana pūnaewele a me ka hoʻolālā hoʻolālā hale kikowaena data.
2) Nā hui kālepa;
Hoʻohana maikaʻi ʻo Goldman Sachs i ka hana pū ʻana me ke kaiāulu open source a me ka hoʻomohala ʻana i nā kūlana maʻamau a me nā hoʻonā e hoʻomohala i nā ʻōnaehana pūnaewele a hāʻawi i nā hopena maikaʻi aʻe no nā mea kūʻai aku.
3) Hana ʻia;
E pōmaikaʻi ka ʻoihana pūnaewele holoʻokoʻa mai kahi ʻōlelo e like me P4 e wehewehe kūʻokoʻa i ka hana hoʻouna. Manaʻo nō hoʻi ʻo Cisco i ka hoʻoili ʻana i kāna laina huahana e hoʻohana i kēia ʻōlelo.
Ua hoʻokomo ʻo Juniper Networks i ka P4 a me ka P4 Runtime i nā huahana he nui, a hāʻawi i ka polokalamu i ka polokalamu i hoʻokomo ʻia i ka Juniper a me kāna code software.
He kākoʻo ikaika ʻo Ruijie Networks i ka P4 a me nā pono e lawe mai ai i nā pūnaewele. Me P4, hiki i ka hui ke hana a hāʻawi i nā hoʻonā maikaʻi loa i ka nui o nā mea kūʻai aku.
4) Nā mea lawelawe kelepona;
He mea hoʻohana mua ʻo AT&T i ka P4, ʻo ia kekahi o ka mea mua i hoʻohana i ka P4 e wehewehe i ke ʻano āna i makemake ai e ʻike i kāna mau pūnaewele, a me ka hoʻohana ʻana i nā polokalamu hoʻolaha papahana P4 ma kāna pūnaewele.
Ma Deutsche Telekom, hoʻohana ʻia ka ʻōlelo e prototype i nā hana pūnaewele koʻikoʻi ma ke ʻano o ka polokalamu Access 4.0.
5) ʻoihana Semiconductor;
ʻO ka ʻōlelo i hiki ai iā Barefoot ke hoʻokō i kahi paradigm hou no ka hāʻawi ʻana i nā lako polokalamu i ka mokulele hoʻokele pūnaewele.
ʻO Xilinx kekahi o nā mea nāna i hoʻokumu i ka P4.org a ua komo ikaika ʻo ia i ka hoʻomohala ʻana i ka ʻōlelo P4 a ua hoʻokomo ʻia i loko o nā kahua papahana e pili ana i ka FPGA no SmartNIC a me NFV hardware, e hoʻokuʻu ana i kekahi o nā mea hōʻuluʻulu P416 mua ma ke ʻano o ka hoʻolālā SDNet.
6) lako polokalamu.
Manaʻo ʻo VMware e hoʻokumu ʻo P4 i ka ikehu nui, ka hana hou a me ke kaiāulu e hoʻokele nei i ka loli kūpono a pono i ka pūnaewele. Ua lilo ʻo VMware i ʻāpana o kēia neʻe ʻoihana mai ka hoʻomaka ʻana, ʻoiai ke alakaʻi ʻia nei kahi nalu hou o ka hana hou e nā ala polokalamu e hoʻonui ai i ka hiki ke hana a hoʻokō iā ia i nā huahana hou loa.
No laila, ʻo P4 kahi ʻōlelo hoʻolālā kūʻokoʻa a me ka protocol-independent i hoʻohana ʻia e ka ʻoihana a me ka ʻoihana kula e wehewehe kūʻokoʻa i ka ʻano hoʻokele packet ma ke ʻano he papahana, a laila hiki ke hōʻuluʻulu ʻia no nā pahuhopu he nui. I kēia mau lā, loaʻa nā pahuhopu i nā hāmeʻa a me nā polokalamu hoʻololi, nā hoʻololi hypervisor, NPU, GPU, FPGA, SmartNIC a me ASIC.
ʻO nā hiʻohiʻona nui o ka ʻōlelo e hoʻonui nui i ka laulā o kāna noi a hōʻoia i kona hoʻokō wikiwiki ʻana i nā ʻoihana pūnaewele.
Puke
He papahana hāmama ka P4, aia nā ʻike pili āpau ma ka pūnaewele
loulou waihona
E nānā kākou i nā abstractions nui o ka kernel:
Ka wehewehe ʻana i nā poʻo - me kā lākou kōkua, hoʻoholo ʻia nā poʻomanaʻo protocol.
Hōʻike ka wehewehe ʻana o ke poʻo:
- ka wehewehe ʻana i nā ʻano packet a me nā inoa kahua poʻomanaʻo
- nā kahua paʻa a hoʻololi ʻia
Eia kekahi laʻana
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;
}
Nā Parsers - ʻo kā lākou hana ka hoʻopaʻa ʻana i nā poʻo.
E hoʻoholo ka laʻana parser ma lalo nei i ka hoʻololi ʻana o ke kūlana hope o ka mīkini mai kahi mokuʻāina mua i kekahi o nā mokuʻāina hope ʻelua:
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;
}
}…
}
Nā Pākaukau — loaʻa nā mokuʻāina mīkini e hoʻopili ana i nā kī mea hoʻohana me nā hana. Nā hana - ka wehewehe ʻana i ke ʻano o ka hana ʻana i ka pūʻolo.
Loaʻa i nā papa nā mokuʻāina (i wehewehe ʻia ma ka pae hoʻokele) no ka hoʻouna ʻana i ka ʻeke, wehewehe i ka hui Match-Action.
Hoʻopili ʻia nā ʻeke e:
- Pili pololei
- Pāʻani Prefix lōʻihi loa (LPM)
- Pākuʻi ʻekolu (ka huna)
table ipv4_lpm{
reads{
ipv4.dstAddr: lpm;
} actions {
forward();
}
}
Pono e wehewehe mua ʻia nā hana a pau e hiki ai.
Aia nā hana i ke code a me ka ʻikepili. Loaʻa ka ʻikepili mai ka pae hoʻokele (e laʻa i nā helu IP/nā helu awa). Hiki ke kuhikuhi pololei ʻia kekahi mau ʻōlelo aʻoaʻo ma ka hana, akā pono e ʻike ʻia ka helu o nā kuhikuhi. No laila, ʻaʻole hiki i nā hana ke komo i nā puka lou a i ʻole nā ʻōlelo kūlana.
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;
}
Pākuʻi-Action modules - nā hana e hana i kahi kī huli, huli i ka papaʻaina, hana i nā hana.
Hōʻike ʻia kahi hiʻohiʻona maʻamau o kahi module ma ke kiʻi:
Ke kahe mana - hōʻike i ke ʻano o ka hoʻohana ʻana i nā modula Match-Action. He polokalamu koʻikoʻi kēia e wehewehe ana i ka loina kiʻekiʻe a me ke kaʻina hana Match-Action. Hoʻopili ke kahe mana i nā mea āpau ma ka wehewehe ʻana i ka pae o ka mana.
Nā mea waho he mau mea kiko'ī me kahi hoʻolālā i wehewehe ʻia a me nā pilina API. No ka laʻana, helu helu checksum, kākau inoa, helu helu, helu helu, etc.
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
}
Metadata - nā hale ʻikepili pili i kēlā me kēia pūʻolo.
Aia 2 ʻano o ka metadata:
ʻO ka metadata maʻamau (ka hale ʻole no nā pūʻolo a pau)
Hiki iā ʻoe ke waiho i nā mea āu e makemake ai ma ʻaneʻi
Loaʻa i loko o ka pipeline
maʻalahi no ka hoʻohana ʻana no kāu mau hana ponoʻī, no ka laʻana, no ka mālama ʻana i kahi hash puʻupuʻu
Metadata kūloko - hāʻawi ʻia e ka hale hana
Ua wehewehe ʻia ke awa hoʻokomo, puka puka ma ʻaneʻi
Hoʻopaʻa manawa i ka wā i hoʻonohonoho ʻia ai ka ʻeke, ka hohonu o ka laina
multicast hash / multicast queue
Ka mea nui o ka pūʻolo, ka mea nui o ka pūʻolo
Hōʻike kikoʻī puka puka (e laʻa.
P4 mea hoʻopili
Hoʻokumu ka P4 compiler (P4C):
- Ka manawa holo mokulele ʻikepili
- API no ka mālama ʻana i ka mokuʻāina mīkini ma ka mokulele ʻikepili
Ka laʻana o ka hoʻololi polokalamu ma ka ʻōlelo P4
Hiki ke hoʻoiho ʻia nā code kumu mai ka waihona.
p4lang/p4c-bm: hana i ka hoʻonohonoho JSON no bmv2
p4lang/bmv2: he hoʻololi polokalamu e hoʻomaopopo i ka hoʻonohonoho JSON mana o ka bmv2
Hōʻike ke kiʻi i ke kiʻi hoʻohui papahana:
Hoʻoponopono me nā papa, nā helu helu helu, nā helu helu:
- 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>
Loaʻa i ka code kumu ka polokalamu simple_switch_CLI no ka hoʻohana maʻalahi o ka API hoʻololi polokalamu.
Hiki iā ʻoe ke hoʻoiho i kēia a me nā hiʻohiʻona ʻē aʻe mai ka waihona.
PS I ka hoʻomaka ʻana o kēia kauwela, ua kau inoa ʻo Intel i kahi ʻaelike e loaʻa i nā Barefoot Networks i ka hoʻāʻo e hoʻokō koke i nā pono o nā mea hoʻohana Hyperscale Cloud. E like me ka ʻōlelo ʻana a Navin Shenoy (peresidena hoʻokō a me ka luna nui o ka Data Center Group ma Intel Corporation), e ʻae kēia iā Intel e hāʻawi i nā hana nui a me nā manawa hou aku no nā mea kūʻai aku kikowaena data.
I koʻu manaʻo ponoʻī, ʻaʻole pono mākou e poina he alakaʻi ʻo Intel i ka hana ʻana i nā chips FPGA a loaʻa iā ia kahi kūlana Quartus maikaʻi loa. ʻO ia ke ʻano hiki iā mākou ke manaʻo me ka hiki ʻana mai o Intel, ʻaʻole e hoʻonui wale ʻo Barefoot i kāna laina huahana, akā ʻo Quartus a me P4 Studio e loaʻa i nā mea hou a me nā hoʻohui i ka laina Toffino a me Toffino 2.
lālā kūhelu o ke kaiāulu P4 - hui
Source: www.habr.com