Локальный процессор может ухудшить производительность удаленного процессора при получении пакетов

У меня есть сервер с 2 процессорами Intel Xeon E5-2620 (Sandy Bridge) и 82599 NIC 10 Гбит / с (2 порта), которые я использовал для высокопроизводительных вычислений. Из соответствия PCI я вижу, что сетевой адаптер 10G подключен к CPU1. Я запустил несколько потоков приема пакетов для проведения экспериментов, потоки получают пакеты, выполняют разбор IP / UDP и копируют в буфер. Драйвер, который я использовал для 10G NIC - IOEngine PacketShader / Packet-IO-Engine · GitHub

Q1! В режиме бездействия CPU1 ухудшается производительность приема пакетов CPU0

1.1) Если 1, 2 или 4 потока связаны с CPU0, общая производительность всех потоков составляет около 2,6-3,2 Гбит / с. 1.2) Если 2 потока связана с CPU1, общая производительность составляет 16.XGbps 1.3) Если 4 потока связаны для CPU1 общая производительность составляет 19.XGbps (максимум на порте 2 * 10G)

Поскольку CPU0 напрямую не связан с сетевой картой, кажется, что максимальная скорость приема на CPU0 составляет 2,6-3,2 Гбит / с. Однако я обнаружил, что если на CPU1 выполняются некоторые вычислительные процессы, потоки получения пакетов на CPU0 повышаются до 15.XGbps с 2 потоками и до 19.XGbps с 4 потоками.

Это связано с управлением питанием? Если CPU1 находится в режиме ожидания, он будет работать в режиме энергосбережения? Даже если это так, как CPU1 может влиять на производительность CPU0? Есть что-то, чего я не знаю о QPI?

Q2! Перегруженный ЦП1 снижает производительность всех пакетов

2.1) Если 1 поток приема пакетов работает на CPU0, а 1 поток приема пакетов работает на CPU1, общая производительность составляет 10 Гбит / с. Производительность каждого потока практически одинакова - 5.X Гбит / с. 2.2) Если 2 потока приема пакетов работают на CPU0, а 2 потока приема пакетов работают на CPU1, общая производительность составляет 13 Гбит / с. И производительность каждого потока почти одинакова - 3.X Гбит / с, что ниже, чем 2.1, 1.2 и 1.3.

Короче говоря, при получении потоков, работающих как на CPU0, так и на CPU1, все потоки не могут достичь своей максимальной производительности, и их производительность практически одинакова.

Я думаю, что я очень много не знаю о NUMA и QPI, кто-нибудь может мне помочь объяснить это? Спасибо

1 ответ

Q1: Да, похоже, это может быть связано с управлением питанием. QPI имеет низкое энергопотребление, а также слот PCIe, свисающий непосредственно с каждого разъема процессора, ядер процессора и процессора в целом. Подробности здесь: https://software.intel.com/en-us/articles/power-management-states-p-states-c-states-and-package-c-states

Если у вас есть доступ к BIOS, попробуйте отключить L-состояния QPI, L-состояния PEG PCIe и C-состояния процессора. Если это исправит это, вы можете отменить некоторые из этих настроек, чтобы выяснить, какие из них несут наибольшую ответственность за снижение производительности.

Вопрос 2. Корпорация Intel предоставляет некоторые подробные сведения о правилах упорядочения и управления потоком для PCIe, которые могут иметь отношение к делу, но сложно многое ответить на них, кроме как знать, что они существуют и могут ограничивать производительность. Могут быть подобные ограничения в uncore любого сокета, которые публично не зарегистрированы. Если что-то из этого имеет место, вы можете продолжить изучение VTune и посмотреть, какие ресурсы исчерпаны.

Также может быть производительность таблицы в схеме синхронизации, используемой в драйвере NIC. Типы анализа VTune "Параллелизм" и "Замки и ожидания" могут помочь выявить и направить решение этих проблем.

Другие вопросы по тегам