ʻŌlelo hoʻolālā P4

ʻŌlelo hoʻolālā P4
ʻ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:

ʻŌlelo hoʻolālā P4

Nā manaʻo noi

ʻŌlelo hoʻolālā P4
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:

  1. Kūʻokoʻa mai ka hoʻokō pahuhopu;
  2. Ke kūʻokoʻa o ka protocol (s) i hoʻohana ʻia;
  3. 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 P4.org

loulou waihona https://github.com/p4lang, kahi e hiki ai iā ʻoe ke kiʻi i nā kumu kumu kumu a me nā kumu aʻo.

Kiki no Eclipse me ke kākoʻo P4, akā hiki iā mākou ke ʻōlelo aku P4 Studio mai Kamaʻaʻole.

ʻŌlelo hoʻolālā P4

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:

ʻŌlelo hoʻolālā P4

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:

ʻŌlelo hoʻolālā P4

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):

  1. Ka manawa holo mokulele ʻikepili
  2. API no ka mālama ʻana i ka mokuʻāina mīkini ma ka mokulele ʻikepili

ʻŌlelo hoʻolālā P4

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:

ʻŌlelo hoʻolālā P4

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.

ʻŌlelo hoʻolālā P4

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 Hui kumu.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka