Search code examples
windowsperformancetestingcpu-usage

Is there any way of throttling CPU/Memory of a process?


Problem: I have a developers machine (read: fast, lots of memory), but the user has a users machine (read: slow, not very much memory).

I can simulate a slow network using Fiddler (http://www.fiddler2.com/fiddler2/) I can look at how CPU is used over time for a process using Process Explorer (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx).

Is there any way I can restrict the amount of CPU a process can have, or the amount of memory a process can have in order to simulate a users machine more effectively? (In order to isolate performance problems for instance)

I suppose I could use a VM, but I'm looking for something a bit lighter.

I'm using Windows XP, but a solution for any Windows machine would be welcome. Thanks.


Solution

  • The platform SDK used to come with stress tools for doing just this back in the good old days (STRESS.EXE, CPUSTRESS.EXE in the SDK), but they might still be there (check your platform SDK and/or Visual Studio installation for these two files -- unfortunately I have niether the PSDK nor VS installed on the machine I'm typing from.)

    Other tools:

    • memory: performance & reliability (e.g. handling failed memory allocation): can use EatMem
    • CPU: performance & reliability (e.g. race conditions): can use CPU Burn, Prime95, etc
    • handles (GDI, User): reliability (e.g. handling failed GDI resource allocation): ??? may have to write your own, but running out of GDI handles (buggy GTK apps would usually eat them all away until all other apps on the system would start falling dead like flies) is a real test for any Windows app
    • disk: performance & reliability (e.g. handling disk full): DiskFiller, etc.