Механизм разгрузки TCP ( TOE ) — это технология, используемая в некоторых сетевых интерфейсных платах (NIC) для переноса обработки всего стека TCP/IP на сетевой контроллер. В основном он используется с высокоскоростными сетевыми интерфейсами, такими как Gigabit Ethernet и 10 Gigabit Ethernet , где накладные расходы на обработку сетевого стека становятся значительными. TOE часто используются [1] как способ уменьшить накладные расходы, связанные с протоколами хранения Интернет-протокола (IP), такими как iSCSI и Network File System (NFS).
Первоначально TCP был разработан для ненадежных низкоскоростных сетей (таких как ранние модемы с коммутируемым доступом ), но с ростом Интернета с точки зрения скоростей передачи по магистрали (с использованием каналов Optical Carrier , Gigabit Ethernet и 10 Gigabit Ethernet ) и более быстрого и надежного доступа . механизмы (такие как DSL и кабельные модемы ) часто используются в центрах обработки данных и настольных ПКсредах со скоростью более 1 гигабита в секунду. При таких скоростях реализация программного обеспечения TCP на хост-системах требует значительных вычислительных мощностей. В начале 2000-х полнодуплексная гигабитная TCP-связь могла потреблять более 80% процессора Pentium 4 с тактовой частотой 2,4 ГГц [2] , что приводило к тому, что для запуска приложений в системе оставалось мало или совсем не оставалось вычислительных ресурсов.
TCP — это протокол, ориентированный на соединение, который усложняет и увеличивает нагрузку на обработку. Эти аспекты включают в себя:
Перемещение некоторых или всех этих функций на выделенное оборудование, механизм разгрузки TCP, освобождает основной ЦП системы для других задач. По состоянию на 2012 год очень немногие потребительские сетевые карты поддерживают TOE.
Общепринятое эмпирическое правило заключается в том, что для отправки или получения данных требуется процессор с частотой 1 Гц.1 бит/с TCP/IP. [2] Например, для сетевого трафика со скоростью 5 Гбит/с (625 МБ/с) требуется процессор с частотой 5 ГГц. Это означает, что 2 полных ядра многоядерного процессора с частотой 2,5 ГГц потребуются для обработки TCP/IP, связанной с трафиком TCP/IP со скоростью 5 Гбит/с. Поскольку Ethernet (в данном примере 10GE) является двунаправленным, можно отправлять и получать 10 Гбит/с (для совокупной пропускной способности 20 Гбит/с). Используя правило 1 Гц/(бит/с), это соответствует восьми ядрам с частотой 2,5 ГГц.
Многие циклы ЦП, используемые для обработки TCP/IP, высвобождаются за счет разгрузки TCP/IP и могут использоваться ЦП (обычно ЦП сервера ) для выполнения других задач, таких как обработка файловой системы (на файловом сервере) или индексирование. (на резервном медиа-сервере). Другими словами, сервер с разгрузкой TCP/IP может выполнять больше серверной работы, чем сервер без сетевых адаптеров разгрузки TCP/IP.
В дополнение к накладным расходам протокола, которые может решить TOE, он также может решить некоторые архитектурные проблемы, которые затрагивают большой процент конечных точек на основе хоста (сервера и ПК). Многие старые хосты конечных точек основаны на шине PCI , которая обеспечивает стандартный интерфейс для добавления определенных периферийных устройств , таких как сетевые интерфейсы к серверам .и ПК. PCI неэффективен для передачи небольших пакетов данных из основной памяти по шине PCI на микросхемы сетевого интерфейса, но его эффективность повышается по мере увеличения размера пакета данных. В протоколе TCP создается большое количество небольших пакетов (например, подтверждений), и, поскольку они обычно генерируются на центральном процессоре хоста и передаются по шине PCI и через сетевой физический интерфейс, это влияет на пропускную способность ввода-вывода хост-компьютера.
Решение TOE, расположенное на сетевом интерфейсе, расположено по другую сторону шины PCI от хоста ЦП, поэтому оно может решить эту проблему эффективности ввода-вывода, поскольку данные, которые должны быть отправлены через TCP-соединение, могут быть отправлены на сервер. TOE от ЦП по шине PCI с использованием больших размеров пакетов данных, при этом ни один из меньших пакетов TCP не должен проходить по шине PCI.
Один из первых патентов на эту технологию, на разгрузку UDP, был выдан компании Auspex Systems в начале 1990 г. [3] Основатель Auspex Ларри Бушер и несколько инженеров Auspex в 1997 г. разгрузка сетевого стека в TCP и реализация его в собственном кремнии. В начале 1999 года они представили первую сетевую карту с полной разгрузкой параллельного стека; SLIC (интерфейсная карта сеансового уровня) компании была предшественницей ее текущих предложений TOE. Alacritech владеет рядом патентов в области разгрузки TCP/IP. [4]
К 2002 году, когда появление хранилищ на основе TCP, таких как iSCSI , подстегнуло интерес, было сказано, что «по крайней мере дюжина новичков, большинство из которых были основаны ближе к концу пузыря доткомов, гоняются за возможностью использовать коммерческие полупроводниковые ускорители для хранения данных». протоколы и приложения, соперничающие с полдюжиной укоренившихся поставщиков и собственными разработками ASIC». [5]
В 2005 году Microsoft лицензировала патентную базу Alacritech и вместе с Alacritech создала архитектуру частичной разгрузки TCP, которая стала известна как разгрузка TCP chimney. Центры разгрузки дымохода TCP основаны на «Патенте на передачу блока связи» Alacritech. В то же время Broadcom также получила лицензию на создание чипов разгрузки TCP Chimney.
Вместо полной замены стека TCP ОО существуют альтернативные методы разгрузки некоторых операций в сотрудничестве со стеком TCP операционной системы. Разгрузка контрольной суммы TCP и разгрузка больших сегментов поддерживаются большинством современных сетевых адаптеров Ethernet. Новые методы, такие как разгрузка больших объемов приема и разгрузка подтверждений TCP, уже реализованы в некоторых высокопроизводительных аппаратных средствах Ethernet, но они эффективны даже тогда, когда реализованы чисто программно. [6] [7]
Полная разгрузка параллельного стека получила свое название от концепции двух параллельных стеков TCP/IP. Первый — это основной стек хоста, который включен в ОС хоста. Второй или «параллельный стек» подключается между прикладным уровнем и транспортным уровнем (TCP) с помощью «вампирского крана». Отвод-вампир перехватывает запросы TCP-подключения от приложений и отвечает за управление TCP-подключением, а также за передачу данных TCP. Многие из критических замечаний в следующем разделе относятся к этому типу разгрузки TCP.
Полная разгрузка HBA (Host Bus Adapter) достигается в хост-адаптерах iSCSI , которые представляют себя в качестве дисковых контроллеров для хост-системы при подключении (через TCP/IP) к устройству хранения iSCSI . Этот тип разгрузки TCP не только разгружает обработку TCP/IP, но также разгружает функцию инициатора iSCSI. Поскольку HBA представляется хосту как контроллер диска, его можно использовать только с устройствами iSCSI, и он не подходит для общей разгрузки TCP/IP.
Разгрузка TCP Chimney устраняет серьезную критику безопасности, связанную с полной разгрузкой параллельного стека. При частичной разгрузке основной системный стек контролирует все соединения с хостом. После установления соединения между локальным хостом (обычно сервером) и внешним хостом (обычно клиентом) соединение и его состояние передаются механизму разгрузки TCP. Тяжелая работа по передаче и приему данных выполняется разгрузочным устройством. Почти все механизмы разгрузки TCP используют тот или иной тип аппаратной реализации TCP/IP для выполнения передачи данных без вмешательства центрального процессора. Когда соединение закрывается, состояние соединения возвращается из механизма разгрузки в основной системный стек. Сохранение контроля над TCP-соединениями позволяет основному системному стеку реализовывать и контролировать безопасность соединений.
Большая разгрузка при приеме ( LRO ) — это метод увеличения входящей пропускной способности сетевых подключений с высокой пропускной способностью за счет снижения нагрузки на центральный процессор (ЦП). Он работает путем агрегирования нескольких входящих пакетов из одного потока в буфер большего размера, прежде чем они будут переданы выше по сетевому стеку, тем самым уменьшая количество пакетов, которые необходимо обработать. Реализации Linux обычно используют LRO в сочетании с новым API (NAPI), чтобы также уменьшить количество прерываний .
Согласно эталонным тестам, даже реализация этой техники полностью в программном обеспечении может значительно повысить производительность сети. [6] [7] [8] По состоянию на апрель 2007 [Обновить]года ядро Linux поддерживает LRO для TCP только программно. FreeBSD 8 поддерживает LRO аппаратно на адаптерах, которые его поддерживают. [9] [10] [11] [12]
LRO не должен работать на машинах, выступающих в роли маршрутизаторов, так как это нарушает сквозной принцип и может существенно повлиять на производительность. [13] [14]
Универсальная разгрузка при приеме ( GRO ) реализует обобщенный LRO в программном обеспечении, которое не ограничивается TCP/ IPv4 и не имеет проблем, созданных LRO. [15] [16]
В компьютерных сетях большая разгрузка отправки ( LSO ) — это метод увеличения исходящей пропускной способности сетевых подключений с высокой пропускной способностью за счет снижения нагрузки на ЦП . Он работает, передавая мультипакетный буфер на карту сетевого интерфейса (NIC). Затем NIC разбивает этот буфер на отдельные пакеты. Этот метод также называется разгрузкой сегментации TCP ( TSO ) или общей разгрузкой сегментации ( GSO ) применительно к TCP . LSO и LRO независимы, и использование одного не требует использования другого.
Когда системе необходимо отправить большие порции данных по компьютерной сети, эти порции сначала нужно разбить на более мелкие сегменты, которые могут пройти через все сетевые элементы, такие как маршрутизаторы и коммутаторы между исходным и конечным компьютерами. Этот процесс называется сегментацией . Часто эту сегментацию выполняет протокол TCP на хост-компьютере. Перенос этой работы на сетевую карту называется разгрузкой сегментации TCP (TSO).
Например, блок данных размером 64 КиБ (65 536 байт) обычно сегментируется на 45 сегментов по 1460 байт каждый перед отправкой через сетевую карту и по сети. Обладая некоторым интеллектом в сетевой карте, центральный процессор может передать 64 КБ данных в сетевую карту в одном запросе на передачу, сетевая карта может разбить эти данные на более мелкие сегменты по 1460 байт, добавить TCP, IP и данные . заголовки протоколов канального уровня — в соответствии с шаблоном, предоставленным стеком TCP/IP хоста — для каждого сегмента и отправки полученных кадров по сети. Это значительно снижает работу, выполняемую процессором. По состоянию на 2014 [Обновить]год многие новые сетевые карты на рынке поддерживают TSO.
Некоторые сетевые карты реализуют TSO достаточно широко, чтобы его можно было использовать для разгрузки фрагментации других протоколов транспортного уровня или для выполнения фрагментации IP для протоколов, которые сами по себе не поддерживают фрагментацию, таких как UDP .
В отличие от других операционных систем, таких как FreeBSD, ядро Linux не поддерживает TOE (не путать с другими типами сетевой разгрузки). [17] Несмотря на наличие патчей от производителей оборудования, таких как Chelsio или Qlogic , которые добавляют поддержку TOE, разработчики ядра Linux выступают против этой технологии по нескольким причинам: [18]
Большая часть текущей работы над технологией TOE ведется производителями интерфейсных карт 10 Gigabit Ethernet, такими как Broadcom , Chelsio Communications , Emulex , Mellanox Technologies , QLogic .
Large-Receive-Offload (LRO) уменьшает накладные расходы на обработку каждого пакета за счет объединения меньших пакетов в более крупные и передачи их в сетевой стек. Generic-Receive-Offload (GRO) предоставляет обобщенную программную версию LRO [...].