Введение

Технология, используемая в сетевых картах интерфейса

TCP offload engine (TOE) – это технология, применяемая в некоторых сетевых картах интерфейса (NIC) для переноса обработки всего стека TCP/IP на сетевой контроллер. Она в основном используется с высокоскоростными сетевыми интерфейсами, такими как Gigabit Ethernet и 10 Gigabit Ethernet, где вычислительная нагрузка сетевого стека становится существенной. TOE часто применяются для снижения накладных расходов, связанных с протоколами хранения данных, использующими Интернет-протокол (IP), такими как iSCSI и Network File System (NFS).

Цель

Первоначально TCP был разработан для ненадежных низкоскоростных сетей (таких как ранние dial-up модемы), но с ростом Интернета в отношении скорости передачи данных по магистральным каналам (с использованием Optical Carrier, Gigabit Ethernet и 10 Gigabit Ethernet) и появлением более быстрых и надежных механизмов доступа (таких как DSL и кабельные модемы), он часто используется в центрах обработки данных и на настольных компьютерах со скоростью более 1 Гбит/с. При таких скоростях программные реализации TCP на хост-системах требуют значительной вычислительной мощности. В начале 2000-х годов полнодуплексная гигабитная связь по TCP могла потреблять более 80% ресурсов процессора Pentium 4 с частотой 2,4 ГГц. Например, для обработки 5 Гбит/с (625 МБ/с) сетевого трафика требуется 5 ГГц вычислительной мощности процессора. Это означает, что для обработки TCP/IP трафика со скоростью 5 Гбит/с потребуется два полноценных ядра многоядерного процессора с частотой 2,5 ГГц. Поскольку Ethernet (10GE в данном примере) является двунаправленным, возможно одновременное отправление и получение данных со скоростью 10 Гбит/с (что обеспечивает общую пропускную способность 20 Гбит/с). Используя правило 1 Гц/(бит/с), это эквивалентно восьми ядрам с частотой 2,5 ГГц. Многие циклы процессора, используемые для обработки TCP/IP, освобождаются благодаря разгрузке TCP/IP и могут быть использованы процессором (обычно серверным) для выполнения других задач, таких как обработка файловой системы (на файловом сервере) или индексирование (на сервере резервного копирования). Иными словами, сервер с поддержкой разгрузки TCP/IP может выполнять больший объем серверных задач, чем сервер без сетевых карт с разгрузкой TCP/IP.

Сокращение трафика PCI

В дополнение к накладным расходам протокола, которые TOE может устранить, он также может решить некоторые архитектурные проблемы, влияющие на значительную часть конечных точек, основанных на хостах (серверах и ПК). Многие устаревшие хосты конечных точек используют шину PCI, которая предоставляет стандартный интерфейс для подключения определенных периферийных устройств, таких как сетевые интерфейсы, к серверам и ПК. Шина PCI неэффективна для передачи небольших пакетов данных из основной памяти через шину PCI к микросхемам сетевого интерфейса, но ее эффективность повышается с увеличением размера пакета данных. В протоколе TCP генерируется большое количество небольших пакетов (например, подтверждений), и поскольку они обычно создаются на центральном процессоре хоста и передаются через шину PCI и сетевой физический интерфейс, это снижает пропускную способность ввода-вывода хост-компьютера. Решение TOE, расположенное на сетевом интерфейсе, находится с другой стороны шины PCI от центрального процессора хоста, что позволяет решить эту проблему эффективности ввода-вывода, поскольку данные, предназначенные для отправки по TCP-соединению, могут быть отправлены в TOE от центрального процессора через шину PCI большими пакетами, при этом мелкие пакеты TCP не должны проходить через шину PCI.

История

Один из первых патентов в этой технологии, для разгрузки UDP, был выдан компании Auspex Systems в начале 1990 года. Основатель Auspex Ларри Бучер и ряд инженеров Auspex основали Alacritech в 1997 году с идеей расширения концепции разгрузки сетевого стека на TCP и реализации её в специализированном кремнии. Они представили первую параллельную сетевую карту с полной разгрузкой в начале 1999 года; SLIC (Session Layer Interface Card) компании стала предшественницей её текущих предложений TOE. Alacritech владеет рядом патентов в области разгрузки TCP/IP. К 2002 году, с появлением TCP-ориентированных систем хранения данных, таких как iSCSI, интерес к этой области возрос, и было сказано, что "по крайней мере, дюжина новых компаний, большинство из которых были основаны в конце пузыря доткомов, стремятся к возможности создания коммерческих полупроводниковых ускорителей для протоколов и приложений хранения, конкурируя с полудюжиной устоявшихся поставщиков и собственных разработок ASIC". В 2005 году Microsoft лицензировала патентную базу Alacritech и совместно с Alacritech разработала архитектуру частичной разгрузки TCP, которая стала известна как разгрузка TCP Chimney. Разгрузка TCP Chimney основана на "Патенте на передачу коммуникационных блоков" Alacritech. В то же время Broadcom также получила лицензию на производство чипов для разгрузки TCP Chimney.

Типы

Вместо полной замены стека TCP на TOE существуют альтернативные методы частичной разгрузки операций, работающие совместно со стеком TCP операционной системы. Разгрузка вычисления контрольной суммы TCP (TCP checksum offload) и разгрузка больших сегментов (large segment offload) поддерживаются большинством современных Ethernet-адаптеров. Более новые методы, такие как разгрузка приема больших пакетов (large receive offload) и разгрузка подтверждений TCP (TCP acknowledgment offload), уже реализованы в некоторых высокопроизводительных Ethernet-устройствах, но остаются эффективными даже при реализации исключительно в программном обеспечении.

Полная разгрузка параллельного стека

Параллельная полная разгрузка стека получила свое название благодаря концепции двух параллельных стеков TCP/IP. Первый – это основной стек хоста, входящий в состав операционной системы хоста. Второй, или "параллельный стек", подключается между прикладным и транспортным слоями (TCP) посредством "вампирского тапа". Этот "вампирский тап" перехватывает запросы приложений на установление TCP-соединений и отвечает за управление этими соединениями, а также за передачу TCP-данных. Многие критические замечания в следующем разделе относятся к этому типу разгрузки TCP.

HBA полный разгруз

HBA (Host Bus Adapter) с полной аппаратной разгрузкой встречается в хост-адаптерах iSCSI, которые представляются хост-системе как дисковые контроллеры при подключении (через TCP/IP) к хранилищу iSCSI. Этот тип разгрузки TCP не только снимает нагрузку по обработке TCP/IP, но и разгружает функцию инициатора iSCSI. Поскольку HBA воспринимается хостом как дисковый контроллер, он может использоваться исключительно с устройствами iSCSI и не предназначен для общей разгрузки TCP/IP.

Частичная разгрузка трубы TCP

TCP-каминная разгрузка устраняет основную проблему безопасности, связанную с полной разгрузкой параллельного стека. При частичной разгрузке основной стек системы управляет всеми соединениями с хостом. После установления соединения между локальным хостом (обычно сервером) и удаленным хостом (обычно клиентом), соединение и его состояние передаются в модуль разгрузки TCP. Основная работа по передаче и приему данных выполняется устройством разгрузки. Почти все модули TCP-разгрузки используют ту или иную аппаратную реализацию TCP/IP для передачи данных без участия центрального процессора хоста. При закрытии соединения состояние соединения возвращается из модуля разгрузки в основной стек системы. Поддержание контроля над TCP-соединениями позволяет основному стеку системы реализовывать и контролировать безопасность соединений.

Большой прием отгрузки

Большая разгрузка приема (LRO) — это техника повышения пропускной способности входящего трафика высокоскоростных сетевых соединений за счет снижения нагрузки на центральный процессор (CPU). Она работает путем объединения нескольких входящих пакетов из одного потока в больший буфер перед передачей их на более высокий уровень сетевого стека, тем самым уменьшая количество пакетов, подлежащих обработке. В реализациях Linux LRO обычно используется совместно с новым API (NAPI) для сокращения количества прерываний. Согласно результатам тестов, даже полная программная реализация этой техники может значительно повысить производительность сети. Ядро Linux поддерживает LRO для TCP только в программном обеспечении. FreeBSD 8 поддерживает LRO аппаратно на адаптерах, которые это поддерживают. LRO не следует использовать на машинах, выполняющих функции маршрутизаторов, поскольку это нарушает принцип сквозного взаимодействия и может существенно снизить производительность.

Общий прием отгрузки

Общая выгрузка приема (GRO) реализует обобщенный LRO в программном обеспечении, который не ограничивается TCP/IPv4 и не имеет проблем, присущих LRO.

Большая отгрузка

В компьютерных сетях, большая отгрузка отправки (LSO) – это технология повышения пропускной способности исходящего трафика высокоскоростных сетевых соединений за счет снижения нагрузки на центральный процессор. Она работает путем передачи многопакетного буфера сетевому интерфейсу (NIC). Затем NIC разделяет этот буфер на отдельные пакеты. Эта технология также называется сегментацией TCP (TSO) или универсальной сегментацией (GSO) применительно к TCP. LSO и LRO независимы, и использование одного из них не требует использования другого. Когда системе необходимо отправить большие объемы данных по компьютерной сети, эти объемы сначала необходимо разбить на более мелкие сегменты, которые могут проходить через все сетевые элементы, такие как маршрутизаторы и коммутаторы, между исходным и целевым компьютерами. Этот процесс называется сегментацией. Часто протокол TCP на хост-компьютере выполняет эту сегментацию. Передача этой задачи NIC называется сегментацией TCP (TSO). Например, блок данных размером 64 КБ (65 536 байт) обычно сегментируется на 45 сегментов по 1460 байт каждый перед отправкой через NIC и по сети. Благодаря определенной интеллектуальности NIC, центральный процессор хоста может передать 64 КБ данных в NIC в одном запросе на передачу. NIC может разбить эти данные на более мелкие сегменты по 1460 байт, добавить заголовки протоколов TCP, IP и канального уровня – в соответствии с шаблоном, предоставленным стеком TCP/IP хоста – к каждому сегменту и отправить полученные кадры по сети. Это значительно снижает нагрузку на центральный процессор. Многие новые NIC на рынке поддерживают TSO. Некоторые сетевые карты реализуют TSO достаточно универсально, чтобы его можно было использовать для разгрузки фрагментации других протоколов транспортного уровня или для выполнения фрагментации IP для протоколов, которые сами по себе не поддерживают фрагментацию, таких как UDP.

Поддержка в Linux

В отличие от других операционных систем, таких как FreeBSD, ядро Linux не включает поддержку TOE (не путать с другими типами сетевой разгрузки). Хотя существуют патчи от производителей оборудования, таких как Chelsio или Qlogic, добавляющие поддержку TOE, разработчики ядра Linux выступают против этой технологии по нескольким причинам:
Безопасность – поскольку TOE реализован в аппаратном обеспечении, для устранения каких-либо уязвимостей безопасности, обнаруженных в конкретной реализации TOE, патчи необходимо применять к прошивке TOE, а не только к программному обеспечению. Это усугубляется новизной и специфичностью данного оборудования по сравнению с хорошо протестированным стеком TCP/IP, который используется в операционных системах, не применяющих TOE.
Ограничения аппаратного обеспечения – поскольку соединения буферизуются и обрабатываются на чипе TOE, дефицит ресурсов может возникнуть легче, чем при использовании щедрых ресурсов процессора и памяти, доступных операционной системе.
Сложность – TOE нарушает предположение, которое делают ядра о постоянном доступе ко всем ресурсам – такие детали, как память, используемая открытыми соединениями, становятся недоступными при использовании TOE. Для правильной поддержки TOE требуются значительные изменения в сетевом стеке, и даже после их внесения функции, такие как качество обслуживания и фильтрация пакетов, могут работать некорректно.
Закрытость – TOE реализован по-разному каждым производителем оборудования. Это означает, что для работы с различными реализациями TOE необходимо переписывать больше кода, что приводит к вышеупомянутой сложности и, возможно, к проблемам с безопасностью. Кроме того, прошивку TOE сложно модифицировать, поскольку она имеет закрытый исходный код.
Устаревание – Каждый сетевой адаптер TOE имеет ограниченный срок полезного использования, поскольку производительность системного оборудования быстро догоняет и в конечном итоге превосходит производительность TOE.

Поставщики

Большая часть текущих разработок в области технологии TOE ведется производителями 10-гигабитных сетевых карт Ethernet, такими как Broadcom, Chelsio Communications, Emulex, Mellanox Technologies и QLogic.