Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

resource control: CPU

by powerman (Friar)
on Apr 24, 2002 at 11:22 UTC ( #161569=snippet: print w/replies, xml ) Need Help??
Description: These subs allow you control how much % CPU maximum will use your script. CPU_start() must be called once when you script start.
This example script will use 30% CPU until Ctrl-C pressed:
CPU_start(); CPU_max(30) while 1;
use Time::HiRes qw(time);

sub CPU_used {
    (map {$_->[13]+$_->[14]} 
        [split " ", Cat("/proc/self/stat")])[0]
}

{ my %start = (tm => 0, cpu => 0);
sub CPU_start { @start{"tm","cpu"} = (time(),CPU_used()) }
sub CPU_max {
    my ($max, $real, $cpu) = ($_[0], time()-$start{tm},
        CPU_used()-$start{cpu});
    return unless defined($max) and $max > 0;
    &sleep( $cpu/$max-$real );
}}

#
# macro used from CPU_used() and CPU_max()
#

sub sleep { select undef,undef,undef,$_[0] }
sub Cat {
    local *F;
    open F, "< ".$_[0] or return;
    local $/ unless wantarray;
    return <F>;
}
Replies are listed 'Best First'.
Re: resource control: CPU
by lirm (Novice) on Apr 24, 2002 at 15:40 UTC
    I would suggest putting
    return unless $^O eq 'Linux';
    there. As this file - /proc/self/stat - only exists in this format on that system as far as I know,
    and I personally run FreeBSD (I checked Solaris too)...

    Just a thought.
    --
    Lirm

      I think it will be more clever, if somebody research how to do this on *BSD and other systems and send to me patch. ;-)
      And I'm sorry - I'm working only with Linux many years and I don't keep in mind portability problems... :(

      Update: I'm found nice standart function times() which can do something like my CPU_used() and I think it is possible to rewrite CPU_used() without using /proc/ now!

        times() is good within an particular (unix-ish) environment, but generally gives you clock ticks. Unfortunately those clock ticks may vary for different hardware and for different OSes depending on the jiffy (quantum) size, the CPU speed, and the power saving facilities...

        Don't get me wrong, it's still probably a 99% solution to what you were trying to do.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: snippet [id://161569]
help
Chatterbox?
[holli]: good morning you beautiful people. happy last work week of 2017

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (5)
As of 2017-12-18 04:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    What programming language do you hate the most?




















    Results (467 votes). Check out past polls.

    Notices?