SoftIRQ и быстрая обработка пакетов в сети Linux

SoftIRQ и быстрая обработка пакетов в сети Linux

Я читал о настройке производительности Linux для получения наилучшего времени обработки пакетов при получении данных финансового рынка. Я вижу, что когда NIC получает пакет, он помещает его в память через DMA, затем поднимает HardIRQ, который, в свою очередь, устанавливает некоторые настройки NAPI и поднимает SoftIRQ. Затем SoftIRQ использует драйверы NAPI/устройств для чтения данных из буферов RX с помощью опроса, но это выполняется только в течение ограниченного времени (net.core.netdev_budget, по умолчанию 300 пакетов). Это относится к реальному серверу, работающему под управлением Ubuntu, с NIC solarflare. Мои вопросы приведены ниже:

  1. Если каждый HardIRQ вызывает SoftIRQ, а драйвер устройства считывает несколько пакетов за один раз (netdev_budget), что происходит с SoftIRQ, вызванными каждым из пакетов, которые были опустошены из буфера RX за один раз (каждый полученный пакет вызовет hard irq, а затем soft irq)? Они ставятся в очередь?

  2. Почему NAPI использует опрос для опустошения RX_buffer? Система только что сгенерировала SoftIRQ и считывает RX-буфер, тогда зачем опрос?

  3. Предположительно, опустошение RX_Buffer через softirq будет происходить только из 1 конкретного RX_Buffer, а не через несколько RX_Buffer? Если так, то увеличение netdev_budget может задержать обработку/опустошение других RX_buffer? Или это можно смягчить, назначив разные RX_buffer разным ядрам?

  4. Существуют настройки, гарантирующие, что HardIRQ будут немедленно подняты и обработаны. Однако SoftIRQ могут быть обработаны позже. Существуют ли настройки/конфигурации, гарантирующие, что SoftIRQ, связанные с сетевым RX, также будут обработаны с наивысшим приоритетом и без задержек?

решение1

Что касается ответа на 4-й вопрос,

Да. Сетевые карты NIC являются периферийными устройствами, связанными с softirq, поскольку softirq имеет наивысший приоритет во всех механизмах нижней половины.

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

По сути, механизм NAPI также предназначен для обработки пакетов, поступающих со скоростью, которую ядро ​​по каким-то причинам не может обработать с помощью механизма прерываний.

Я бы посоветовал просто перейти к главе о сетевых драйверах в LDD3.Здесьэто ссылка, которая может быть полезна для того же.

Связанный контент