Resumo

  • Os autores do Presto afirmam que aplicações como memcached e nginx rodam sem alteração por meio da camada de interposição POSIX e que o protótipo conversa com endpoints TCP Linux e TAS.
  • O mesmo repositório informa que o caminho Tofino 2 não gera o iCRC de RDMA, orienta mudanças na validação das ConnectX e exige padding Ethernet em toda pilha TCP par. Preservar o aplicativo não preserva automaticamente o ambiente de implantação.

Um binário inalterado resolve uma pergunta do desenvolvedor. O operador ainda precisa responder outra: o que foi alterado entre a chamada send() e o quadro que chega ao outro host?

No guest post publicado pelo APNIC Blog, Rajath Shashidhara descreve a vantagem do ponto de vista da aplicação. Programas conhecidos podem usar uma interface de sockets POSIX sem recompilação, e o protótipo interopera com Linux e com o TCP Acceleration Service, o TAS. A própria página declara que as opiniões são dos autores e não necessariamente do APNIC. A publicação dá visibilidade ao trabalho; não é uma homologação institucional do protótipo.

No commit a6c1ceec447c27a7b77035cc7d4a1868a4f7fcc1, a promessa de aplicação intacta tem um mecanismo identificável. libpresto_interpose.so emula sockets POSIX e entra no processo com LD_PRELOAD. O projeto também oferece uma interface de baixo nível e zero copy que exige adaptação do aplicativo. Portanto, “sem alteração” vale para a rota de interposição escolhida, não para toda interface possível do Presto.

O README fixado nesse commit lista as coordenadas do protótipo: switch da classe Tofino 2, adaptadores ConnectX-5 ou superiores, geração específica do SDK, commit de suporte da placa e versão mínima do MLNX OFED. A precisão ajuda a reproduzir o resultado. Também impede que a conclusão de uma combinação seja transferida, sem teste, para outro hardware.

O ponto mais importante vem logo nas instruções de implantação. O data path não define o invariant CRC de RDMA. Nas ConnectX, o operador deve desativar a validação de iCRC; para ConnectX-6 e ConnectX-7, o texto manda procurar instruções equivalentes no suporte da NVIDIA. Além disso, qualquer pilha TCP que interaja com o Presto precisa acrescentar, ao fim de cada segmento, padding Ethernet suficiente para acomodar o iCRC. A variante de TAS incluída no repositório já contém esse comportamento.

O artigo da SIGCOMM 2026 enquadra o assunto como restrição do testbed Tofino 2. O mecanismo de checksum usado no protótipo não cobre os checksums de payload nem o iCRC, e os autores preveem unidades de hardware numa versão de produção. Essa delimitação evita dois erros: omitir a condição da reprodução atual ou tratá-la como destino inevitável de qualquer implementação futura.

Também não se trata de uma regra geral do TCP. A RFC 9293 define o fluxo confiável e ordenado de bytes, o processamento de segmentos e o checksum do TCP. Reservar espaço de quadro para um iCRC de RDMA e ajustar a validação da NIC são condições do caminho que conecta o host ao pipeline Presto. Um par conforme ao TCP pode não emitir naturalmente o quadro adicional exigido pelo protótipo.

Esse é o perímetro de compatibilidade. ABI do aplicativo, semântica de sockets, construção de pacotes pelo par, estado da NIC, imagem do switch e quadro físico são superfícies diferentes. Rodar o mesmo nginx comprova parte delas; não comprova todas.

O disable-icrc.sh mostra como transformar a mudança em evidência. Ele avisa que pressupõe ConnectX-5, lê quatro campos de registro, grava zero e lê novamente. Para outro adaptador, orienta restaurar os valores e alterar o script. Um relatório de teste precisa guardar modelo, firmware e valores antes e depois, além de uma reversão validada para o dispositivo real.

O recibo de aceitação deveria ligar o hash do binário ao commit do Presto, aos builds de P4 e do plano de controle, ao SDK, ao BSP, ao driver, ao MTU e ao estado da placa. Uma captura deve mostrar o fim do quadro. Os ensaios devem separar TAS preparado, Linux comum e qualquer Linux preparado especificamente. Cada combinação recebe seu próprio resultado.

Na volta, switchconf_reset limpa tabelas de fluxo, hosts conectados, contextos de aplicação e estado de execução sem apagar a configuração das portas. É uma etapa útil do reset do switch, mas não restaura por si só registros da NIC nem remove o padding do par. O rollback só está comprovado quando, após a restauração, o caminho original volta a transportar TCP convencional.

Exigir essa prova não reduz a contribuição do Presto. Manter a interface do aplicativo enquanto o transporte passa a um pipeline programável é justamente a inovação operacionalmente atraente. A disciplina consiste em não confundir a mudança de lugar com ausência de mudança.

Fontes