Ожидает ли заморозка cgroup очистки буферов отправки TCP?

Ожидает ли заморозка cgroup очистки буферов отправки TCP?

Какие гарантии существуют для очистки буферов отправки TCP, если таковые имеются, когдаподсистема морозильниказамораживает cgroup?

Рассмотрим следующий сценарий: Сервер A, работающий в cgroup, отправляет данные на Сервер B по TCP. Сокет TCP настроен на использование алгоритма Naggle (опция TCP_NODELAYне установлена). Поэтому sendпередача данных через сокет не блокируется для ACK Сервера B, а возвращается после того, как данные для отправки скопированы в буфер отправки TCP. После этого, но до отправки данных на Сервер B, cgroup замораживается.

Что происходит с данными в буфере отправки TCP?

  • Будет ли операция заморозки ждать, пока все данные в буфере не будут подтверждены сервером B? Что делать, если буфер приема сервера B заполнен? Будет ли операция заморозки ждать подтверждения сервера B бесконечно долго?
  • Не будет ли заморозка ждать ACK сервера B и продолжать отправлять данные после размораживания cgroup? Если задержка между заморозкой и размораживанием достаточно велика для того, чтобы сервер B закрыл TCP-соединение, данные в буфере будут потеряны.

Ссылки на спецификации и гарантии относительно этого поведения приветствуются. Но, может быть, нет никаких гарантий, поэтому полагаться на какое-либо поведение было бы хрупко?

Предыстория вопроса в том, что мне интересно, насколько осторожным нужно быть при отправке данных через TCP в AWS Lambda (я предполагаю, что AWS Lambda использует cgroups для заморозки/разморозки после/до обработки вызова Lambda). Достаточно ли сбросить буферы приложения в сокет TCP/буфер отправки TCP? Или нужно убедиться, что сервер B получил данные на уровне приложения, например, используя HTTP и ожидая ответа HTTP сервера?

Связанный контент