Как написать программу на C или C ++, которая будет действовать как заполнитель цикла памяти и процессора? - PullRequest
10 голосов
/ 31 августа 2010

Я хочу протестировать возможности управления памятью программы, например (например, имя программы Director )

  1. Что произойдет, если некоторые другие процессы занимают слишком много памяти, а для директора слишком мало памяти? Как ведет себя режиссер?
  2. Что произойдет, если во время работы директора слишком много циклов ЦП используется какой-либо другой программой?
  3. Что произойдет, если через некоторое время освободится память, используемая другими программами? Как директор забирает память и начинает работать на полную мощность. и т.д.

Я буду проводить эти эксперименты на Unix-машине. Один из способов - ограничить объем памяти, доступной для процесса, используя ulimit, но нет хорошего способа контролировать использование цикла процессора.

У меня есть другая идея. Что, если я напишу какую-нибудь программу на C или C ++, которая действует как динамическая память и наполнитель ЦП, то есть ничего не делает полезного, но в любом случае съедает память и / или циклы ЦП? Мне нужны некоторые идеи о том, как такая программа должна быть структурирована. Мне нужно иметь динамический (во время выполнения) контроль над используемой памятью и процессором. Я думаю, что создание большого количества потоков было бы хорошим способом засорять циклы процессора. Это верно? Есть ли лучший подход, который я могу использовать?

Любые идеи / предложения / комментарии приветствуются.

Ответы [ 4 ]

10 голосов
/ 31 августа 2010

http://weather.ou.edu/~apw/projects/stress/

Напряжение - преднамеренно простой генератор рабочей нагрузки для систем POSIX.Он налагает на систему настраиваемое количество ресурсов процессора, памяти, ввода-вывода и нагрузки на диск.Он написан на C и является свободным программным обеспечением, лицензированным по GPLv2.

Функциональность, к которой вы стремитесь, перекрывает набор функций "инструментов тестирования".Так что также проверьте http://ltp.sourceforge.net/tooltable.php.

1 голос
/ 31 августа 2010

Есть несколько проблем с таким дизайном:

  1. В системе виртуальной памяти объем памяти практически не ограничен. (Ну, это ограничено вашим жестким диском ...) На практике системы обычно исчерпывают адресное пространство задолго до того, как у них заканчивается резервное хранилище - а адресное пространство является ресурсом для каждого процесса.
  2. Любая разумная (не в реальном времени) операционная система ограничивает объем процессорного времени и памяти, которые ваш процесс может использовать по сравнению с другими процессами.
  3. Это уже сделано.

Что еще более важно, я не понимаю, почему вы захотите это сделать.

1 голос
/ 31 августа 2010

Если у вас одно ядро, этого достаточно для нагрузки на процессор:

while ( true ) {
   x++;
} 

Если у вас много ядер, вам нужен поток на ядро.

Вы делаетеон может быть слишком голодным, если добавить несколько снов.

Что касается памяти, просто распределите лоты.

0 голосов
/ 31 августа 2010

Динамическое управление памятью, вы можете просто выделить или освободить буферы определенного размера для использования или освободить больше или меньше памяти. Что касается загрузки процессора, вам нужно будет получить функцию ОС, чтобы проверить это и периодически проверять это и видеть, нужно ли вам выполнять полезную работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...