Можно ли заставить существующее Java-приложение использовать не более x ядер? - PullRequest
33 голосов
/ 16 января 2012

Мы сравниваем существующие программы на Java. Это многопоточные приложения, разработанные для использования многоядерных процессоров. Мы хотели бы измерить влияние количества ядер на скорость работы, но мы не хотим (и не можем) изменить код этих приложений.

Конечно, мы могли бы тестировать программное обеспечение на разных машинах, но это дорого и сложно. Мы бы предпочли программное решение.

Примечание: вы можете предположить, что платформой тестирования является Windows, Linux или Mac. В идеале мы хотели бы иметь возможность запускать тесты на любой из этих платформ.

Ответы [ 2 ]

35 голосов
/ 16 января 2012

Это называется установкой соответствия ЦП, и это настройка ОС для процессов, не относящихся к Java.

В Linux: http://www.cyberciti.biz/tips/setting-processor-affinity-certain-task-or-process.html

В Windows: http://www.addictivetips.com/windows-tips/how-to-set-processor-affinity-to-an-application-in-windows/

На Mac не похоже, что вы можете установить его: https://superuser.com/questions/149312/how-to-set-processor-affinity-on-os-x

0 голосов
/ 16 января 2012

Переверните проблему с ног на голову; вместо того, чтобы выяснить, как ограничить приложение только для использования ядер n на машине с ядром m , выясните, как обеспечить доступность только ядер n к вашему заявлению. Вы могли бы написать очень простую программу, которая потребляет одно ядро, выполнив что-то вроде while (true); и запустив m - n экземпляров этой программы, работающих с наивысшим приоритетом, таким образом гарантируя, что ваш код имеет только n доступных ядер.

В качестве альтернативы, если ваш BIOS или ОС позволяет отключить ядра процессора, это тоже работает. Я знаю, что инструменты CHUD на Mac OS X раньше делали это, но я не касался этих инструментов с эры G5, так что они могут больше не работать.

...