Назад | Перейти на главную страницу

Использование системного процессора на freeBSD

У меня есть большое количество мелких работ, которые мне нужно выполнить. Если я запускаю их на 6-ядерном Xeon, Broadwell, он работает с процессором не менее 80-90%.

Если я запускаю такое же задание на коробке с 2X16-ядерным ЦП Broadwell, если я масштабирую количество заданий, я получаю 80% системного ЦП, использую, и производительность составляет всего около 3 раз по сравнению с одним 6-ядерным ЦП. , несмотря на то, что у него в 5 раз больше ядер и быстрее.

Есть предложения по улучшению этого?

РЕДАКТИРОВАТЬ

Проблема, кажется, становится особенно серьезной, если задания меньше определенного размера, если они выполняются на немного больших наборах данных, использование ЦП системы не становится таким высоким, что заставляет меня подозревать, что существует некоторый предел скорости, с которой BSD может порождать процессы.

как предложено ниже

/usr/share/dtrace/toolkit/procsystime

дает нам свои лучшие записи на машинах с ядром 2x16

    readlink        80898169570
      select       128032327883
      execve       215209078214
       wait4      2127022159693
        read      2545974471446

и на 6 основных машинах

    _umtx_op         5997915963
      select         8746697465
        read        59777849114
       wait4        61693132566

что, кажется, недостаточно для объяснения этого нелинейного масштабирования.

РЕДАКТИРОВАТЬ

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

Профилирование покажет, что занимает процессорное время. При значительном времени, проведенном в системе, его можно найти, сосредоточившись на системных вызовах.

Для этого помогает Dtrace. /usr/share/dtrace/toolkit/procsystime покажет процессорное время системным вызовом. Если вам нужны подробности, у автора есть инструменты для визуализации графика пламени.

Попытавшись отследить источник этого и обнаружив много несоответствий, я заметил, что системное время начинает очень быстро расти, если загрузка процессора превышает 50%. Поэтому я попытался отключить гиперпоточность в BIOS, и проблема исчезла, пропускная способность машины сильно выросла.

Ясно, что BSD и гиперпоточность плохо работают, по крайней мере, для этого типа рабочей нагрузки. В результате пропускная способность увеличилась примерно на 120% после отключения гиперпоточности.