Есть ли способ дросселирования CPU/памяти процесса?

Проблема: у меня есть машина для разработчиков (читайте: быстро, много памяти), но у пользователя есть пользовательский компьютер (чтение: медленная, не очень большая память).

Я могу имитировать медленную сеть, используя Fiddler (http://www.fiddler2.com/fiddler2/) Я могу посмотреть, как процессор используется с течением времени для процесса с помощью Process Explorer (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx).

Есть ли способ ограничить объем процессора, который может иметь процесс, или объем памяти, который может иметь процесс, чтобы более эффективно имитировать пользовательский компьютер? (Например, чтобы изолировать проблемы с производительностью)

Я предполагаю, что могу использовать виртуальную машину, но я ищу что-то немного легче.

Я использую Windows XP, но решение для любой машины Windows будет приветствоваться. Спасибо.

Ответы

Ответ 1

Платформа SDK раньше поставлялась со стрессовыми инструментами для того, чтобы делать это еще в старые добрые времена (STRESS.EXE, CPUSTRESS.EXE в SDK), но они все еще могут быть (проверьте установку SDK платформы и/или Visual Studio для эти два файла - к сожалению, на компьютере, с которого я печатаю, не установлено ни PSDK, ни VS.

Другие инструменты:

  • память: производительность и надежность (например, обработка неудачного выделения памяти): можно использовать EatMem
  • Процессор: производительность и надежность (например, условия гонки): можно использовать CPU Burn, Prime95 и т.д.
  • дескрипторы (GDI, пользователь): надежность (например, обработка неудачного выделения ресурсов GDI):??? возможно, придется написать свой собственный, но нехватка дескрипторов GDI (глючные GTK-приложения, как правило, поглощают их все до тех пор, пока все другие приложения в системе не начнут замирать как мухи), является настоящим тестом для любого приложения Windows
  • диск: производительность & надежность (например, обработка диска заполнена): DiskFiller и т.д.

Ответ 2

AppVerifier имеет функцию моделирования с низким ресурсом.

Вы также можете попробовать установить приоритет вашего процесса очень низким.

Ответ 3

Вы можете запустить MemAlloc, чтобы пережевывать ОЗУ, возможно, несколько копий одновременно.

Ответ 4

Я нашел связанный с этим вопрос:

Установите ограничение на производительность процесса (или пользователя) Windows

В принятом ответе на вопрос есть ссылка на Windows API SetProcessWorkingSetSize, поэтому это не тот инструмент, который может ограничить объем памяти, который может использовать этот процесс.

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

В диспетчере задач щелкните правой кнопкой мыши процесс и выберите "Установить аффинити...", затем выберите ядра процессора, которым может быть назначен процесс.

Если машина разработки имеет много ядер, но пользовательская машина имеет только один, то вместо того, чтобы позволить процессу работать на всех доступных ядрах, установите "процессор" сродством только к одному ядру.

Ответ 5

Это не имеет ничего общего с SetProcessWorkingSetSize

Просто используйте внутренний API-интерфейс Win32 для ограничения использования ЦП