Кто-нибудь может объяснить, каковы аппаратные функции TSO / LRO в TCP? - PullRequest
7 голосов
/ 11 сентября 2011

Кто-нибудь может объяснить, каковы аппаратные функции TSO / LRO в TCP и могут ли эти функции также отвечать механизму подтверждения?

Ответы [ 2 ]

15 голосов
/ 22 августа 2012

Я знаю, что это старая ветка, но я чувствую, что ответ не полный.

Первое, что вы должны понять, это то, что TSO - вершина довольно большого айсберга, когда речь заходит о методах повышения производительности сети.

Давайте рассмотрим базовый сетевой интерфейс. Ваша ОС отправляет целый пакет на сетевую карту (сетевую карту), используя PIO (запрограммированный ввод / вывод, т. Е. Одно слово (обычно 32 бита) за раз), так как он должен отображаться только на проводе, исключая последовательность проверки кадра.

Это повышение скорости передачи данных.

Итак, первое повышение скорости - использование DMA (Direct Memory Access), это позволяет процессору делать другие вещи, пока оборудование копирует пакет. Но ОС все еще должна копировать пакетные данные в память и генерировать заголовки и контрольные суммы.

Второе ускорение состоит в том, что аппаратное обеспечение генерирует контрольную сумму для части данных пакета, ОС все равно будет копировать данные в свое пространство памяти и помещать заголовок перед ним. Поскольку ОС генерирует заголовки, она также может всегда генерировать контрольные суммы для заголовков. Это кажется сложным, но механизм на самом деле довольно прост. Аппаратному устройству предписывается начинать контрольную сумму, когда она достигает позиции XX, и помещать контрольную сумму в позицию yy в буфер пакетов.

Третьим стимулом является использование Scatter / Gather. В основном это означает, что ОС не копирует данные в свою память, она передает заголовок и местоположение части данных драйверу и позволяет драйверу собирать данные для отправки. Для этого требуется контрольная сумма оборудования, если ОС требуется контрольная сумма пакета, то сначала необходимо скопировать его в память.

Четвертый (и самый высокий уровень встроенной поддержки в Linux) - TSO. С помощью TSO ОС предоставляет оборудованию шаблон заголовка, а затем большой кусок данных (не более 64 КБ) для его разделения и проверки контрольной суммы, что означает, что ОС необходимо генерировать меньше заголовков, а любые издержки при настройке DMA также уничтожаются. , Когда пакеты поступают по проводам, они соответствуют обычным правилам пакетов и будут совместимы с ЛЮБЫМ коммутатором или маршрутизатором, через который они проходят.

Прием это другая история. Аппаратная контрольная сумма в данном случае является скорее предположением, чем определенностью, поэтому ДОЛЖЕН произойти, если аппаратное обеспечение передает пакет и контрольную сумму отдельно в ОС и позволяет ОС решать, в порядке ли пакет.

Scatter / Gather в значительной степени избыточен для получения.

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

Несколько заметок о сетевом стеке.

Программное обеспечение должно ВСЕГДА создавать пакеты ACK. Единственная причина, по которой это не произойдет, заключается в том, что у вас на сетевой карте есть TOE (TCP Offload Engine). Я не знаю ни одной ОС, которая бы изначально поддерживала это, а это значит, что вам нужно взломать его, чтобы сделать его совместимым.

Так что полный и бессвязный ответ, надеюсь, он кому-нибудь поможет.

6 голосов
/ 11 сентября 2011

Хост с аппаратным обеспечением с поддержкой TSO отправляет данные TCP на сетевой адаптер без сегментирования данных в программном обеспечении.Сетевая карта выполнит сегментацию TCP (прочитайте - она ​​разделит большой кусок данных на сегменты).Сетевые карты, поддерживающие LRO, принимают пакеты и собирают их перед передачей данных в локальное программное обеспечение.

LRO / TSO не несут ответственности непосредственно за механизм подтверждения (хотя он полагается на GBN).Обратите внимание, что LRO / TSO безопасны для использования на маршрутизаторах и мостах, если все задействованные интерфейсы поддерживают эту технику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...