Межпроцессорные прерывания на конкретном ядре
В настоящее время я изучаю проблему производительности платформы NXP для приложения пересылки DPDK. Ниже приведена информация о настройке:
- Приложение работает на ядре 7 и работает в тесном цикле для обработки ввода / вывода пакетов.
- 4 * 10G Сетевые интерфейсы связаны с генератором трафика для ввода трафика.
Наблюдая за трафиком, я наблюдаю, что ядро 7 выполняет некоторую задачу в контексте обработки IPI, поэтому приложение DPDK не использует 100% пропускную способность ЦП. Ниже приведен снимок хвоста / процедуры / прерывания.
root @ localhost: / usr / local / dpdk / dpaa2 # tail / proc / interrupts
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
394: 0 0 0 0 0 0 0 0 ITS-fMSI 240024 Edge vfio-irq[394](dpio.8)
395: 0 0 0 0 0 0 0 0 ITS-fMSI 240025 Edge vfio-irq[395](dpio.9)
IPI0: 5912 88 90 88 87 86 88 202 Rescheduling interrupts
IPI1: 64 3203 3203 3203 3203 3203 3203 3139 Function call interrupts
IPI2: 0 0 0 0 0 0 0 0 CPU stop interrupts
IPI3: 0 0 0 0 0 0 0 0 CPU stop (for crash dump) interrupts
IPI4: 0 0 0 0 0 0 0 0 Timer broadcast interrupts
IPI5: 48795343 91 146481 146479 146481 146479 32 48816043 IRQ work interrupts
IPI6: 0 0 0 0 0 0 0 0 CPU wake-up interrupts
Сейчас я изучаю, какая служба отвечает за генерацию этих прерываний IPI. В моем случае IPI5 постоянно увеличивается. Может кто-нибудь помочь мне найти решение. Есть ли какая-нибудь утилита Linux для анализа / отслеживания этих прерываний?
Заранее спасибо.
Сунил Кумар
1 ответ
Вы должны быть в состоянии отследить большинство причин удаленного пробуждения через perf sched
, Увидеть:
- LWN для некоторых основ
- Ядро Wiki для документации
- Больше примеров Брендон Грегг
Как только вы обнаружили, что, по вашему мнению, запускает IPI, вы можете использовать более подробные примеры, чтобы отследить, что именно происходит.
Если ничего из общего (более простого в использовании) не работает, попробуйте отследить
IPI - Inter Processor Interrupt, генерируется одним процессором для отправки задачи другому процессору.
В вашем случае кажется, что CPU-7 получает слишком много IP из-за сетевого трафика. Обычно сетевые прерывания отправляются на CPU-0. Поскольку приложение, обрабатывающее пакеты, выполняется на CPU-7, CPU-0 передает пакет через IPI.
Вы можете избежать этого, запустив приложение на CPU-0 или закрепив сетевые прерывания на CPU-7.