P4 ááẠpacket routing á
ááºážáá»ááºážáá»á¬ážááᯠáááá¯ááááºáá±ážááœá²áááºá¡ááœáẠáááá¯ááááºážáááºážáá¬áá¬á
áá¬ážáá
áºáá¯ááŒá
áºáááºá C ááá¯á·ááá¯áẠPython áá²á·ááá¯á·áá±á¬ áá±áá°áá» áááºááœááºáá»áẠáá¬áá¬á
áá¬ážááŸáá·áº ááá°áá²á P4 ááẠááœááºáááºáááºážááŒá±á¬ááºážáááºááŒááºážá¡ááœáẠá¡áá±á¬ááºážáá¯á¶áž áá®ááá¯ááºážáá»á¬ážá
áœá¬áá«ááŸááá±á¬ ááá¯ááááºážáá®ážááá·áºáá¬áá¬á
áá¬ážáá
áºáá¯ááŒá
áºáááºá
P4 ááẠP4 Language Consortium áá¯áá±á«áºáá±á¬ á¡áá»áá¯ážá¡ááŒááºááá°áá±á¬á¡ááœá²á·á¡á
ááºážáá
áºáá¯á០ááá¯ááºá
ááºáááŸáááŒá®áž ááááºážááááºážáá¬ážáá±á¬ á¡áááºážá¡ááŒá
áºáá¬áá¬á
áá¬ážáá
áºáá¯ááŒá
áºáááºá áááºážááᯠOpen Networking Foundation (ONF) ááŸáá·áº Linux Foundation (LF) ááá¯á·á០áá¶á·ááá¯ážáá±ážáá¬ážááŒá®áž open source networking ááá±á¬áá»ááºáá»á¬ážá¡ááœáẠá¡ááŒá®ážáá¯á¶áž áá®ážá¡ááœá²á·á¡á
ááºážááŸá
áºáá¯ááŒá
áºáááºá
áá¬áá¬á
áá¬ážááᯠáá°áá 2013 áá¯ááŸá
áºááœáẠá
áááºáááºáá®ážáá²á·ááŒá®áž 2014 SIGCOMM CCR á
á¬áááºážááœáẠâProtocol Independent, Packet Routing Processor Programmingâ áá±á«ááºážá
ááºááŒáá·áº áá±á¬áºááŒáá¬ážáá«áááºá
á áááºáááºáá±á¬ááºáá»áááºááŸá á P4 ááẠá¡áááááºááŒá®ážááœá¬ážáá¬ááŒá®áž á¡ááŸáááºá¡áá¯ááºááŒáá·áº ááŒá±á¬ááºážáá²áá¬áᬠááœááºáááºá¡áááºáá¬áá»á¬ážá ááá¯ááºáá»á¬ážááŸáá·áº router áá»á¬ážá¡áá«á¡ááẠááœááºáááºá ááºáá á¹á ááºážáá»á¬ážá០áááºáááºáá»á¬ážááᯠáá¯ááºááœáŸáá·áºááŸá¯ááᯠáá±á¬áºááŒááá·áº á á¶áá áºáá¯ááŒá áºáá¬áááºá
"SDN ááẠááœááºáááºáá»áááºáááºááŒááºážáá¯ááºáááºážááᯠá¡ááœááºááŒá±á¬ááºážáá²á·ááŒá®áž P4 ááẠáááºážááŒá±á¬ááºážáááºážááŒá±á¬ááºážááá¯á· áááá¯ááááºáá¯ááºááá¯ááºá áœááºážááᯠáá°áá±á¬ááºáá¬ááŒááºážááŒáá·áº SDN ááᯠáá±á¬ááºáá áºááá·áºááá¯á· áá°áá±á¬ááºááœá¬ážáááº" áᯠOpen Networking Foundation á á¡ááŸá¯áá±á¬ááºáá«ááá¯ááºáᬠGuru Parulkar á ááŒá±á¬ááŒá¬ážáá²á·áááºá
P4 áá¬áá¬á áá¬ážááᯠáá°áá Googleá Intelá Microsoft Researchá Barefootá Princeton ááŸáá·áº Stanford ááá¯á·á០á¡ááºáá»ááºáá®áá¬áá»á¬ážááŸáá·áº áá¯áá±áá®á¡ááœá²á·á០áááºáá®ážáá²á·ááŒááºážááŒá áºáááºá áááºááœááºáá»ááºááŸá¬ ááá¯ážááŸááºážáááº- áá±á¬á·ááºáá²áá±á¬á·ááºáá²áá±ážáá¬ážáá°ááẠáá áºáááºá¡ááœááºáž áááºáá°ááá¯ááºááá·áº ááœááºáá°áá±á¬áá¬áá¬á áá¬ážááᯠáááºáá®ážááŒá®áž ááœááºáááºáá»á¬ážáá áºáá»áŸá±á¬áẠáááºáááºáá»á¬ážááᯠáááºáá²á·ááá¯á· áá±ážááá¯á·áááºááᯠáááá»á áœá¬áá±á¬áºááŒááẠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá
á¡á ááááºážá P4 ááᯠáá®ážááŒá¬ážáá áºááŸááºá¡ááŒá Ạáá®ááá¯ááºážáá¯ááºáá²á·ááẠ(ááá¯ááá¯áááºááŸá¬ P4 ááœááºáá±ážáá¬ážáá±á¬áááá¯ááááºááᯠASICsá FPGAsá CPUsá NPUs ááŸáá·áº GPUs áá²á·ááá¯á·áá±á¬ áá áºááŸááºá¡áá»áá¯ážáá»áá¯ážááœáẠáá¯ááºáá±á¬ááºááẠáááŒá±á¬ááºážáá²ááá¯ááº)á
áá¬áá¬á áá¬ážááẠáááá¯ááá¯áá±á¬ áá®ážááŒá¬ážáááºážááŒá áºááẠ(ááá¯ááá¯áááºááŸá¬á P4 áááá¯ááááºááẠááŸáááŒá®ážáá¬áž á á¶áááá¯ááá¯áá±á¬áá»á¬ážááᯠáá±á¬áºááŒááá¯ááºááẠááá¯á·ááá¯áẠá áááºááŒáá¯ááºááááºá á¬áááºááŸááºááŒááºážáá¯ááºá¡áá áºáá»á¬ážááᯠáááºááŸááºááẠá¡áá¯á¶ážááŒá¯áááº)á
á ááºááŸá¯áá¯ááºáááºážááœáẠP4 ááᯠá ááºáááá¯ááááºáá±ážááœá²ááŒááºážá¡ááœáẠá¡áá¯á¶ážááŒá¯áááºá á¡áá¬ááẠInternet-RFC ááŸáá·áº IEEE á á¶ááŸá¯ááºážáá»á¬ážááœáẠP4 áááºááŸááºáá»ááºáá»á¬ážáááºáž áá«áááºáá¬áááºááŒá áºáááºá
P4 ááᯠprogrammable ááŸáá·áº fixed function devices ááŸá áºáá¯áá¯á¶ážá¡ááœááºá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááºážááᯠopen source SONiC ááá¯áẠOS ááŸá¡áá¯á¶ážááŒá¯áá±á¬ Switch Abstraction Interface (SAI) APIs ááœáẠááá¯ááºááá¯ááºážááŒá±á¬ááºážááŒááºážá¡ááŒá¯á¡áá°ááᯠáááá»á áœá¬ááŸááºáááºážáááºáááºá¡ááœáẠá¡áá¯á¶ážááŒá¯áá«áááºá P4 ááᯠONF Stratum ááá±á¬áá»ááºááœáẠáá¯á¶áá±ááŸáá·áº áááá¯ááááºáá¯ááºááá¯ááºáá±á¬ á ááºáá á¹á ááºážá¡áá»áá¯ážáá»áá¯ážááŸá á¡ááœááºááŒá±á¬ááºážááŒááºážááá¯ááºáᬠá¡áá°á¡áá»áá·áºáá»á¬ážááᯠáá±á¬áºááŒáááºá¡ááœááºáááºáž á¡áá¯á¶ážááŒá¯áá«áááºá
ááááŠážáá¯á¶ážá¡ááŒáááºá ááá¯ááºááŸáá·áº ááœááºáááºá¡áááºáá¬áá»á¬ážá á¡áá°á¡áá»áá·áºáá»á¬ážááᯠáá±á¬áºááŒááŒááºážááẠááá·áºá¡á¬áž ááŒáá·áºáá»ááºááŒááºážáááŒá¯áá® ááœááºáááºáá áºáá¯áá¯á¶ážá áááá»áá±á¬áá¯ááºáá±á¬ááºááá¯ááºáá±á¬áá¯á¶á á¶áá áºáá¯ááᯠáááºáá®ážááá¯ááºá á±áá«áááºá ááŒá®ážáá¬ážáá±á¬ cloud áá¶á·ááá¯ážáá±ážáá°áá»á¬ážááẠá á»á±ážááŒá®ážáá±á¬ áá¬á·ááºáá²áááá¯á¡ááºáá² áá¬ááºááœá²áááºážá¡ááœááºáž á¡ááŒááºá¡ááŸááºáá¯ááºáá±á¬ááºááá¯ááºááŸá¯ á ááºážáááºááŒááºážá¡ááœáẠá¡áá»áááºááŸáá·áº áá¯ááºáá»á ááááºááᯠáááááá¬áᬠáá»áŸá±á¬á·áá»ááá¯ááºááŒá®áž áá±á¬á·ááºáá²ááºááᯠá¡áá¯á¶ážááŒá¯áᬠááœááºáááºááᯠáá¯á¶ážáá¯á¶ážáá»á¬ážáá»á¬áž á ááºážáááºááŒá®áž á¡ááŸá¬ážááŸá¬ááá¯ááºáá«áááºá
P4 ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áºá ááœááºáááºá ááºáá á¹á ááºážáá±á¬ááºážáá»áá°áá»á¬ážááẠáá¯ááºáá¯ááºá¡á¬ážáá¯á¶ážááŸá áá¯á¶áááºážááŒá±á¬ááºážáááºážááŒá±á¬ááºážááá¯ááºáá¬á¡ááŒá¯á¡áá°ááᯠáá»áŸá±á¬áºááá·áºááá¯ááºáááºá á ááºážáááºááŸá¯á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááᯠááŒááºáááºá¡áá¯á¶ážááŒá¯ááœáá·áºááŒá¯ááŒááºážá á á®áá¶ááá·áºááœá²ááŸá¯áá±á¬á·ááºáá²ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááᯠááá¯ážááŸááºážá á±ááŒá®áž á¡ááŒááºá¡ááŸááºáá¯ááºáá±á¬ááºááá¯ááºááŸá¯ááᯠá¡áá¯á¶ážá áœááºáá±áá»á¬á á±áááºá
áá¯ááºáá«áááºá P4 ááᯠáááºážááŒá±á¬ááºážááŒá±á¬ááºážáá²á· áááºážáááºážá¡áá áºááœá±ááᯠáá±á¬áºááŒáá²á· áááá¯ááááºááœá±áá±ážááá¯á· áá¯á¶ážááá¯ááºáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá P4 ááᯠáá±áá¬á ááºáá¬áá»á¬ážá áá¯ááºáááºážááŸáá·áº áááºáá±á¬ááºááŸá¯áá±ážáá±á¬ ááœááºáááºáá»á¬ážááœáẠáááºáá®áá®áá¬ááŸáá·áº ááá¯ááºážáá¬ááŒááºážáá»á¬ážá¡ááœáẠááœááºáá»ááºá áœá¬ á¡áá¯á¶ážááŒá¯áá«áááºá
áá¯áá±ááá¡ááá¯ááºá¡áááºážáááºáž ááá¯ážáá¬ááŒá®á ááááºáááºážááá¬áá±ážááœááºáááºáá¯áá±ááá¡ááœá²á·á¡áá»á¬ážá¡ááŒá¬ážááẠload balancingá consensus protocols ááŸáá·áº key value caching á¡áá«á¡ááẠP4 áááá¯ááááºáá»á¬ážá¡áá±á«áº á¡ááŒá±áá¶á á áááºááŸá¯ááºááŸá¬ážááœááºáᬠá¡ááá®áá±ážááŸááºážá¡áá áºáá»á¬ážááᯠáá¯ááºáá±áá²á·áááºá áááá¯ááááºáá±ážááœá²ááŒááºážááá¯ááºáᬠáá«áá¬ááá¯ááºážá¡áá áºááᯠáááºáá®ážáá±ááŒá®áž áááºážáá áºáá®ááœááºááŸá¯ááẠáá¬á·ááºáá²á០áá±á¬á·ááºáá²ááºááá¯á· ááœá±á·áá»á¬ážáá±ááŒá®áž ááá»áŸá±á¬áºááá·áºáá¬ážáá±á¬á áááºážáá áºááŒá®áž áááºááŒááºáá±á¬ á áááºáá°ážá áááºáááºážáá»á¬ážá áœá¬ áá±á«áºááœááºáá¬á á±áááºá
áá±á¬á·ááºáá²áá±ážáá¬ážáá° á¡ááá¯ááºážá¡ááá¯ááºážááẠá á¯á ááºážááŸá¯á áá áºáá»á¬ážá ááá¯ááºááá¯ááºážáá»á¬ážá á¡ááŒá¯á¡áá°ááá¯ááºáᬠáá±á¬áºáááºáá»á¬ážá API áá»á¬ážá á ááºážáááºááŸá¯áá±á¬ááºáá»á¬ážá á¡ááá®áá±ážááŸááºážáá»á¬ážááŸáá·áº á¡ááŒá¬ážá¡áá¬áá»á¬áž á¡áá«á¡ááẠáá¯ááºááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á¡ááœáẠáááá¬áááºááŸá¬ážáá±á¬ áá¶á·ááá¯ážááŸá¯áá»á¬áž ááŒá¯áá¯ááºáá¬ážáááºá Alibabaá AT&Tá Barefootá Ciscoá Fox Networksá Googleá Intelá IXIAá Juniper Networksá Mellanoxá Microsoftá Netcopeá Netronomeá VMwareá Xilinx ááŸáá·áº ZTE áá²á·ááá¯á·áá±á¬ áá¯áá¹ááá®áá»á¬ážááẠáá®ážááá·áº developer áá»á¬ážááŸááááºá BUPTá Cornellá Harvardá MITá NCTUá Princetoná Stanfordá Technioná Tsinghuaá UMass ááŸáá·áº USI á¡áá«á¡ááẠááá¹áááá¯ááºáá»á¬ážá០CORDá FD.ioá OpenDaylightá ONOSá OvSá SAI ááŸáá·áº Stratum á¡áá«á¡ááẠopen source ááá±á¬áá»ááºáá»á¬ážááẠP4 ááẠááœááºáááºáá±á¬á¡ááá¯ááºážá¡ááá¯ááºážááá±á¬áá»ááºááŒá áºáááºáá°áá±á¬á¡áá»ááºááᯠáá®ážáá±á¬ááºážááá¯ážááŒáá«áááºá
P4 áá¬áá¬á áá¬ážá¡ááœáẠáá¯á¶ááŸáẠcontroller áá»á¬áž áá»áá¯ážáááº-
áá»áŸá±á¬ááºááœáŸá¬á¡áá¬ážá¡áá¬
áá¬áá¬á
áá¬ážááẠáááºážááŒá±á¬ááºážáááºááŸááºááŒááºážááá¯ááºáᬠá¡ááºááºáá®áá±ážááŸááºážáá»á¬ážá¡ááœáẠáááºááœááºáá¬ážáá±á¬ááŒá±á¬áá·áº ááá¯á¡ááºáá»ááºáá»á¬ážá
á¬áááºážááŸáá·áº áá®ááá¯ááºážááœá±ážáá»ááºááŸá¯áá»á¬ážááẠáá±áá°áá»áááºááœááºáá»áẠáááá¯ááááºážáááºážáá¬áá¬á
áá¬ážáá»á¬ážááŸáá·áº ááŸáá¯ááºážááŸááºáá«á ááœá²ááŒá¬ážáá«áááºá áá¬áá¬á
áá¬ážá á¡áááá¡ááºá¹áá«áááºáá»á¬ážááŸá¬-
- áááºááŸááºážáá»áẠá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯á០ááœááºáááºááŸá¯á
- á¡áá¯á¶ážááŒá¯áá¬ážáá±á¬ áááá¯ááá¯áá±á¬(áá»á¬áž)á ááœááºáááºááŸá¯á
- á¡ááœááºááŒááºáááºááŒááºáááºááá¯ááºááŸá¯á
áááºááŸááºážáá»áẠá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯á០ááœááºáááºáá±áž
P4 áááá¯ááááºáá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ áá®ážááŒá¬ážááœááºáááºá á±ááẠáá®ááá¯ááºážáá¯ááºáá¬ážááŒá®áž ááá¯ááá¯áááºááŸá¬ áááºážááá¯á·ááᯠáá±áá¯áá»áááºááœááºáá»áẠáááá¯áááºáá¬áá»á¬ážá FPGAsá á áá áº-áá±á«áºááŸá áá»á áºááºáá»á¬ážá ááœááºáááºáááá¯áááºáá¬áá»á¬ážááŸáá·áº ASICs áá²á·ááá¯á·áá±á¬ á¡áá»áá¯ážáá»áá¯ážáá±á¬ áá¯ááºáá±á¬ááºáá»ááºá¡ááºáá»ááºáá»á¬ážá¡ááœáẠá á¯á ááºážáá¬ážááá¯ááºáááºá á€ááœá²ááŒá¬ážáá±á¬ á ááºá¡áá»áá¯ážá¡á á¬ážáá»á¬ážááᯠP4 áá áºááŸááºáá»á¬ážá¡ááŒá ẠááááŒááŒá®ážá áá áºááŸááºáá áºáá¯á á®ááẠP4 á¡áááºážá¡ááŒá áºáá¯ááºááᯠáá áºááŸááºááŒá±á¬ááºážááá·áºáá¯á¶á á¶ááá¯á· ááŒá±á¬ááºážááẠááœááºáá®áá¬áá áºáᯠááá¯á¡ááºáááºá ááœááºááá®áá¬ááᯠáá áºááŸááºáááááá¬á ááŒááºááá±á¬á·ááºáá² ááá¯á·ááá¯áẠcloud áááºáá±á¬ááºááŸá¯ááœááºááẠáááºáá±á¬ááºááá¯ááºáááºá P4 áááá¯ááááºáá»á¬ážá¡ááœáẠáá°ááá áºááŸááºá¡áá»á¬ážá¡ááŒá¬ážááẠááá¯ážááŸááºážáá±á¬ áááºáááºááŒá±á¬ááºážááŒááºážá¡ááœááºááŒá áºáá±á¬ááŒá±á¬áá·áºá "P4 áá áºááŸááº" ááẠááá¯ááá¯áááá»áá±á¬áºáááºáž "P4 ááá¯ááº" áá°áá±á¬ áá±á«áá¬áááᯠááŒá¬ážáááŒááºážááŸá¬ áá¬áá¬ááºááŒá áºáááºá
á¡áá¯á¶ážááŒá¯áá¬ážáá±á¬ áááá¯ááá¯áá±á¬(áá»á¬áž)á ááœááºáááºááŸá¯
P4 ááẠáááá¯ááá¯áá±á¬ áá®ážááŒá¬ážááŒá áºáááºá ááá¯ááá¯áááºááŸá¬ áá¬áá¬á áá¬ážááœáẠIPá Ethernetá TCPá VxLAN ááá¯á·ááá¯áẠMPLS áá²á·ááá¯á·áá±á¬ áá¯á¶áááá¯ááá¯áá±á¬áá»á¬ážá¡ááœáẠáá°áááºážáá¶á·ááá¯ážááŸá¯ áááŸááá«á áááºážá¡á á¬ážá P4 áááá¯ááááºáá¬ááẠáááá¯ááááºááŸá ááá¯á¡ááºáá±á¬ áááá¯ááá¯áá±á¬áá»á¬ážá áá±á«ááºážá á®ážáá±á¬áºáááºáá»á¬ážááŸáá·áº á¡ááœááºá¡áááºáá»á¬ážááᯠáá±á¬áºááŒáááºá áááºážááẠá á¯á ááºážáá¬ážáá±á¬ áááá¯ááááºááŸáá·áº áá áºááŸááºáááááá¬á០á¡áááá¹áá¬ááºááŒááºááá¯áᬠá á®áá¶áá±á¬ááºááœááºáááºá
á¡ááœááºááŒááºáááºááŒááºáááºááá¯ááºááŸá¯
áááá¯ááá¯áá±á¬ á¡ááŸá®á¡ááá¯áááºážááŸá¯ááŸáá·áº á ááá¹áááá¬áá¬á áá¬ážáá¯á¶á á¶ááẠááŒááºáááºááŒááºáááºáááºááŸááºááá¯ááºááŸá¯ááᯠááœáá·áºááŒá¯áá±ážáááº- P4 áá áºááŸááºáá»á¬ážááẠá áá áºá¡áá¯á¶ážááŒá¯ááŒá®ážáá±á¬áẠáááºáááºáá¯ááºáá±á¬ááºááŒááºážááᯠááŒá±á¬ááºážáá²ááá¯ááºááá·áºáááºá á€á áœááºážáááºááẠáá¯á¶áá±áá¯ááºáá±á¬ááºáá»áẠáá±á«ááºážá ááºáá¬ážáá áºáá»á¬ážááẠáá±áá°áá»áááºááœááºáá»áẠáááá¯áááºáá¬áá»á¬áž ááá¯á·ááá¯áẠááœááºáááºáááá¯áááºáá¬áá»á¬ážááŸáááá·áº áááºážááŒá±á¬ááºážáá±ážááŒááºážááŸáá·áº á¡á ááºá¡áá¬á¡á¬ážááŒáá·áº áááºá ááºáá±áá«áááºá
áááá¯ááá¯áá±á¬á¡á á¯áá áºáá¯á á áœááºážáá±á¬ááºáááºááᯠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážááᯠáá¬ážáá®ážáá±ážááá·áº áá¬áá¬á áá¬ážááœáẠáááºááá·áºá¡áá¬á០áááŸááá±á¬áºáááºážá á¡ááá¯áá« ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŸá¯áá»á¬ážááᯠáá¬áá¬á áá¬ážáá±ážáá¬ážáá°á០áááŒááºááá¯ááºááá·áºá¡ááŒáẠá áá áºááŸáá·áº áááºážááá¯ááºáá»á¬ážááŸáá·áº áááºážááá¯á·á ááŒááºáááºááŒááºáááºááá¯ááºááŸá¯ááᯠáá±á¬ááºáá¯á¶ážááœáẠáá»áŸá±á¬á·áá»ááá¯ááºáááºá
ááœááºáááºá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶áá»á¬ážááœáẠáá»ááºáá»ááºááŒáá·áºááŒáá·áºá¡áá¯á¶ážááŒá¯ááŸá¯á¡áá±á«áº á¡á¬áá¯á¶á á°ážá áá¯ááºááŸá¯ááŒáá·áº áááºážááááºáá®ážáá°áá»á¬ážááẠáá¬áá¬á áá¬ážá á€ááá¹ááá¬áá»á¬ážááᯠáááŠážááœáẠáááºááŸááºáá²á·áááºá
áá¬áá¬á áá¬ážááᯠáá¯áá¹ááá®áá»á¬ážá áœá¬ááœáẠá¡áá¯á¶ážááŒá¯áá±ááŒá®ááŒá áºáááºá
1) Hyperscale áá±áá¬á ááºáá¬áá»á¬áž;
ááá¯ááºáá¯áá¹ááá® Tencent ááẠááá¹áá¬áá±á«áºááœáẠá¡ááŒá®ážáá¯á¶áž áááºážááŸá®ážááŒáŸá¯ááºááŸá¶ááŸá¯ áá¯áá¹ááá®ááŒá áºááŒá®áž á¡ááŒá®ážáá¯á¶áž áááºá áẠá¡áááºážá¡ááŸá®áž áá¯áá¹ááá® áá áºáá¯ááŒá áºáááºá Tencent á áá¯ááºáááºážááœá²áá»á¬ážááẠááá¯ááºááŸáá·áº ááá¹áá¬áááŸááºážááŸá á¡ááŒá¬ážááá¯ááºáá¶áá»á¬ážááŸá á¡áá»áá¯ážáá»áá¯ážáá±á¬ á¡ááºáá¬áááºáááºáá±á¬ááºááŸá¯áá»á¬ážá áá¬ááºáááºáá¯ááŸáá·áº á¡á®áááºáááœááºážáá áºáá»á±á¬áºááŒá±áá±ážáááºáááºááœáẠááá¯ážáááºááŸá¯áá»á¬ážá¡áá«á¡ááẠáááºážááá¬ááŒáá·áºá á®ážááœá¬ážáá±ážáá¯ááºáááºážáááºáááºá¡áá®ážáá®ážááœáẠá¡áá°ážááŒá¯áá±á¬ááºááœááºáá«áááºá
P4 ááŸáá·áº programmable routing áá»á¬ážááẠáá¯áá¹ááá®á ááœááºáááºáááºáá±á¬ááºááŸá¯ááœáẠá¡áá¯á¶ážááŒá¯ááá·áº á¡ááá·áºááŒáá·áºáááºážááá¬áá»á¬ážááŒá áºáááºá
á¡á ááŒá¯áá°áá»á¬ážáá²á០áá áºáŠážá¡áá±ááŒáá·áºá á¡áá°ážáááŒáá·áº á¡áá°ážáááŒáá·áº áá±áá¬á ááºáᬠáááá¯áá¬áá®ááá¯ááºážááœáẠP4 ááᯠááœááºáááºáá»áááºáááºááŒááºážáá¯ááºáááºážááœáẠáá»ááºááŒááºá áœá¬ áááºáá¶áá»áá·áºáá¯á¶ážááŒá±á¬ááºáž Google á០áá¯ááºáá°áá«áááºá
2) áá°ážáááºážáá±á¬ááºážáááºáá±ážáá¯áá¹ááá®áá»á¬áž;
Goldman Sachs ááẠopen source á¡ááá¯ááºážá¡ááá¯ááºážááŸáá·áº áááºááœá²ááŒá®áž ááœááºáááºá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááᯠáááºážáá áºáá®ááœááºáᬠáá¯á¶ážá áœá²áá°áá»á¬ážá¡ááœáẠááá¯ááá¯áá±á¬ááºážááœááºáá±á¬ ááŒá±ááŸááºážáá»ááºáá»á¬ážááᯠáá±ážáá±á¬ááºáááºá¡ááœáẠáá¯á¶á á¶ááŸá¯ááºážáá»á¬ážááŸáá·áº ááŒá±ááŸááºážáá»ááºáá»á¬ážááᯠáá±á¬áºáá±á¬ááºááŒááºážá á¡áá»áá¯ážáá»á±ážáá°ážááᯠá¡áá¯á¶ážááŒá¯áááºá
3) áá¯ááºáá¯ááºááŸá¯;
ááœááºáááºáá»áááºáááºááŒááºážáá¯ááºáááºážáá áºáá¯áá¯á¶ážááẠáááºááá·áºááá¯á·ááŒááºážá¡ááŒá¯á¡áá°ááᯠáá°ážáá°ážááŒá¬ážááŒá¬ážáááºááŸááºáá±ážááá·áº P4 áá²á·ááá¯á·áá±á¬ áá¬áá¬á áá¬ážáá áºáá¯á០á¡áá»áá¯ážáá»á±ážáá°ážáááŸááááºááŒá áºáááºá Cisco ááẠá€áá¬áá¬á áá¬ážááᯠá¡áá¯á¶ážááŒá¯áááºá¡ááœáẠáááºážááá¯ááºáá¯ááºááá¯ááºážáá»á¬ážááᯠááœáŸá²ááŒá±á¬ááºážáá±ážáááºáᯠáá¯á¶ááŒááºáá«áááºá
Juniper Networks ááẠáá¯ááºáá¯ááºá¡áá»á¬ážá¡ááŒá¬ážááœáẠP4 ááŸáá·áº P4 Runtime áá«áááºááŒá®áž Juniper ááŒáŸá¯ááºááœááºážáá¬ážáá±á¬ áááá¯áááºáá¬ááŸáá·áº áááºážááá±á¬á·ááºáá²ááºáá¯ááºáá»á¬ážááá¯á· áááá¯ááááºá áá áºááŒáá·áº áááºáá±á¬ááºááœáá·áºáá±ážáááºá
Ruijie Networks ááẠP4 ááᯠá¡ááá¯ááºá¡áᬠáá±á¬ááºáá¶áá°ááŒá áºááŒá®áž áááºážááẠááœááºáááºáá»á¬ážááá¯á· áá±ážáá±á¬ááºááá·áº á¡áá»áá¯ážáá»á±ážáá°ážáá»á¬ážááŒá áºáááºá P4 ááŒáá·áº áá¯áá¹ááá®ááẠáá±á¬ááºáááºáá»á¬ážá áœá¬á¡ááœáẠá¡áá±á¬ááºážáá¯á¶ážá¡ááá·áºááŒá±ááŸááºážáá»ááºáá»á¬ážááᯠáááºáá®ážááŒá®áž áá±ážá¡ááºááá¯ááºáááºá
4) áááºááœááºáá±ážáááºáá±á¬ááºááŸá¯áá±ážáá°áá»á¬ážá
AT&T ááẠáááºážáááœááºáááºáá»á¬ážááœáẠááŒááºááá¯ááá·áºá¡áá°á¡áá»áá·áºááᯠáááºááŸááºááẠP4 ááᯠááááá¯á¶ážá¡áá¯á¶ážááŒá¯ááá·áº P4 ááᯠá¡á á±á¬ááá¯ááºážáááºáá¶áá°ááŒá áºááŒá®áž áááºážáááœááºáááºáá±á«áºááŸá P4 áááá¯ááááºáá±ážááá¯á·ááŒááºážááá¯ááºáᬠáááááá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áááºááŒá áºáááºá
Deutsche Telekom ááœááºá Access 4.0 áááá¯ááááºá áá áºá áááºáá áºááá¯ááºážá¡áá±ááŒáá·áº áá±á¬á·ááœááºáááºáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠááŸá±á·ááŒá±ážáá¯á¶á á¶áá¯ááºááẠáá¬áá¬á áá¬ážááᯠá¡áá¯á¶ážááŒá¯áááºá
5) Semiconductor áá¯ááºáááºážá
áá¬áá¬á áá¬ážááẠBarefoot ááᯠnetwork routing plane ááá¯á· áá±á¬á·ááºáá²ááºá áœááºážáááºáá»á¬áž áá±ážáá±á¬ááºáááºá¡ááœáẠáá«áá¬ááá¯ááºážá¡áá áºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºá á±áá²á·áááºá
Xilinx ááẠP4.org ááááºáá±á¬ááºáá°ááŠážááŒá áºááŒá®áž P4 áá¬áá¬á áá¬ážááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážááœáẠáááºááŒáœá áœá¬áá«áááºáá²á·ááŒá®áž áááºážááᯠSmartNIC ááŸáá·áº NFV áá¬á·ááºáá²á¡ááœáẠFPGA-based programmable platforms áá»á¬ážá¡ááŒá Ạá¡áá±á¬ááºá¡áááºáá±á¬áºáá²á·ááŒá®áž SDNet áá®ááá¯ááºážááá áºá áááºáá áºááá¯ááºážá¡ááŒá Ạááááá¯á¶áž P416 compilers áá»á¬ážáá²á០áá áºáá¯ááᯠáá¯ááºáá±áá²á·áááºá
6) áá±á¬á·ááºáá²á
P4 ááẠááœááºáááºá¡ááœááºáž á¡áááá¹áá¬ááºááŒáá·áºáááŒá®áž ááá¯á¡ááºáá±á¬ á¡ááœááºáá°ážááŒá±á¬ááºážááŸá¯ááᯠáá±á¬ááºážááŸááºáá±ážááá·áº ááŒá®ážáá¬ážáá±á¬á áœááºážá¡ááºá áááºážáá áºáá®ááœááºááŸá¯ááŸáá·áº á¡ááá¯ááºá¡áááºážááᯠáááºáá®ážáá±ážáááºáᯠVMware á០áá¯á¶ááŒááºáááºá áááºážáá áºáá®ááœááºááŸá¯ááŸáá¯ááºážáá áºáá áºáá¯ááẠá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶á áœááºážáááºááᯠááá¯ážáá»á²á·áᬠáá±á¬ááºáá¯á¶ážáá±á«áºáá¯ááºáá¯ááºáá»á¬ážááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºáá±ážááá·áº áá±á¬á·ááºáá²ááºá¡ááŒá±áá¶áá»ááºážáááºááŸá¯áá»á¬ážááŒáá·áº áá±á¬ááºážááŸááºáá±áá±á¬ááŒá±á¬áá·áº VMware ááẠá€áá¯ááºáááºážááŸá¯ááºááŸá¬ážááŸá¯ááá áºá áááºáá áºááá¯ááºážááŒá áºáááºá
ááá¯á·ááŒá±á¬áá·áºá P4 ááẠáá áºááŸááº-á¡ááŸá®á¡ááá¯áááºážááŒá®áž áááá¯ááá¯áá±á¬-á¡ááŸá®á¡ááá¯áááºážáá±á¬ áááá¯ááá¯áá±á¬-á¡ááŸá®á¡ááá¯áááºážáá±á¬ áááá¯ááá¯áá±á¬-á¡ááŸá®á¡ááá¯áááºážáá±á¬ áááá¯ááá¯áá±á¬-á¡ááŸá®á¡ááá¯áááºážáá±á¬ programming language áá áºáá¯ááŒá áºááŒá®áž packet routing á¡ááŒá¯á¡áá°ááᯠáááá¯ááááºáá áºáá¯á¡ááŒá Ạáá°ážáá°ážááŒá¬ážááŒá¬ážáááºááŸááºáááºá áááºážááẠáá áºááŸááºáá»á¬ážá áœá¬á¡ááœáẠá á¯á ááºážááá¯ááºáááºá ááá±á·ááœáẠáá áºááŸááºáá»á¬ážááœáẠáá¬á·ááºáá²ááŸáá·áº áá±á¬á·ááºáá²ááá¯ááºáá»á¬ážá hypervisor ááá¯ááºáá»á¬ážá NPUsá GPUsá FPGAsá SmartNICs ááŸáá·áº ASICs áá»á¬áž áá«áááºáááºá
áá¬áá¬á áá¬ážá á¡áááá¡ááºá¹áá«áááºáá»á¬ážááẠáááºážáá¡áá¯á¶ážáá»ááá®áá±ážááŸááºážáááºáááºááᯠáááá¬áááºááŸá¬ážá áœá¬ áá»á²á·ááœááºááŒá®áž ááœááºáááºáááá¯áá¬áá»á¬ážá¡ááœááºáž áááºážá áá»ááºááŒááºáá±á¬á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááᯠáá±áá»á¬á á±áááºá
á áááº
P4 ááẠááœáá·áºáááºážáá±á¬ ááá±á¬áá»ááºááŒá
áºááŒá®áž áááºááá¯ááºáᬠá¡áá»ááºá¡áááºá¡á¬ážáá¯á¶ážááẠáááºááá¯ááºáá±á«áºááœáẠááŸááá±áááºá
Repository ááá·áºááº
kernel áá¡ááá abstractions ááá¯ááŒáá·áºááŒáá«á áá¯á·á
áá±á«ááºážá á®ážáá»á¬ážááᯠáááºááŸááºááŒááºážá â áááºážááá¯á·á á¡áá°á¡áá®ááŒáá·áºá áááá¯ááá¯áá±á¬ áá±á«ááºážá á®ážáá»á¬ážááᯠáá¯á¶ážááŒááºáááºá
áá±á«ááºážá á®áž á¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºáááº-
- áááºáááºáá±á¬áºáááºáá»á¬ážááŸáá·áº áá±á«ááºážá á®ážá¡ááœááºá¡áááºáá»á¬ážá áá±á¬áºááŒáá»ááº
- áá¯á¶áá±ááŸáá·áº ááŒá±á¬ááºážáá²ááá¯ááºáá±á¬ ááœáá·áºááŒá¯áá¬ážáá±á¬ á¡ááœááºáá»á¬áž
á¥ááá¬á¡á¬áž
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;
}
ááœá²ááŒááºážá áááºááŒá¬áááºá - áá°ááá¯á·ááá¬áááºááŸá¬ áá±á«ááºážá á®ážáá»á¬ážááᯠááá¯ááºážááŒá¬ážáááºááŒá áºáááºá
á¡á±á¬ááºáá±á¬áºááŒáá« parser á¥ááá¬ááẠá ááºááá±á¬ááºáá¯á¶ážá¡ááŒá±á¡áá±ááá¯á· áááŠážá¡ááŒá±á¡áá±áá áºáá¯á០áá±á¬ááºáá¯á¶ážá¡ááŒá±á¡áá±ááŸá áºáá¯á¡áááºáá áºáá¯ááá¯á· áá°ážááŒá±á¬ááºážááŸá¯ááᯠáá¯á¶ážááŒááºáá±ážáááá·áºáááº-
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;
}
}âŠ
}
ááá¬áž â áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááŸáá·áº á¡áá¯á¶ážááŒá¯áá°áá®ážáá»á¬ážááᯠáá»áááºáááºááá·áº á ááºááŒááºáááºáá»á¬áž áá«ááŸááááºá áá¯ááºáááºáá»á¬áž - áááºáá±á·áá»áºááᯠáááºáá²á·ááá¯á· ááá¯ááºááœááºááááºáᯠáá±á¬áºááŒáá»ááºá
ááá¬ážáá»á¬ážááœáẠáááºáááºáááºááá¯á·ááŒááºážá¡ááœáẠááŒááºáááºáá»á¬áž (á á®áá¶ááá·áºááœá²ááŸá¯á¡ááá·áºááœáẠáááºááŸááºáá¬ážáááº) áá«áááºáááºá Match-Action áá°áá áºááᯠáá±á¬áºááŒáá«
áááºáá±á·áá»áºáá»á¬ážááᯠááá¯ááºáá®áááº-
- á¡ááá¡áá»ááá¯ááºáá®ááŸá¯
- á¡ááŸááºáá¯á¶áž ááŸá±á·áá¯á¶ážááœá² (LPM)
- áá¯á¶ážáááá¯ááºáá®ááŸá¯ (áá»ááºááŸá¬áá¯á¶ážá áœááº)
table ipv4_lpm{
reads{
ipv4.dstAddr: lpm;
} actions {
forward();
}
}
ááŒá áºááá¯ááºáá»á±ááŸááá±á¬ áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠááá¬ážáá»á¬ážááœáẠááŒáá¯áááºáááºááŸááºáá¬ážááá«áááºá
áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááẠáá¯ááºááŸáá·áº áá±áá¬áá»á¬áž áá«áááºáááºá áá±áá¬ááẠá á®áá¶ááá·áºááœá²ááŸá¯á¡ááá·áº (á¥ááᬠIP ááááºá á¬áá»á¬áž/ ááá¯á·ááºáá¶áá«ááºáá»á¬áž) á០áá¬áá«áááºá á¡áá»áá¯á·áá±á¬á ááœááºážáááºááá«áá±á¬ áá°áá¡á áá»á¬ážááᯠáá¯ááºáá±á¬ááºáá»ááºááœáẠááá¯ááºááá¯ááºáááºááŸááºááá¯ááºáá±á¬áºáááºáž ááœáŸááºááŒá¬ážáá»ááºá¡áá±á¡ááœááºááᯠááá·áºááŸááºážááá¯ááºááá«áááºá ááá¯á·ááŒá±á¬áá·áºá áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááœáẠloops ááá¯á·ááá¯áẠconditional statements áá»á¬ážááá«áááºááá¯ááºáá«á
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 module áá»á¬áž â ááŸá¬ááœá±áá±ážáá±á¬á·áááºáá®ážááẠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá ááá¬ážáá áºáá¯ááœáẠááŸá¬ááœá±áááºá áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºáá«á
Module á áá¬áá¬áẠá¥ááá¬áá áºáá¯ááᯠáá¯á¶ááœáẠááŒáá¬ážáááº-
á á®ážáááºážááŸá¯ááᯠááááºážáá»á¯ááºáá«á â Match-Action module áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá·áº á¡á á®á¡á á¥áºááᯠááœáŸááºááŒáááºá á€áááºááŸá¬ ááŒáá·áºáá¬ážáá±á¬á¡ááá·áº logic ááŸáá·áº Match-Action sequence ááᯠáááºááŸááºáá±ážáá±á¬ áááŸááááŒá áºáááá¯ááááºáá áºáá¯ááŒá áºáááºá ááááºážáá»á¯ááºááŸá¯á¡ááá·áºááẠááááºážáá»á¯ááºááŸá¯á¡ááá·áºááᯠáááºááŸááºááŒááºážááŒáá·áº á¡áá¬ááá¹áá¯á¡á¬ážáá¯á¶ážááᯠáá»áááºáááºáá±ážáááºá
ááŒááºáá¡áá¬ááá¹áᯠááŸááºážáááºážá áœá¬áááºááŸááºáá¬ážáá±á¬ áááá¯áá¬ááŸáá·áº API ááŒá¬ážáá¶áá»á¬ážáá«ááŸááá±á¬ áá®ážááŒá¬ážá¡áá¬ááá¹áá¯áá»á¬ážááŒá áºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá checksum ááœááºáá»ááºááŸá¯á ááŸááºáá¯á¶áááºáá»á¬ážá áá±á¬ááºáá¬áá»á¬ážá áá±á¬ááºáá¬áá»á¬ážá
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
}
áááºáá¬áá±áᬠ- áááºáá±á·áá»áºáá
áºáá¯á
á®ááŸáá·áºáááºá
ááºáá±á¬ áá±áá¬ááœá²á·á
ááºážáá¯á¶áá»á¬ážá
áááºáá¬áá±áᬠá¡áá»áá¯ážá¡á á¬áž á áá»áá¯áž ááŸááááºá
á
áááºááŒáá¯áẠáááºáá¬áá±áᬠ(áááºáá±á·áá»áºá¡á¬ážáá¯á¶ážá¡ááœáẠááá¬áá»ááºážááœá²á·á
ááºážáá¯á¶)
ááá¯áá»ááºáá¬ááᯠáá®ááŸá¬áááºááá¯á·ááá«áááºá
ááá¯ááºááá¯ááºážááá»áŸá±á¬ááºáá¯á¶áž áááá¯ááºáá«áááºá
áááºáááá¯ááºááá¯ááºáááºááœááºáá»ááºáá»á¬ážá¡ááœááºá¡áá¯á¶ážááŒá¯áááºá¡áááºááŒá±áááºá á¥ááá¬á¡á¬ážááŒáá·áº package hash ááá¯ááááºážáááºážáááº
á¡ááœááºážááá¯ááºáž áááºáá¬áá±áᬠ- áááá¯áá¬ááá¬á០áá¶á·ááá¯ážáá±ážáááºá
á¡áááºáá±á«ááºá á¡ááœááºáá±á«ááºááᯠá€áá±áá¬ááœáẠáááºááŸááºáá¬ážáááºá
áááºáááºááᯠáááºážá
á®áá¬ážááá·áºá¡áá« á¡áá»áááºáá¶ááááºá áááºážá
á®ááŸá¯ á¡áááº
multicast hash / multicast áááºážá
á®
Package áŠážá
á¬ážáá±ážá áááºáá±á·áá»áº á¡áá±ážáá«ááŸá¯
á¡ááœááºáá±á«áẠáááºááŸááºáá»áẠ(á¥ááᬠá¡ááœááºáááºážá
á®)
P4 compiler
P4 compiler (P4C) ááẠáá¯ááºáá±ážáááº-
- áá±áᬠáá±áá¬ááºááŒá±ážáá»áááº
- áá±áá¬áá±áá¬ááºááŸá á ááºá¡ááŒá±á¡áá±á¡á¬áž á á®áá¶ááá·áºááœá²áááºá¡ááœáẠAPI
P4 áá¬áá¬á áá¬ážááŒáá·áº áá±á¬á·ááºáá²ááºááá¯ááºáá áºáá¯á á¥ááá¬
á¡áááºážá¡ááŒá áºáá¯ááºáá»á¬ážááᯠrepository ááŸáá±á«ááºážáá¯ááºáá¯ááºááá¯ááºáááºá
p4lang/p4c-bm- bmv2 á¡ááœáẠJSON configuration ááᯠáááºáá®ážáááºá
p4lang/bmv2- bmv2 áá¬ážááŸááºáž JSON ááœá²á·á
ááºážááŸá¯áá»á¬ážááᯠáá¬ážáááºááá¯ááºáá±á¬ áá±á¬á·ááºáá²ááá¯ááºáá
áºáá¯
áá¯á¶ááẠááá±á¬áá»ááºá á¯á ááºážááŸá¯áá¯á¶á á¶ááᯠááŒáááº-
ááá¬ážáá»á¬ážá á á¬áááºááŒááºážá á¬áááºážáá»á¬ážá áá±á¬ááºáá¬áá»á¬ážááŒáá·áº ááá¯ááºááœááºááŒááºáž-
- 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>
áá±á¬á·ááºáá²áá°ážááŒá±á¬ááºáž API ááᯠá¡áááºááŒá±á
áœá¬á¡áá¯á¶ážááŒá¯áááºá¡ááœáẠá¡áááºážá¡ááŒá
áºáá¯ááºááœáẠsimple_switch_CLI áááá¯ááááºáá«ááŸááááºá
á€ááŸáá·áº á¡ááŒá¬ážá¥ááá¬áá»á¬ážááᯠááá¯ááŸá±á¬ááºáá¯á¶á០áááºáá±á«ááºážáá¯ááºáá¯ááºááá¯ááºáá«áááºá
PS ááá¯ááœá±áá¬áá®á¡á á±á¬ááá¯ááºážááœááºá Intel ááẠHyperscale Cloud á¡áá¯á¶ážááŒá¯áá°áá»á¬ážáááá¯á¡ááºáá»ááºáá»á¬ážááá¯á¡ááŒááºááŒáá·áºáááºážáááºááŒáá¯ážáááºážááŸá¯ááœáẠBarefoot Networks ááá¯ááá°áááºááá±á¬áá°áá®áá»ááºáá áºáá¯áááºááŸááºáá±ážááá¯ážáá²á·áááºá Navin Shenoy ( Intel áá±á¬áºááá¯áá±ážááŸááºážááŸá Data Center Group á á¡ááŸá¯áá±á¬ááºáá¯á¥áá¹ááá¹áááŸáá·áº á¡ááœá±ááœá±áááºáá±áá»á¬) á ááŒá±á¬ááŒá¬ážáá²á·ááá·áºá¡ááá¯ááºážá áááºážááẠIntel ááẠááá¯ááá¯ááŒá®ážáá¬ážáá±á¬ á¡áá¯ááºááá¬áááŸáá·áº áá±áá¬á ááºáᬠáá¯á¶ážá áœá²áá°áá»á¬ážá¡ááœáẠá¡ááœáá·áºá¡áááºážáá»á¬ážááᯠáá±ážá áœááºážááá¯ááºáááºááŒá áºáááºá
áá»áœááºá¯ááºáááá¯ááºáá±ážááá¯ááºáá¬á¡ááŒááºá¡áá Intel ááẠFPGA áá»á áºááºáá»á¬ážáá¯ááºáá¯ááºáá¬ááœáẠáŠážáá±á¬ááºáá°áá áºáŠážááŒá áºááŒá®áž áááºážááœáẠáá±á¬ááºážááœááºáá±á¬ Quartus áááºáááºážáá»ááºááŸáááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·ááá±á·ááá·áºáá«á ááá¯ááá¯áááºááŸá¬ Intel áá±á¬ááºááŸááá¬ááŒááºážááŸáá·áºá¡áá° Barefoot ááẠáááºážááá¯ááºáá¯ááºááá¯ááºážááᯠááá¯ážáá»á²á·áá¯á¶áá¬áá Quartus ááŸáá·áº P4 Studio ááœááºáááºáž Toffino ááŸáá·áº Toffino 2 ááá¯ááºážá¡ááœáẠáá±ážáááºáá±á¬ á¡ááºááááºáá»á¬ážááŸáá·áº áááºááá¯ážááŸá¯áá»á¬áž áááŸááááá·áºáááºáᯠáá»áœááºá¯ááºááá¯á· áá»áŸá±á¬áºááá·áºááá¯ááºáááºáᯠááá¯ááá¯áá«áááºá
P4 á¡ááá¯ááºážá¡ááá¯ááºáž - áá¯áá¹ááá®áááá¬ážáááºá¡ááœá²á·áááº
source: www.habr.com