Linguaxe de programación P4

Linguaxe de programación P4
P4 é unha linguaxe de programación deseñada para programar regras de enrutamento de paquetes. A diferenza dunha linguaxe de propósito xeral como C ou Python, P4 é unha linguaxe específica de dominio cunha serie de deseños optimizados para o enrutamento de rede.

P4 é un idioma de código aberto licenciado e mantido por unha organización sen ánimo de lucro chamada P4 Language Consortium. Tamén conta co apoio da Open Networking Foundation (ONF) e da Linux Foundation (LF), dúas das maiores organizacións paraugas para proxectos de redes de código aberto.
A linguaxe foi acuñada orixinalmente en 2013 e descrita nun documento SIGCOMM CCR de 2014 titulado "Protocol Independent, Packet Routing Processor Programming".

Desde o seu inicio, P4 creceu e evolucionou exponencialmente, converténdose rapidamente nun estándar para describir a transmisión de paquetes por dispositivos de rede, incluíndo adaptadores de rede, conmutadores e enrutadores.

"SDN transformou a industria das redes e P4 leva a SDN ao seguinte nivel ao achegar a programabilidade ao enrutamento", dixo Guru Parulkar, director executivo da Open Networking Foundation.

A linguaxe P4 foi creada orixinalmente por un grupo de enxeñeiros e investigadores de Google, Intel, Microsoft Research, Barefoot, Princeton e Stanford. O obxectivo era sinxelo: crear unha linguaxe fácil de usar que un desenvolvedor de software podería aprender nun día e utilizar para describir con precisión como se envían os paquetes a través das redes.

Desde o principio, P4 foi deseñado para ser independente do obxectivo (é dicir, un programa escrito en P4 podería compilarse sen cambios para executarse nunha variedade de obxectivos como ASIC, FPGA, CPU, NPU e GPU).

A linguaxe tamén é independente do protocolo (é dicir, un programa P4 pode describir protocolos estándar existentes ou usarse para especificar novos modos de enderezo personalizados).

Na industria, P4 úsase para a programación de dispositivos. Quizais no futuro os estándares Internet-RFC e IEEE tamén inclúan a especificación P4.

P4 pódese usar tanto para dispositivos programables como de función fixa. Por exemplo, úsase para rexistrar con precisión o comportamento da canalización de conmutadores nas API Switch Abstraction Interface (SAI) utilizadas polo SO de código aberto SONiC switch OS. P4 tamén se usa no proxecto ONF Stratum para describir o comportamento de conmutación a través dunha variedade de dispositivos fixos e programables.

Por primeira vez, describir o comportamento do switch e dos adaptadores de rede permítelle crear un modelo executable preciso de toda a rede antes da implantación. Os grandes provedores de nube poden probar e depurar a rede enteiramente mediante software, reducindo significativamente o tempo e o custo das probas de interoperabilidade no laboratorio sen necesidade de hardware caro.

Ao usar P4, os provedores de equipos de rede poden esperar un comportamento de enrutamento subxacente común en todos os produtos, permitindo a reutilización da infraestrutura de proba, simplificando o desenvolvemento de software de xestión e, en definitiva, garantindo a interoperabilidade.

Por suposto, P4 pódese usar para escribir programas que describen formas completamente novas de enrutamento. Por exemplo, P4 úsase amplamente para telemetría e medicións en centros de datos, empresas e redes de provedores de servizos.

A comunidade investigadora tamén se intensificou. Varios grupos de investigación líderes en redes académicas publicaron novas aplicacións interesantes baseadas en programas P4, incluíndo equilibrio de carga, protocolos de consenso e almacenamento en caché de valores clave. Estase creando un novo paradigma de programación, a innovación está pasando do hardware ao software, o que permite que xurdan moitas ideas inesperadas, novas e enxeñosas.

A comunidade de desenvolvedores fixo contribucións significativas ao desenvolvemento de código, incluíndo compiladores, pipelines, modelos de comportamento, API, marcos de proba, aplicacións e moito máis. Empresas como Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx e ZTE teñen desenvolvedores dedicados; de universidades como BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass e USI; e proxectos de código aberto como CORD, FD.io, OpenDaylight, ONOS, OvS, SAI e Stratum destacan o feito de que P4 é un proxecto comunitario independente.

Xeración típica de controladores para a linguaxe P4:

Linguaxe de programación P4

Perspectivas de aplicación

Linguaxe de programación P4
Dado que a linguaxe está pensada para enrutar aplicacións, a lista de requisitos e opcións de deseño é diferente en comparación coas linguaxes de programación de propósito xeral. As principais características da lingua son:

  1. Independencia da implementación do obxectivo;
  2. Independencia do(s) protocolo(s) utilizado(s);
  3. Reconfigurabilidade de campo.

Independencia da implantación do obxectivo

Os programas P4 están deseñados para ser independentes da implementación, o que significa que se poden compilar para moitos tipos diferentes de motores de execución, como procesadores de propósito xeral, FPGA, system-on-chips, procesadores de rede e ASIC. Estes diferentes tipos de máquinas coñécense como obxectivos P4, e cada destino require un compilador para converter o código fonte P4 nun modelo de conmutación de destino. O compilador pódese integrar no dispositivo de destino, no software externo ou mesmo nun servizo na nube. Debido a que moitos dos obxectivos orixinais dos programas P4 eran para a simple conmutación de paquetes, é moi común escoitar o termo "cambio P4" aínda que "obxectivo P4" é máis preciso.

Independencia do(s) protocolo(s) utilizado(s).

P4 é independente do protocolo. Isto significa que o idioma non ten soporte nativo para protocolos comúns como IP, Ethernet, TCP, VxLAN ou MPLS. Pola contra, o programador P4 describe os formatos de cabeceira e os nomes de campo dos protocolos necesarios no programa, que á súa vez son interpretados e procesados ​​polo programa compilado e o dispositivo de destino.

Reconfigurabilidade de campo

A independencia do protocolo e o modelo de linguaxe abstracta permiten a reconfigurabilidade: os obxectivos P4 deberían poder cambiar o procesamento de paquetes despois de que o sistema estea implantado. Esta capacidade foi tradicionalmente asociada co enrutamento a través de procesadores de propósito xeral ou procesadores de rede en lugar de circuítos integrados de función fixa.

Aínda que non hai nada na linguaxe que impida a optimización do rendemento dun determinado conxunto de protocolos, estas optimizacións son invisibles para o autor da linguaxe e poden, en definitiva, reducir a flexibilidade do sistema e dos obxectivos e a súa reconfigurabilidade.

Estas características da lingua foron inicialmente establecidas polos seus creadores, centrándose no seu uso xeneralizado na infraestrutura de rede.

A linguaxe xa se usa en moitas empresas:

1) Centros de datos de hiperescala;

A empresa chinesa Tencent é a maior empresa de investimento do mundo e unha das maiores empresas de capital risco. As filiais de Tencent, tanto en China como noutros países do mundo, están especializadas en varias áreas de negocios de alta tecnoloxía, incluíndo varios servizos de Internet, desenvolvementos no campo da intelixencia artificial e entretemento electrónico.

P4 e o enrutamento programable son tecnoloxías avanzadas que se utilizan na arquitectura de rede da empresa.

Como un dos creadores, Google ten o orgullo de observar a rápida adopción de P4 na industria das redes e, en particular, no deseño arquitectónico de centros de datos.

2) Sociedades comerciais;

Goldman Sachs aproveita o traballo coa comunidade de código aberto e o desenvolvemento de estándares e solucións comúns para innovar a infraestrutura de rede e ofrecer mellores solucións aos clientes.

3) Produción;

Toda a industria das redes beneficiaríase dunha linguaxe como P4 que define de forma única o comportamento de reenvío. Cisco tamén cre na transferencia das súas liñas de produtos para usar este idioma.

Juniper Networks incluíu P4 e P4 Runtime nunha serie de produtos e ofrece acceso mediante programación ao procesador embebido Juniper e ao seu código de software.

Ruijie Networks é un firme partidario de P4 e dos beneficios que aporta ás redes. Con P4, a empresa pode crear e ofrecer as mellores solucións da súa clase a unha ampla gama de clientes.

4) Provedores de telecomunicacións;

AT&T foi un dos primeiros en adoptar P4, un dos primeiros en usar P4 para definir o comportamento que quería ver nas súas redes e en utilizar dispositivos de reenvío programables P4 na súa rede.

En Deutsche Telekom, a linguaxe úsase para prototipar as funcións clave de rede como parte do programa Access 4.0.

5) Industria de semicondutores;

A linguaxe permitiu a Barefoot implementar un novo paradigma para ofrecer capacidades de software ao plano de enrutamento da rede.

Xilinx foi un dos fundadores de P4.org e participou activamente no desenvolvemento da linguaxe P4 e implementouno en plataformas programables baseadas en FPGA para hardware SmartNIC e NFV, lanzando un dos primeiros compiladores P416 como parte do deseño SDNet.

6) Software.

VMware cre que P4 crea unha enorme enerxía, innovación e comunidade que está a impulsar unha transformación significativa e necesaria na rede. VMware formou parte deste movemento da industria desde o principio, xa que unha nova onda de innovación está impulsada por enfoques baseados en software que amplían as capacidades de infraestrutura e impléntano nos produtos máis recentes.

Así, P4 é unha linguaxe de programación independente do protocolo e do obxectivo que é utilizada pola industria e a academia para definir de forma única o comportamento do enrutamento de paquetes como un programa, que á súa vez pode compilarse para varios destinos. Hoxe, os obxectivos inclúen interruptores de hardware e software, interruptores de hipervisor, NPU, GPU, FPGA, SmartNIC e ASIC.

As principais características da linguaxe amplían significativamente o alcance da súa aplicación e aseguran a súa rápida implementación en arquitecturas de rede.

primeiros pasos

P4 é un proxecto aberto, toda a información relevante está na páxina web P4.org

Ligazón ao repositorio https://github.com/p4lang, onde podes obter exemplos de código fonte e titoriais.

Enchufar para Eclipse con soporte P4, pero podemos recomendar Estudio P4 de Descalzo.

Linguaxe de programación P4

Vexamos as principais abstraccións do núcleo:

Definición de cabeceiras — coa súa axuda, determínanse as cabeceiras de protocolo.

A definición da cabeceira especifica:

  • descrición dos formatos de paquetes e dos nomes dos campos de cabeceira
  • campos permitidos fixos e variables

Por exemplo

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

Analizadores - a súa tarefa é analizar os titulares.

O seguinte exemplo de analizador determinará a transición do estado final da máquina dun estado inicial a un dos dous estados finais:

Linguaxe de programación 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;
        }
    }…
}

Táboas — conteñen estados da máquina que vinculan as claves de usuario con accións. Actividade — unha descrición de como se debe manipular o paquete.

As táboas conteñen estados (definidos a nivel de xestión) para o reenvío de paquetes, describen a unidade Match-Action

Os paquetes son coincidentes por:

  • Coincidencia exacta
  • Coincidencia de prefixo máis longa (LPM)
  • Triple coincidencia (enmascaramento)

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

Todas as accións posibles deben estar definidas previamente en táboas.

As accións consisten en código e datos. Os datos proceden do nivel de xestión (por exemplo, enderezos IP/números de porto). Certas primitivas sen bucles pódense especificar directamente na acción, pero o número de instrucións debe ser previsible. Polo tanto, as accións non poden conter bucles nin instrucións condicionais.

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

Módulos Match-Action — accións para crear unha clave de busca, buscar nunha táboa, realizar accións.

Na figura móstrase un exemplo típico dun módulo:

Linguaxe de programación P4

Control de fluxo — indica a orde na que se utilizan os módulos Match-Action. Este é un programa imperativo que define a lóxica de alto nivel e a secuencia Match-Action. O fluxo de control vincula todos os obxectos definindo o nivel de control.

Obxectos externos son obxectos específicos cunha arquitectura claramente definida e interfaces API. Por exemplo, cálculo de suma de verificación, rexistros, contadores, contadores, 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
}

metadatos — estruturas de datos asociadas a cada paquete.

Hai 2 tipos de metadatos:

  Metadatos personalizados (estrutura baleira para todos os paquetes)
    Aquí podes poñer o que queiras
    Dispoñible en todo o gasoduto
    conveniente para o seu uso, por exemplo, para almacenar un hash de paquete

  Metadatos internos: proporcionados pola arquitectura
    Aquí defínese o porto de entrada e o porto de saída
    Marca de tempo cando o paquete estaba en cola, profundidade da cola
    multicast hash / multicast queue
    Prioridade do paquete, importancia do paquete
    Especificación do porto de saída (por exemplo, fila de saída)

Compilador P4

O compilador P4 (P4C) xera:

  1. Tempo de execución do plano de datos
  2. API para xestionar o estado da máquina no plano de datos

Linguaxe de programación P4

Exemplo de interruptor de software en linguaxe P4

Os códigos fonte pódense descargar desde o repositorio.

p4lang/p4c-bm: crea configuración JSON para bmv2
p4lang/bmv2: un interruptor de software que comprende as configuracións JSON da versión bmv2

A figura mostra o diagrama de compilación do proxecto:

Linguaxe de programación P4

Manipulacións con táboas, rexistros de lectura, contadores:

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


O código fonte contén o programa simple_switch_CLI para un uso cómodo da API de cambio de software.

Podes descargar este e outros exemplos do repositorio.

Linguaxe de programación P4

PS A principios deste verán, Intel asinou un acordo para adquirir Barefoot Networks nun esforzo por satisfacer rapidamente as necesidades dos usuarios de Hyperscale Cloud. Como dixo Navin Shenoy (vicepresidente executivo e director xeral do Data Center Group de Intel Corporation), isto permitirá que Intel proporcione maiores cargas de traballo e máis oportunidades para os clientes do centro de datos.

Na miña opinión persoal, non debemos esquecer que Intel é líder na produción de chips FPGA e ten un excelente ambiente Quartus. Isto significa que podemos esperar que coa chegada de Intel, Barefoot non só ampliará a súa liña de produtos, senón que tamén Quartus e P4 Studio recibirán actualizacións serias e incorporacións á liña Toffino e Toffino 2.

Membro oficial da comunidade P4 - empresa grupo de factores.

Fonte: www.habr.com

Engadir un comentario