Запустите мое приложение в симулируемой памяти с низкой скоростью процессора - PullRequest
8 голосов
/ 22 июля 2011

Я хочу провести стресс-тестирование моего приложения таким образом, потому что оно кажется сбойным на некоторых очень старых клиентских машинах.

Сначала я немного прочитал о QEmu и подумал об аппаратной эмуляции, но, похоже, это далеко. Я спросил в superuser , но не получил много отзывов (пока).

Итак, я обращаюсь к вам, ребята ... Как вы проводите такие испытания?

Ответы [ 9 ]

7 голосов
/ 22 июля 2011

Я не уверен в замедлении работы процессора, но если вы используете виртуальную машину, такую ​​как VMWare, вы можете контролировать, сколько фактически используется оперативной памяти.Я запускаю его на домашней MBP с 8 ГБ, а моя виртуальная машина WinXP ограничена объемом 1,5 ГБ.

РЕДАКТИРОВАТЬ : я только что проверил мою версию VMWare, и яможет контролировать количество ядер, которые он может использовать.Это определенно не то же самое, что более медленный процессор, но он может выделить некоторые проблемы для вас.

Поскольку не совсем ясно, что ваше приложение выходит из строя из-за старого оборудования или старой ОС, клиент виртуальной машины должен позволить вамдостаточно быстро протестировать различные версии ОС.Это пригодилось мне несколько лет назад, когда я пытался заставить приложение .Net 2.0 работать на Win98 (это можно сделать , можно , хотя я не помню, как у меня это получалось ...).

3 голосов
/ 30 июля 2011

Virtual Box - бесплатная виртуальная машина, похожая на VMWare.У этого также есть способность уменьшить доступную память.Он может ограничивать количество доступных процессоров, но не ограничивать их скорость.

2 голосов
/ 01 августа 2011

Попробуйте cpulimit , большинство дистрибутивов включает его (Ubuntu делает) http://www.digipedia.pl/man/doc/view/cpulimit.1

2 голосов
/ 29 июля 2011

В системах POSIX (Unix) вы можете применять лимиты запуска к процессам (то есть к выполнению программы). Системный вызов для этого называется setrlimit(), и большинство оболочек позволяют использовать встроенный ulimit для установки их из командной строки (обычный POSIX ulimit не очень полезно). Используя их, вы можете запустить программу с низкими пределами для симуляции компьютера меньшего размера.

Системы POSIX также предоставляют команду nice для запуска программы с более низким приоритетом ЦП, которая может имитировать более медленный ЦП, если вы также убедитесь, что в это же время запущена другая интенсивная ЦП программа.

1 голос
/ 01 августа 2011

Думайте нестандартно. Какое приложение из тех, которые вы используете регулярно, делает это? Конечно, отладчик! Но как вы можете добиться такого поведения, чтобы подражать низкому процессору?

Секрет вашего вопроса asm _int 3. Это команда "pause me" сборки, которая отправляется из подключенного отладчика в приложение, которое вы отлаживаете.

Подробнее о int 3 на этот вопрос .

Вы можете использовать код из этого инструмента для непрерывной приостановки / возобновления процесса. Вы можете добавить интервал и заставить этот инструмент приостанавливать ваше приложение на этот промежуток времени.

Скорость эмулируемого процессора будет: (YourCPU / Interval) -0,00001% из-за сигнализации и других процессов, запущенных на вашем компьютере, но это должно сработать.

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

Что-то типа: MyClass* foo = AllocWrapper(new MyClass(arguments or whatever)); Тогда у вас может быть AllocWrapper, выделяющий / освобождающий память для вас.

1 голос
/ 31 июля 2011

Я думаю, что маловероятно, что процессор скорость будет выполнять очень много ошибок; С другой стороны, для разных процессорных функций гораздо важнее. Многие реализации виртуальных машин предоставляют способы включения и выключения определенных функций процессора; В частности, qemu обеспечивает высокий уровень контроля над тем, что доступно для процессора.

1 голос
/ 27 июля 2011

Если вы хотите снизить скорость вашего процессора, вы можете легко сделать это, изменив программу с бомбой-вилкой

int main(){
     int x=0;
     int limit = 10

     while( x < limit ){

         int pid = fork();
         if( pid == 0 )
                 while( 1 ){}
         else
             x++;
    }

}

Это замедлит ваш компьютер довольно быстро, вы можете изменить предельную переменную на большее число. Я должен предупредить вас, хотя это может быть опасно, потому что в случае неправильной реализации вы можете взорвать вашу систему, оставив ее бесполезной, если вы не перезапустите ее. Сначала прочитайте это , если вы не понимаете, что будет делать этот код.

0 голосов
/ 01 августа 2011

См. https://serverfault.com/questions/36309/throttle-down-cpu-speed-of-vmware-image если бы он был заявлен как «бесплатный, как в пиве», VMware vSphere Hypervisor ™ (ESXi) позволяет выбирать скорость виртуального ЦП в дополнение к настройке размера памяти виртуальной машины.

0 голосов
/ 01 августа 2011

В Linux вы можете использовать ulimit, как сказал Рэдвальд. В Windows вы можете использовать системный вызов SetProcessWorkingSetSize. Но они устанавливают ограничение только для каждого процесса. В действительности, части системы начнут выходить из строя в напряженной среде. Я бы предложил использовать инструмент Sysinternals testlimit, чтобы напрячь всю машину.

...