Я делаю тест производительности (задержки) на сокете 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
Я подозреваю, что здесь работает какая-то функция энергосбережения оборудования. Спящий режим 10 мс — это более чем достаточно времени, чтобы современное оборудование перешло в режим пониженного энергопотребления. Когда вы смотрите на вещи на микросекундном уровне, существует реальная измеримая задержка для выхода из состояния энергосбережения.
Я предполагаю, что параллельная работа «занятой» программы не позволяет оборудованию переходить в состояние низкого энергопотребления. Стандартные вещи, чтобы попробовать:
Последнее предложение особенно важно для процессоров Sandy Bridge (что у вас есть), по крайней мере, с RHEL / CentOS 5.x (я полагаю, вы работаете). Я обнаружил, что ядро Linux по-прежнему отменяет некоторые настройки BIOS. Другие параметры ядра Linux, которые могут вам помочь:
Других решений пока нет …