Многоядерность, смещенная в сторону ядра 2?

У меня в системе 4 ядра. Core 2 часто показывает 100% использования в htop. Между тем Core 1,3,4 показывают что-то около 5% большую часть времени.

Это нормально? Есть ли способ лучше распределить нагрузку Core 2 на другие ядра, и это даже желательно?

1 ответ

Решение

Да, это может быть нормально. Зависит от того, сколько управления делает ОС. Два больших инструмента для воздействия на это

  • набор задач, который может указать, какой процессор может использовать процесс
  • установка IRQ-сродства ваших устройств pci

Сходство с IRQ легко исправить. Сделайте несколько операций ввода-вывода, просмотрите /proc/interrupts и, если вы видите MSI-foo на одном и том же процессоре, распространите их. Обычно вы хотите обслуживать IRQ на "реальных ядрах", так как они самые быстрые. Как только вы это выясните, напишите скрипт для фиксации этого при запуске системы, и все готово.

Процессы - это боль, потому что они могут мигрировать между процессорами. Чтобы "сделать это правильно", вам действительно нужно настроить cgroups для рассматриваемых процессов. Или... вы берете ленивый выход и создаете скрипт-обертку для программы X, которая вызывает taskset ... _X.

Измеряйте свои результаты до и после выступления с помощью эталонного теста, такого как fio, или все ваши настройки ни к чему. Если вы не можете измерить свои изменения, вы не знаете, чего они стоят.

Например, у меня есть система с 24 процессорами и 2 узлами numa, которая имеет запоминающее устройство, которое создает прерывание MSI для каждого процессора... и затем связывает их все с процессором 0:-p. Распределение сродства IRQ по первым 12 ядрам увеличило пропускную способность ввода-вывода, зафиксированную fio, в четыре раза. Но эта система на самом деле обладает большой пропускной способностью, а типичный рабочий стол - нет.

Удачи. Производительность работы это весело,... и тяжело:)

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