Large send offload — Википедия

В компьютерных сетях large send offload (LSO) (или generic segmentation offload (GSO)) — это способ увеличения исходящей пропускной способности сетевого интерфейса и снижения нагрузки на центральный процессор. LSO особенно актуален в виртуальной среде, так как позволяет тратить существенно меньше ресурсов процессора на обработку TCP/IP-операций.

В применении к TCP также носит название TCP segmentation offload (TSO).

Похожий подход, применяемый для дефрагментации входящих пакетов, называется large receive offload (LRO). LSO и LRO не зависят друг от друга и могут применяться по отдельности.

Принцип действия

[править | править код]

Когда системе необходимо отослать большой объём данных по сети, сначала происходит разделение всего объёма на сегменты меньшего размера, которые могут быть беспрепятственно переданы через все узлы сети (маршрутизаторы, коммутаторы и др.), разделяющие два хоста, осуществляющих обмен данными. Этот процесс называется сегментацией. Обычно этим занимается реализация TCP протокола на отправляющей системе. Перенос этой работы с центрального процессора в сетевой адаптер называется TCP segmentation offload (TSO).

К примеру, пусть необходимо передать пакет размером 64КБ. По умолчанию он будет разделен на 46 сегментов по 1448 байтов, которые будут непосредственно переданы в сетевой интерфейс и далее по сети до узла назначения.

Современные сетевые адаптеры умеют фрагментировать пакеты самостоятельно без участия центрального процессора. В этом случае, при необходимости передать 64КБ данных, данные одним запросом передаются в сетевой интерфейс, где уже осуществляется их фрагментация и последующая отправка. Таким образом происходит снижение нагрузки на центральный процессор.

Некоторые сетевые интерфейсы поддерживают более современный механизм TSO, который можно использовать для протоколов, не поддерживающих фрагментацию, например для UDP.