Практикум по серверным сетям

Контрольные суммы и сегментация Linux: checksum offload, TSO, GSO и GRO

Практикум разделяет аппаратные и программные offload-механизмы Linux. Вы научитесь отличать checksum offload, TSO, GSO и GRO и не делать вывод о производительности по одной включённой функции.

База → пресейл и приёмка45 минут4 модуля8 вопросов
После курса

Что вы сможете сделать

  1. Объяснять границы TX Checksum Offload и его программный fallback.
  2. Различать аппаратный TSO и программный GSO.
  3. Объяснять роль GRO на приёме и отделять наличие offload от измеренного результата.
Модуль 1 из 4

1. Разберите контрольную сумму

TX Checksum Offload передаёт устройству конкретную работу с одной контрольной суммой. Название функции не означает, что карта считает все контрольные суммы пакета.

  • TX Checksum Offload передаёт сетевому устройству расчёт одной контрольной суммы, положение которой задают метаданные буфера.

  • При нескольких слоях заголовков одной аппаратной операции может быть недостаточно.

  • Контрольная сумма заголовка IP этим интерфейсом не передаётся устройству и рассчитывается программно.

  • Если функция не поддерживается или выключена, Linux может выполнить соответствующий расчёт программно.

Модуль 2 из 4

2. Отделите TSO от программной сегментации

TSO переносит TCP-сегментацию на устройство, но зависит от метаданных сетевого буфера и checksum offload.

  • При TSO сетевое устройство делит один крупный TCP-буфер на несколько кадров заданного размера.

  • Linux помечает такой буфер типом TCPv4 или TCPv6 GSO и задаёт ненулевой gso_size.

  • TSO зависит от partial checksum offload и обычно выключается вместе с TX checksum offload.

  • Драйверу нужны корректные смещения заголовков и состояние CHECKSUM_PARTIAL.

Модуль 3 из 4

3. Найдите программный путь GSO

GSO решает задачу сегментации в программном стеке Linux, когда требуемую аппаратную работу не выполняет драйвер.

  • GSO — программный механизм Linux, а не функция сетевой карты.

  • Он делит один большой сетевой буфер на несколько буферов подходящего размера.

  • Соответствующий GSO нужен до включения аппаратного segmentation offload, чтобы пакет можно было безопасно перенаправить на другое устройство.

Модуль 4 из 4

4. Не перепутайте GRO с передачей

GRO работает на приёме и объединяет подходящие кадры. Его связь с GSO помогает понять направление обработки, но не заменяет измерение.

  • GRO — дополнение GSO на стороне приёма.

  • В идеальном случае результат GRO можно снова разделить GSO на исходную последовательность кадров.

  • И наоборот, последовательность после GSO в идеальном случае должна собираться GRO обратно.

  • Наличие offload-функции описывает путь обработки, но само по себе не доказывает выигрыш на вашей нагрузке.

Финишная прямая

Проверьте инженерное мышление

Вопросы проверяют не память на аббревиатуры, а умение не делать лишних выводов.

01В пакете после инкапсуляции несколько полей контрольных сумм. Что гарантирует сам интерфейс TX Checksum Offload Linux?
02NIC не поддерживает запрошенный TX checksum offload. Какой путь предусмотрен в Linux 6.12?
03Для интерфейса отключили TX checksum offload. Что документация Linux говорит о TSO?
04Как правильно различить TSO и GSO в этом курсе?
05Драйвер не может выполнить нужную аппаратную сегментацию. Какую роль играет GSO?
06Почему Linux требует соответствующий GSO перед включением аппаратного segmentation offload?
07Где в этой модели работает GRO?
08На сервере включены TSO, GSO и GRO. Какой вывод допустим без нагрузочного измерения?

Следующий шаг

Сформулируйте задачу и уточните требования к своей системе.

Подготовить подбор с Делектусом

Откроется черновик вопроса. Отправьте его, когда будете готовы.

Проверяемая база

Источники курса

Ссылки приведены один раз для всего курса, чтобы не мешать чтению каждого тезиса.

  • Официальная документация

    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.

    Открыть первоисточник
Сообщить об ошибке

Опишите проблему — постараемся исправить как можно скорее.

Спасибо!

Получили ваше сообщение.
Подтвердите действие