Максимальное использование приложений на ядро не зависит от количества запущенных потоков.
Я пытаюсь использовать Dell Poweredge R900, который я получил как подержанный компьютерный пул (4-кратный четырехъядерный процессор дает мне 16 ядер для запуска симуляции). На данный момент работает Windows Server 2008 R2 Enterprise.
Я запускаю собственный код.net и могу указать количество потоков, которое я хочу. Обычно (например, на моем четырехъядерном компьютере с Windows 10) поток обрабатывает ядро процессора в течение примерно 10 минут. Хотя, если я запускаю 7 потоков на моем сервере (например), я вижу, что 7 из моих 16 ядер светятся с 20% загрузкой. Если я запускаю 16 потоков, я вижу все 16 ядер на ~20%. Поэтому я попытался запустить 48 потоков, ожидая, что мои 16 ядер теперь должны иметь по 3 потока каждый и, таким образом, использовать 60% загрузки, но без потерь. Я снова получаю 20% (и каждый поток заметно в 3 раза медленнее, поэтому обрабатываются все 3 потока на ядро). Независимо от того, сколько потоков я запускаю, моя загрузка никогда не превышает 20% на ядро. Теперь, если я запускаю 2 экземпляра моего кода в 16+ потоков каждый, все ядра переходят на 40%. Третий случай, 60%. Так что это не предел ФСБ или что-то еще. Что-то должно подавлять каждый экземпляр до 20% на ядро.
Я не могу на всю жизнь понять, где узкое место здесь. это Windows Server вещь? Что такое BIOS? Я перевернул ОС от оптимизации для фоновых процессов к оптимизации для программ... Похоже, это не дало результата. Я совершенно новичок в Windows Server, поэтому любые идеи будут с благодарностью!
1 ответ
Похоже, что в Server 2008 R2 есть способ ограничения использования процессора. Я нашел информацию об этом здесь и рекомендую вам прочитать ее и, возможно, попытаться установить свои собственные ограничения:
https://technet.microsoft.com/en-us/library/ff384148(v=ws.10).aspx
Также, пожалуйста, обратите внимание, что в разделе комментариев вышеупомянутой ссылки есть 2 ссылки на дальнейшие объяснения по теме...