Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Does anyone know of a perl based script or utility that I could use to simulate CPU usage on a windows box? I have a script I use for Linux to control the CPU but am finding it difficult to do the same on Windows.
Thanks

Replies are listed 'Best First'.
Re: CPU Load generator for Windows?
by RMGir (Prior) on Jun 22, 2007 at 14:40 UTC
    I'm not sure what you're shooting for.

    Writing a perl script that will use 100% of 1 cpu is pretty simple:

    perl -e'while(1) {$x++}'
    pretty well does the job.

    If you also need to exercise memory and paging, you could have something like:

    perl -e'$x=" " x 1024 x 1024 x 256; while(1) { $x=~s/ /./g; $x=~s/./ / +g;}'
    I haven't tested that last one, but I'll bet it'll be nicely anti-social :)

    Are you shooting for something more precise, like 30% cpu load? That would be much harder to fine-tune...


    Mike
        Limbic~Region,

        No, I hadn't.

        But I'm glad you pointed me to them, they're quite lovely!

        Of course, if some poor sap runs Procs as root, or on a system without process limits, his day's going to be ruined... :)


        Mike

      Since we're talking Windows here, the OP needs to use double quotes in the first case, and to reverse single-for-double and vice-versa in the second...

      perl -e "while(1) {$x++}"

      perl -e "$x='' x 1024 x 1024 x 256; while(1) { $x=~s/ /./g; $x=~s/./ /g;}"

      Interestingly, at least to me, in the second case I saw the handle count rise rapidly (well, over the course of a few tens of seconds), with "Available" physical memory actually increasing (mostly, there were a few small dips). That seems counterintutitive.

        If the intent is to create a large string, '' x 1024 x 1024 x 256 isn't working:

        C:\test>perl -wle "$x='' x 1024 x 1024 x 256; print length( $x )" 0

        A null string isn't the same a string containing a null. And 0 * anything is 0. Try

        C:\test>perl -wle "$x = chr(0) x 1024 x 1024 x 256; print length( $x ) +" 268435456

        Personally, I find even that a little dubious in that, due to precedence, it creates the final string in 3 stages rather than 1. I think that

        C:\test>perl -wle "$x = chr(0) x (1024* 1024 * 256); print length( $x +);<>" 268435456

        is 'better', though it has little effect on the outcome.


        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.
Re: CPU Load generator for Windows?
by Anonymous Monk on Sep 26, 2010 at 22:14 UTC

    I found this thread in search today so will post the two scripts I created.

    # CPU consumption loop $p = 0; # number of processes (0 => 1 process) $w = 20; # amount of work per iteration (20) $t = 0; # sec of think time between iterations (0) for (1..$p) {fork()} while (1) {for($x=0;$x<$w*100000;$x++){sin($x/($x ++2))} if($t){sleep($t)}}

    ------------------------------------------------

    # Memory consumption loop - defaults consume 1GB in 3 min on i7-620m $i = 3000; # size of increase (3000) $t = 1; # sec think time between increases (1) $r = 150; # time before reset (150) $c = 5; # sec before next climb starts (5) @chars=('a'..'z','A'..'Z','0'..'9','_'); while (1) { for(1..int(rand($y))) {$rs.=$chars[rand @chars]} for($x=0;$x<$i;$x++){$z[$y,$x]="$rs"x(int(rand($x))*2)} $y++;$rs='';sleep($t);if($y==$r){@z='';$y=0;sleep($c)} }