O congelamento do cgroup espera que os buffers de envio do TCP sejam liberados?

O congelamento do cgroup espera que os buffers de envio do TCP sejam liberados?

Quais garantias existem para liberar os buffers de envio TCP, se houver, quando osubsistema de freezercongela um cgroup?

Considere o seguinte cenário: O Servidor A, que roda em um cgroup, envia dados para o Servidor B via TCP. O soquete TCP está configurado para usar o algoritmo do Naggle (a TCP_NODELAYopção não está definida). Portanto, senda transferência de dados pelo soquete não bloqueia o ACK do Servidor B, mas retorna após os dados a serem enviados terem sido copiados para o buffer de envio TCP. Depois disso, mas antes dos dados serem enviados ao Servidor B, o cgroup é congelado.

O que acontece com os dados no buffer de envio TCP?

  • A operação de congelamento aguardará até que todos os dados no buffer sejam reconhecidos pelo Servidor B? E se o buffer de recebimento do Servidor B estiver cheio? O congelamento aguardará indefinidamente pela confirmação do Servidor B?
  • O congelamento não esperará pelo ACK do Servidor B e continuará a enviar os dados após o cgroup ter sido descongelado? Se o atraso entre o congelamento e o descongelamento for longo o suficiente para que o Servidor B feche a conexão TCP, os dados no buffer serão perdidos.

Links para especificações e garantias em torno desse comportamento são apreciados. Mas talvez não haja garantias, então confiar em qualquer um dos comportamentos seria frágil?

O pano de fundo da questão é que estou me perguntando o quão cuidadoso deve ser ao enviar dados via TCP no AWS Lambda (minha suposição é que o AWS Lambda usa cgroups para congelar/descongelar após/antes de uma invocação do Lambda ser tratada). É suficiente liberar buffers de aplicativos para o buffer de envio TCP/soquete TCP? Ou é preciso ter certeza de que o Servidor B recebeu os dados na camada de aplicação, por exemplo, usando HTTP e aguardando a resposta HTTP do servidor?

informação relacionada