очень интересный результат теста латентности IPC в Linux 2.6.18

Я делаю тест производительности (задержки) на сокете Unix под Linux 2.6.18,
процесс A записывает 1024 байта в процесс B каждые 10 мс, и результат показывает, что средняя задержка составляет 20 мкс с небольшим стандартным отклонением (2–3 мкс).

Тест становится интересным, когда я запускаю несколько дополнительных процессов, связанных с процессором, одновременно с процессом A&Во-вторых, эти новые процессы очень удобны для кэша, такие как занятый цикл простых математических вычислений, но в результате, что удивляет меня, задержка IPC внезапно снижается и в среднем достигает 15 единиц.

Насколько я знаю, для улучшения интерактивности планировщик O (1) (2.6 до 2.6.23) вознаграждает процесс, связанный с вводом-выводом, некоторым эвристическим методом, но это не может объяснить, почему скорость становится быстрее даже в первом случае.

Я также считал, что если Linux делает какой-то особый случай занятой петли, когда процесс A был вознагражден, но это, похоже, не дальнейшее тестирование.

Это действительно смущает меня.


моя конфигурация:
Процессор: Intel (R) Xeon (R) CPU E5-2609 0 @ 2,40 ГГц с 10 М кэш-памятью L3
MEM: 32G
ОС: Linux 2.6.18-308.el5 SMP x86_64

3

Решение

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

Я предполагаю, что параллельная работа «занятой» программы не позволяет оборудованию переходить в состояние низкого энергопотребления. Стандартные вещи, чтобы попробовать:

  • На уровне BIOS отключите все функции энергосбережения, включая C-состояния
  • На уровне ОС отключите cpuspeed (или любую другую программу масштабирования частоты, которую использует ваш дистрибутив)
  • Попробуйте загрузиться с параметром ядра «idle = poll»

Последнее предложение особенно важно для процессоров Sandy Bridge (что у вас есть), по крайней мере, с RHEL / CentOS 5.x (я полагаю, вы работаете). Я обнаружил, что ядро ​​Linux по-прежнему отменяет некоторые настройки BIOS. Другие параметры ядра Linux, которые могут вам помочь:

  • intel_idle.max_state = 0
  • processor.max_cstate = 0
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]