A linguagem de programação P4

A linguagem de programação P4
P4 é uma linguagem de programação destinada à programação de regras de roteamento de pacotes. Ao contrário de uma linguagem de uso geral, como C ou Python, P4 é uma linguagem orientada a objetos com uma série de construções otimizadas para o roteamento de redes.

P4 é uma linguagem de código aberto, licenciada e apoiada por uma organização sem fins lucrativos chamada P4 Language Consortium. Também é apoiada pela Open Networking Foundation (ONF) e pela Linux Foundation (LF) — as duas maiores organizações abrangentes em projetos de código aberto na área de tecnologias de rede.
A linguagem foi originalmente concebida em 2013 e descrita em 2014 em um documento do SIGCOMM CCR intitulado ‘Programação de roteadores de pacotes independente de protocolo’.

Desde a sua criação, P4 cresceu e evoluiu exponencialmente, rapidamente se tornando o padrão para descrever a transmissão de pacotes em dispositivos de rede, incluindo adaptadores de rede, switches e roteadores.

‘SDN transformou a indústria de redes e P4 leva SDN a um novo nível, proporcionando programabilidade na área de roteamento’, disse Guru Parulkar, CEO da Open Networking Foundation.

A linguagem P4 foi inicialmente criada por um grupo de engenheiros e pesquisadores da Google, Intel, Microsoft Research, Barefoot, Princeton e Stanford. O objetivo era simples: criar uma linguagem de fácil utilização que um desenvolvedor de software pudesse aprender em um dia, e usar para descrever com precisão como os pacotes são roteados na rede.

Desde o início, P4 foi projetada como independente de destino (ou seja, um programa escrito em P4 poderia ser compilado sem alterações para ser executado em diferentes alvos, como ASIC, FPGA, CPU, NPU e GPU).

Além disso, a linguagem é independente de protocolo (ou seja, um programa P4 pode descrever protocolos padrão existentes ou ser usado para especificar novos modos de endereçamento personalizáveis).

Na indústria, o P4 é aplicado para programar dispositivos. É provável que no futuro RFCs da Internet e padrões da IEEE também incluam a especificação P4.

P4 pode ser utilizado tanto para dispositivos programáveis quanto para dispositivos de função fixa. Por exemplo, é usado para gravar com precisão o comportamento do pipeline de um comutador nas interfaces de API das interfaces de abstração de comutador (SAI), utilizadas pelos sistemas operacionais de comutadores de código aberto SONiC. O P4 também é empregado no projeto ONF Stratum para descrever o comportamento de comutação através de vários dispositivos fixos e programáveis.

A descrição do comportamento de comutadores e adaptadores de rede permite pela primeira vez criar um modelo executável preciso de toda a rede antes da implementação. Grandes provedores de nuvem podem testar e depurar completamente a rede usando software, o que reduz significativamente o tempo e os custos de teste de interação em laboratório, sem a necessidade de equipamentos caros.

Usando P4, fornecedores de equipamentos de rede podem contar com um comportamento básico consistente de roteamento em todos os produtos, permitindo a reutilização da infraestrutura de teste, facilitando o desenvolvimento de software de gestão e, em última instância, garantindo compatibilidade.

Certamente, o P4 pode ser utilizado para escrever programas que descrevem novas maneiras de roteamento. Por exemplo, o P4 é amplamente utilizado para telemetria e medições em data centers, redes corporativas e fornecedores de serviços.

A comunidade de pesquisa também se mobilizou. Vários grupos de pesquisa acadêmica líderes em tecnologias de rede publicaram novos aplicativos interessantes baseados em programas P4, incluindo balanceamento de carga, protocolos consistentes e cache de chave-valor. Está surgindo uma nova paradigmática de programação, com inovações se movendo do hardware para o software, permitindo o surgimento de muitas ideias inesperadas, novas e geniais.

A comunidade de desenvolvedores fez uma contribuição significativa no desenvolvimento do código, incluindo compiladores, programas de pipeline, modelos de comportamento, interfaces de API, ambientes de teste, aplicativos e muito mais. Desenvolvedores dedicados estão em empresas como Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx e ZTE; universidades como BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass e USI; e projetos de código aberto, incluindo CORD, FD.io, OpenDaylight, ONOS, OvS, SAI e Stratum, sublinham o fato de que o P4 é um projeto público independente.

Geração típica de controladores para a linguagem P4:

A linguagem de programação P4

Perspectivas de aplicação

A linguagem de programação P4
Como a linguagem é destinada a aplicações de roteamento, a lista de requisitos e opções de design é diferente em comparação com linguagens de programação de propósito geral. As principais características da linguagem são:

  1. Independência da implementação alvo;
  2. Independência dos protocolos utilizados;
  3. Reconfigurabilidade de campos.

Independência da implementação alvo

Programas P4 são desenvolvidos para não depender da implementação, ou seja, podem ser compilados para muitos tipos diferentes de máquinas executoras, como processadores de propósito geral, FPGA, sistemas em chip, processadores de rede e ASIC. Esses diferentes tipos de máquinas são conhecidos como alvos P4, e para cada alvo é necessário um compilador para transformar o código-fonte P4 em um modelo de comutador alvo. O compilador pode estar embutido no dispositivo alvo, em um software externo ou até em um serviço de nuvem. Como muitos dos alvos iniciais para programas P4 eram usados para simples comutação de pacotes, é comum ouvir o termo "comutador P4", mesmo que o uso de "alvo P4" seja mais preciso.

Independência dos protocolos utilizados

O P4 é independente de protocolos. Isso significa que a linguagem não tem suporte embutido para protocolos comuns, como IP, Ethernet, TCP, VxLAN ou MPLS. Em vez disso, o programador P4 descreve os formatos de cabeçalho e os nomes dos campos dos protocolos necessários no programa, que por sua vez são interpretados e processados pelo programa compilado e pelo dispositivo alvo.

Reconfigurabilidade de campos

A independência do protocolo e o modelo de linguagem abstrata permitem a reconfiguração — os objetivos do P4 devem ser capazes de modificar o processamento de pacotes após a implementação do sistema. Essa capacidade está tradicionalmente associada à roteamento por meio de processadores de uso geral ou processadores de rede, em vez de circuitos integrados com funções fixas.

Embora a linguagem não tenha restrições que impeçam a otimização do funcionamento de um determinado conjunto de protocolos, essas otimizações são invisíveis para o autor da linguagem e podem, em última análise, reduzir a flexibilidade do sistema e a reconfigurabilidade de seus objetivos.

Essas características da linguagem foram inicialmente planejadas por seus criadores com foco em seu uso generalizado na infraestrutura de rede.

Atualmente, a linguagem é utilizada em várias empresas:

1) Data centers hiperescaláveis;

A empresa chinesa Tencent é a maior empresa de investimentos do mundo e uma das maiores empresas de capital de risco. As subsidiárias da Tencent, tanto na China como em outros países, especializam-se em várias áreas de negócios de alta tecnologia, incluindo diversos serviços de internet, desenvolvimentos em inteligência artificial e entretenimento eletrônico.

O P4 e a roteação programável são tecnologias avançadas utilizadas na arquitetura de redes da empresa.

Como um dos criadores, o Google se orgulha da rápida adoção do P4 na indústria de redes e, em particular, na área de design arquitetônico de data centers.

2) Empresas comerciais;

O Goldman Sachs, aproveitando os benefícios de trabalhar com a comunidade de código aberto e desenvolvendo padrões e soluções comuns, já está trazendo inovações para a infraestrutura de rede e fornecendo as melhores soluções para os clientes.

3) Indústria;

Toda a indústria de redes se beneficiará de uma linguagem como o P4, que define de forma clara o comportamento de encaminhamento. Isso também é a opinião da Cisco, que está transferindo suas linhas de produtos para o uso dessa linguagem.

A Juniper Networks integrou o P4 e o P4 Runtime em uma série de produtos, oferecendo acesso programático ao processador integrado da Juniper e ao seu código.

A Ruijie Networks é uma defensora ativa do P4 e dos benefícios que isso traz para as redes. Com o P4, a empresa pode criar e fornecer soluções de classe mundial para uma ampla gama de clientes.

4) Provedores de telecomunicações;

A AT&T foi uma das primeiras a apoiar o P4, sendo uma das primeiras a usar o P4 para definir o comportamento que desejava ver nas redes e utilizando dispositivos de encaminhamento programáveis P4 em sua rede.

Na Deutsche Telekom, a linguagem é utilizada para criar protótipos das principais funções de rede no âmbito do programa Access 4.0.

5) Indústria de semicondutores;

A linguagem permitiu implementar uma nova paradigma de transferência de capacidades de software para a camada de roteamento, pela empresa Barefoot.

A Xilinx foi uma das fundadoras do P4.org e participou ativamente do desenvolvimento da linguagem P4, implementando-a em plataformas programáveis baseadas em FPGA para equipamentos SmartNIC e NFV, lançando um dos primeiros compiladores P416 como parte do design SDNet.

6) Software.

Na VMware, acreditam que o P4 cria uma enorme energia, inovação e comunidade, levando a transformações significativas e necessárias nas redes. A VMware foi originalmente parte desse movimento do setor, pois a nova onda de inovação é provocada por abordagens de software que ampliam as capacidades da infraestrutura e as implementam em seus produtos mais recentes.

Assim, o P4 é uma linguagem de programação independente de objetivo e protocolo, utilizada pela indústria e pela comunidade científica para definir claramente o comportamento do roteamento de pacotes como um programa que, por sua vez, pode ser compilado para vários propósitos. Hoje, os objetivos incluem switches de hardware e software, switches hipervisor, NPU, GPUs, FPGAs, SmartNICs e ASICs.

As principais características da linguagem ampliam significativamente os domínios de sua aplicação e garantem sua rápida implementação nas arquiteturas de rede.

Para começar

O P4 é um projeto aberto, todas as informações atualizadas estão no site P4.org

Link para o repositório https://github.com/p4lang, onde você pode obter os códigos de exemplo e materiais de treinamento.

Plugin para o Eclipse com suporte a P4, mas podemos recomendar P4 Studio da Barefoot.

A linguagem de programação P4

Vamos discutir as principais abstrações do núcleo:

Definição de cabeçalhos — com a ajuda deles, os cabeçalhos do protocolo são determinados.

Na definição dos cabeçalhos, são estabelecidos:

  • a descrição dos formatos de pacotes e os nomes dos campos de cabeçalho
  • campos fixos e variáveis permitidos

Por exemplo

cabeçalho Ethernet_h{
    bitdstAddr;
    bitsrcAddr;
    bitetherType;
}

cabeçalho IPv4_h{
    bitversão;
    bitihl;
    bitdiffserv;
    bittotalLen;
    bitidentificação;
    bitflags;
    bitfragOffset;
    bitttl;
    bitprotocolo;
    bithdrChecksum;
    bitsrcAddr;
    bitdstAddr;
    varbitoptions;
}

Analisadores — sua tarefa é interpretar os cabeçalhos.

O próximo exemplo de analisador determinará a transição do estado final da máquina de um estado inicial para um dos dois estados finais:

A linguagem de programação P4

parser MeuParser(){
 estado início{transição parse_ethernet;}
 estado parse_ethernet{
    pacote.extract(hdr.ethernet);
    transição selecionar(hdr.ethernet.etherType){
        TIPO_IPV4: parse_ipv4;
        padrão: aceitar;
        }
    }…
}

Tabelas — contêm estados da máquina vinculando chaves do usuário a ações. Ações — a descrição de como manipular o pacote.

As tabelas contêm estados (definidos em nível de gerenciamento) para o encaminhamento de pacotes, descrevem a unidade de ação Match-Action

A correspondência de pacotes é realizada por:

  • Correspondência exata
  • Correspondência mais longa com prefixo (LPM)
  • Correspondência tripla (masking)

table ipv4_lpm{
    leitura{
        ipv4.dstAddr: lpm;
    } ações {
        encaminhar();
    }
}

Todas as ações possíveis devem ser definidas nas tabelas com antecedência.

As ações consistem em código e dados. Os dados vêm do nível de gerenciamento (por exemplo, endereços IP / números de portos). Primitivos definidos e sem ciclos podem ser especificados diretamente na ação, mas a quantidade de comandos deve ser previsível. Portanto, as ações não podem conter ciclos ou operadores condicionais.

ação 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 — ações para criar uma chave de busca, buscar na tabela, executar ações.

Um exemplo típico de módulo é mostrado na figura:

A linguagem de programação P4

Fluxo de controle — indica a ordem de aplicação dos módulos Match-Action. É um programa imperativo que define a lógica de alto nível e a sequência Match-Action. O fluxo de controle vincula todos os objetos, estabelecendo o nível de controle.

Objetos externos — são objetos específicos com arquitetura e interfaces API claramente definidas. Por exemplo, cálculo de checksum, registradores, contadores, etc.

extern register{
    register(bit size);
    void read(out T result, in bit index);
    void write(in bit index, in T value);
}

extern Checksum16{
  Checksum16();    //construtor
  void clear();    //preparar unidade para computação
  void update(in T data);    //adicionar dados ao checksum
  void remove(in T data);  //remover dados do checksum existente
  bitget(); //obter o checksum dos dados adicionados desde a última limpeza
}

Metadados — estruturas de dados associadas a cada pacote.

Existem 2 tipos de metadados:

  Metadados do usuário (estrutura vazia para todos os pacotes)
    Você pode colocar aqui tudo o que deseja
    Disponível ao longo de todo o pipeline
    útil para seus próprios fins, por exemplo, para armazenar o hash do pacote

  Metadados internos — garantidos pela arquitetura
    A porta de entrada e a porta de saída são definidas aqui
    Marca de tempo, quando o pacote foi colocado na fila, profundidade da fila
    multicast hash / fila multicast
    Prioridade do pacote, importância do pacote
    Especificação da porta de saída (por exemplo, fila de saída)

Compilador P4

O compilador P4 (P4C) gera:

  1. Tempo de execução do plano de dados
  2. API para gerenciar o estado da máquina no plano de dados

A linguagem de programação P4

Exemplo de switch programável na linguagem P4

Os códigos fonte podem ser baixados do repositório.

p4lang/p4c-bm: cria configurações JSON para bmv2
p4lang/bmv2: switch programável que entende as configurações JSON da versão bmv2

A figura apresenta o diagrama de compilação do projeto:

A linguagem de programação P4

Manipulações com tabelas, registros de leitura, contadores:

  • definir_tabela_padrão <table name> <action name> <action parameters>
  • adicionar_tabela <table name> <action name> <match fields> => &lt;ação
    parameters> [priority]
  • deletar_tabela <table name> <entry handle>


Nos códigos fonte, há um programa simple_switch_CLI para facilitar o uso da API do switch programável.

Este e outros exemplos podem ser baixados do repositório.

A linguagem de programação P4

P.S. No início do verão, a Intel assinou um acordo para adquirir a Barefoot Networks, com o objetivo de atender rapidamente às necessidades dos usuários de Cloud Hyperscale. Como afirmou Navin Shenoy (vice-presidente executivo e gerente geral do Data Center Group da Intel Corporation) — isso permitirá à Intel fornecer cargas de trabalho maiores e mais recursos para os clientes dos Data Centers.

Na minha opinião pessoal, não devemos esquecer que a Intel é líder na produção de chips FPGA e possui um ótimo ambiente Quartus. Portanto, podemos esperar que, com a chegada à Intel, a Barefoot não apenas amplie sua linha de produtos, mas também atualize seriamente o Quartus e o P4 Studio, além da inclusão da linha Toffino e Toffino 2.

Membro oficial da comunidade P4 — empresa Fator Group.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster