Практикум по серверным сетям
Контрольные суммы и сегментация Linux: checksum offload, TSO, GSO и GRO
Практикум разделяет аппаратные и программные offload-механизмы Linux. Вы научитесь отличать checksum offload, TSO, GSO и GRO и не делать вывод о производительности по одной включённой функции.
Что вы сможете сделать
- Объяснять границы TX Checksum Offload и его программный fallback.
- Различать аппаратный TSO и программный GSO.
- Объяснять роль GRO на приёме и отделять наличие offload от измеренного результата.
1. Разберите контрольную сумму
TX Checksum Offload передаёт устройству конкретную работу с одной контрольной суммой. Название функции не означает, что карта считает все контрольные суммы пакета.
TX Checksum Offload передаёт сетевому устройству расчёт одной контрольной суммы, положение которой задают метаданные буфера.
При нескольких слоях заголовков одной аппаратной операции может быть недостаточно.
Контрольная сумма заголовка IP этим интерфейсом не передаётся устройству и рассчитывается программно.
Если функция не поддерживается или выключена, Linux может выполнить соответствующий расчёт программно.
2. Отделите TSO от программной сегментации
TSO переносит TCP-сегментацию на устройство, но зависит от метаданных сетевого буфера и checksum offload.
При TSO сетевое устройство делит один крупный TCP-буфер на несколько кадров заданного размера.
Linux помечает такой буфер типом TCPv4 или TCPv6 GSO и задаёт ненулевой gso_size.
TSO зависит от partial checksum offload и обычно выключается вместе с TX checksum offload.
Драйверу нужны корректные смещения заголовков и состояние CHECKSUM_PARTIAL.
3. Найдите программный путь GSO
GSO решает задачу сегментации в программном стеке Linux, когда требуемую аппаратную работу не выполняет драйвер.
GSO — программный механизм Linux, а не функция сетевой карты.
Он делит один большой сетевой буфер на несколько буферов подходящего размера.
Соответствующий GSO нужен до включения аппаратного segmentation offload, чтобы пакет можно было безопасно перенаправить на другое устройство.
4. Не перепутайте GRO с передачей
GRO работает на приёме и объединяет подходящие кадры. Его связь с GSO помогает понять направление обработки, но не заменяет измерение.
GRO — дополнение GSO на стороне приёма.
В идеальном случае результат GRO можно снова разделить GSO на исходную последовательность кадров.
И наоборот, последовательность после GSO в идеальном случае должна собираться GRO обратно.
Наличие offload-функции описывает путь обработки, но само по себе не доказывает выигрыш на вашей нагрузке.
Проверьте инженерное мышление
Вопросы проверяют не память на аббревиатуры, а умение не делать лишних выводов.
Следующий шаг
Сформулируйте задачу и уточните требования к своей системе.
Подготовить подбор с ДелектусомОткроется черновик вопроса. Отправьте его, когда будете готовы.
Источники курса
Ссылки приведены один раз для всего курса, чтобы не мешать чтению каждого тезиса.
- Официальная документация
Checksum Offloads
Linux Kernel · Linux 6.12 documentation
TX checksum offload: одна передаваемая контрольная сумма, ограничения интерфейса и программный fallback при неподдерживаемой функции.
Открыть первоисточник - Официальная документация
Segmentation Offloads
Linux Kernel · Linux 6.12 documentation
TSO, GSO и GRO: кто выполняет сегментацию, зависимость TSO от partial checksum offload и взаимосвязь GSO/GRO.
Открыть первоисточник