Сколько максимально различных процессорных ядер может использоваться для обработки одного IP-пакета?

Например, у нас есть 1 процессор с 8 ядрами. Сколько максимально различных CPU-Core может быть использовано для обработки одного IP-пакета при его прохождении через Eth0->TCP/IP->App (исключая обработку в Application)?

Например, может ли это быть 3 процессорных ядра:

  1. Аппаратное прерывание процесса
  2. Расчет контрольной суммы процесса
  3. Процесс копирования пространство ядра -> пространство пользователя (указатель которого был отправлен в сокет)

Это очень важно для производительности, так как каждая передача данных между ядрами стоит очень дорого.


person Alex    schedule 11.01.2016    source источник
comment
Это очень интересный вопрос. Я не уверен в вашем обосновании того, почему это важно, но это интересно с точки зрения дизайна ядра.   -  person Owen    schedule 12.01.2016
comment
Мне кажется, что более простым и плодотворным подходом к параллелизму было бы использование разных ядер для работы с разными пакетами. А 2 и 3 можно разгрузить и с процессора. И если вы можете обрабатывать несколько пакетов за одно прерывание, вы можете амортизировать стоимость 1.   -  person John Hascall    schedule 12.01.2016
comment
Большинство аппаратных средств уже поддерживает версию 2. Версия 3 зависит от конструкции системы, но избежать ее вряд ли удастся. Это также делается разными частями стека. У полного игнорирования обработка пакетов производится на разных уровнях, то есть в разных модулях. По крайней мере, необработанные кадры Ethernet обычно не перемещаются в/из пользовательского пространства. В общем, ядро ​​должно поддерживать локальность, но это не относится только к кадрам Ethernet.   -  person too honest for this site    schedule 12.01.2016
comment
@John Hascall Да, я могу использовать NAPI для объединения irq за 1 шаг. Но аппаратное демультиплексирование (когда разные ядра работают с разными пакетами) требует использования больших фреймов (JIMBO) и маленьких IP-пакетов, когда 1 ethernet-фрейм включает целый 1 IP-пакет, или использовать 1 Eth на CPU-Core: stackoverflow.com/q/18408363/1558037 И этот вопрос как раз о том: насколько дороги эти шаги, и передача данных между Ядрами в этих шаги по использованию Ethernet-адаптера с аппаратным механизмом разгрузки TCP (разгрузка некоторых шагов).   -  person Alex    schedule 12.01.2016
comment
Не уверен, что вы имеете в виду под передачей данных между ядрами. Помимо некоторых данных управления, между ядрами не так много нужно передавать, если только вы не имеете в виду системную архитектуру NUMA. Хотя этот вопрос действительно интересен, он слишком широк для SO - слишком много переменных. Это не дискуссионный форум.   -  person too honest for this site    schedule 12.01.2016
comment
@Alex Я не писал реализацию TCP / IP со времен VAXstations, но я помню, что IP-пакет (был создан) всегда помещается в кадр Ethernet. Так что я не слежу за ходом ваших мыслей...   -  person John Hascall    schedule 12.01.2016


Ответы (1)


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

person Michael Galassi    schedule 11.01.2016