Подтвердить что ты не робот

"сеть с нулевой копией" и "обход ядра"?

В чем разница между "сетью с нулевой копией" и "байпасом ядра"? Это две фразы, означающие одно и то же, или разные? Является ли ядро ​​обходным методом, используемым в "сети с нулевой копией", и это отношение?

4b9b3361

Ответ 1

В чем разница между "сетью с нулевой копией" и "байпасом ядра"? Это две фразы, означающие одно и то же, или разные? Является ли ядро обходной техникой, используемой в "сетях с нулевой копией", и это отношения?

TL; DR - это разные понятия, но вполне вероятно, что нулевая копия поддерживается в API-интерфейсе обхода ядра.


Пользовательский обход

Этот способ коммуникации также должен быть рассмотрен. Возможно, это возможно для транзакций DMA-to-DMA, которые вообще не связаны с процессором. Идея состоит в том, чтобы использовать splice() или аналогичные функции, чтобы избежать пользовательского пространства вообще. Обратите внимание, что при использовании splice() весь поток данных не требуется обходить пространство пользователя. Заголовки могут считываться в пространстве пользователя, а данные передаются непосредственно на диск. Наиболее распространенным падением этого является splice() который не выполняет выгрузку контрольной суммы.

Нулевая копия

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

  1. Указатель данных
  2. длина
  3. Следующий дескриптор буфера

Преимущество состоит в том, что заголовки сети не должны существовать бок о бок, а заголовки IP, TCP и приложений могут физически отличаться от данных приложения.

Если контроллер не поддерживает это, заголовки TCP/IP должны предшествовать пользовательским данным, чтобы они могли быть заполнены перед отправкой на сетевой контроллер.

zero copy также подразумевает некоторую настройку MMU для ядра пользователя, чтобы страницы были общими.

Обход ядра

Конечно, вы можете обойти ядро. Это то, что pcap и другое программное обеспечение сниффера делали в течение некоторого времени. Тем не менее, трудно увидеть случай, когда пользовательское пространство будет иметь определенную победу, если оно не привязано к конкретному оборудованию. Некоторые контроллеры сети могут иметь поддержку рассеяния в контроллере, а другие - нет.

Для выполнения байпаса ядра существуют различные инкарнации интерфейсов ядра.


Сложить это вместе...

Это две фразы, означающие одно и то же, или разные?

Они разные, как мы надеемся, объясняют.

Является ли ядро обходной техникой, используемой в "сетях с нулевой копией", и это отношения?

Это наоборот. Обход ядра может использовать нулевую копию и, скорее всего, будет поддерживать ее, поскольку буферы полностью контролируют приложение. Кроме того, между ядром и пользовательским пространством отсутствует обмен памяти (это означает, что не нужно использовать общие страницы MMU и любые эффекты кэша /TLB, которые могут вызывать). Поэтому, если вы используете обход ядра, часто будет полезно поддерживать нулевую копию; так что сначала вещи могут казаться одинаковыми.

Если доступен DMA с распределением рассеяния (большинство современных контроллеров), пользовательское пространство или ядро могут использовать его. нулевая копия в этом случае не так полезна.

Ссылка:

Ответ 2

Сеть с нулевым копированием

Вы делаете нулевые копии, когда никогда не копируете данные между пользовательским пространством и ядром (я имею в виду пространство памяти). Например:

C language recv(fd, buffer, BUFFER_SIZE, 0);

По умолчанию данные копируются:

  1. Ядро получает данные из сетевого стека
  2. Ядро копирует эти данные в buffer, который находится в пользовательском пространстве.

При использовании метода с нулевой копией данные не копируются и не попадают в пользовательское пространство непосредственно из сетевого стека.

Обход ядра

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

Ответ 3

ZERO-COPY:

При передаче и приеме пакетов, все пакетные данные должны быть скопированы из буфера пользовательского пространства в буферы ядра для передачи и наоборот для получения. Драйвер с нулевой копией избегает этого, поскольку пользовательское пространство и драйвер совместно используют пакетную буферную память.

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

Ответ 4

Другими примерами обхода ядра и нулевой копии являются DPDK и RDMA. Когда приложение использует DPDK, оно обходит стек TCP/IP ядра. Приложение создает кадры Ethernet и сетевой адаптер, который захватывает эти кадры с помощью DMA непосредственно из памяти пользовательского пространства, поэтому он имеет нулевую копию, потому что нет копии из пользовательского пространства в пространство ядра. Приложения могут выполнять аналогичные операции с RDMA. Приложение записывает в пары очередей, которые NIC напрямую передает и передает. RDMA iblibverbs также используется внутри ядра, поэтому, когда iSER использует RDMA, это не обход ядра, но это нулевая копия.

http://dpdk.org/

https://www.openfabrics.org/index.php/openfabrics-software.html