Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

8.3. Обзор получения пакетов

Чтобы облегчить идентификацию слабых мест в сети, необходимо знать, как осуществляется передача и получение пакетов. Оптимизация получения пакетов имеет большое значение при коррекции работы сети, так как потеря пакетов чаще всего происходит именно на стадии их получения.
Прохождение данных из сети

Рисунок 8.1. Прохождение данных из сети

Процесс получения пакета из сети можно разбить на несколько этапов.
  1. Оборудование получает пакет. Сетевая карта получает пакет из сети. В зависимости от конфигурации драйвера он может быть помещен в буфер внутренней памяти устройства или в кольцевой буфер.
  2. Аппаратное прерывание. Сетевая карта генерирует запрос прерывания, после чего будет назначено программное прерывание.
  3. Программное прерывание. На этом этапе, собственно, и начинается процесс получения пакета в контексте softirq.
    Обслуживание прерывания на том же процессоре, где обрабатывается аппаратный запрос, минимизирует нагрузку. Ядро перемещает пакет из буфера в сетевой стек, откуда он может быть перенаправлен, удален или передан ожидающему сокету.
    Полученный сокетом пакет будет добавлен к приложению, привязанному к сокету. Этот процесс будет повторяться до тех пор, пока не будет достигнут предел dev_weight, или до тех пор, пока буфер сетевой карты не будет освобожден (см. Раздел 8.4.1, «Буфер сетевой карты»).
  4. Получение пакета приложением. Приложение извлекает пакет из очереди сокета при помощи вызовов POSIX (read, recv, recvfrom). На этом этапе данные удаляются из сетевого стека.

8.3.1. Привязка процессоров и кэша

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