Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re^2: Finding Usable Nodes in our Cluster

by Andrew_Levenson (Hermit)
on Apr 11, 2008 at 17:05 UTC ( #679766=note: print w/ replies, xml ) Need Help??


in reply to Re: Finding Usable Nodes in our Cluster
in thread Finding Usable Nodes in our Cluster

Awesome, it works great! I updated it to include some formatting of the output to make everything pretty.

#!/usr/bin/perl #Andrew Levenson #2:13PM EST #Thursday, April 10th, 2008 #Displays nodes on Deli with 0 or 1 used processors use strict; use warnings; print "\n"; my @open=("\n", "One Active Processor:\n\n"); foreach ( `ganglia proc_run` ) { unshift @open, $_ if /\s0\s+$/; push @open, $_ if /\s1\s+$/; } print "Zero Active Processors:\n\n"; print $_ foreach(@open); print "\n";
C(qw/74 97 104 112/);sub C{while(@_){$c**=$C;print (map{chr($C!=$c?shift:pop)}$_),$C+=@_%2!=1?1:0}}


Comment on Re^2: Finding Usable Nodes in our Cluster
Select or Download Code
Re^3: Finding Usable Nodes in our Cluster
by jwkrahn (Monsignor) on Apr 11, 2008 at 20:05 UTC
    print $_ foreach(@open);

    You don't really need the loop there:

    print @open;

    And it might be better if you used strings instead of arrays:

    use strict; use warnings; my $zero = "\nZero Active Processors:\n\n"; my $one = "\nOne Active Processor:\n\n"; foreach ( `ganglia proc_run` ) { $zero .= $_ if /\s0\s+$/; $one .= $_ if /\s1\s+$/; } print "$zero$one\n";
      Wow, that's fantastic. I hadn't even considered that approach. It's nice because the formatting of the output of `ganglia proc_run` is conducive to being easily read with minimal reformatting effort.

      Is there any considerable speed advantage to using the string instead of the array? Or does it have to do with memory usage?
      Current form:
      #!/usr/bin/perl #Andrew Levenson #4:14PM EST #Friday, April 11th, 2008 #Displays nodes on Deli with 0 or 1 used processors use strict; use warnings; my $zero = "\nZero Active Processors:\n\n"; my $one = "\nOne Active Processor:\n\n"; foreach ( `ganglia proc_run` ) { $zero .= $_ if /\s0\s+$/ & !/deli/; $one .= $_ if /\s1\s+$/ & !/deli/; } print "$zero$one\n";
      C(qw/74 97 104 112/);sub C{while(@_){$c**=$C;print (map{chr($C!=$c?shift:pop)}$_),$C+=@_%2!=1?1:0}}
        Is there any considerable speed advantage to using the string instead of the array? Or does it have to do with memory usage?

        Using strings instead of arrays will definitely use less memory as each scalar has a certain amount of overhead so two strings vs. two arrays of strings will use less.   Another way to reduce memory usage is to use a piped open and read each line in a while loop.

        As for speed, it depends on how much IO overhead is involved from reading the output of an external program.   But in general using strings should be faster than using arrays.   As always, if in doubt use Benchmark or one of the profilers to determine the speed differences.

        This may also provide some help: When perl is not quite fast enough

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://679766]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (9)
As of 2014-12-28 04:33 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (178 votes), past polls