У меня есть большое количество мелких работ, которые мне нужно выполнить. Если я запускаю их на 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% после отключения гиперпоточности.