Странная ситуация: Redhat Enterprise 5.5 (стандартная установка, без обновлений, x64) на рабочей станции HP z800. (Dual Xeon 2,2 Ghz. 8 ядер, 16, если считать Hyper-threading. RH видит 16 ядер.)
У нас есть приложение, которое может использовать 1, 2 или 4 потока для тяжелых вычислений. Каким-то образом все эти потоки выполняются на одном ядре при 100% загрузке (остальные 15 ядер почти простаивают), поэтому от дополнительных потоков нет никакой пользы. На самом деле наблюдается небольшое замедление, поскольку потоки мешают друг другу на одном ядре.
Как заставить их работать на отдельных ядрах (если возможно)? Приложение 64-битное. Ничего не могу изменить в программном обеспечении, кроме изменения настроек потоков. Есть ли какие-то непонятные настройки Linux, которые я могу попробовать изменить? (Я парень True64 и Aix. Я использую Linux, но не имею глубоких знаний о планировании процессов в Linux.)
/ proc / cpuinfo list al 16. top en gnome cpu-monitor оба показывают, что используется только 1 ядро. Я тоже пробовал что-то похожее на эту штуку с Perl. Мы можем загрузить весь ЦП почти до 100%, если захотим. Производитель приложения утверждает: Да, оно многопоточное, но еще не оптимизировано. Это будет следующая версия (в августе).
Поэтому я думаю, что приложение выполняет подпоточность в своем собственном пространстве процессов вместо правильных реальных отдельных потоков процессов. На самом деле я ничего не могу с этим поделать ...
Загрузите Утилита стресса от RPMforge или yum и запустите его с помощью:
stress --cpu 16
создать 16 рабочих. Как указано выше, запустите top
с 1
переключите, чтобы показать все ЦП в списке.
После того, как вы проверили список и активность процессора, нажмите Ctrl-C и запустите приложение. Начало top
с тем же переключателем, а затем используйте H
переключатель, чтобы показать все потоки процесса.
Вы на 100% уверены, что он работает только на одном ядре? Как вы проверяли? сверху, а затем нажал "1"? Вы видите все свои 16 ядер "сверху" после нажатия "1"? Или в "cat / proc / cpuinfo"?
Что происходит с другими приложениями? Если вы начнете что-то вроде
perl -e 'foreach (1..9e9) { sqrt(1234) }' &
16 раз, видите ли вы все свои 16 ядер на 100%?
Я думаю, что это скорее конфигурация вашего приложения, а не конкретная система Linux.