Solaris 8 & Perl 5.8.0 ithreads not using all the CPUs

[email protected] (Hendrik Visage)
Newsgroups perl.ithreads
Message-ID <[email protected]>
Hi there,

 The code below is  executed on a Solaris 8 machine, with 4 CPUs
I would "expect" with values >4 for $MaxSem, that all the CPUs would be utilized
for the parsing. The parsing is quite CPU intensive, running ~20minutes for the 24files
on all four CPUs.

 However, according to top/vmstat/iostat/etc. the max usage for $MaxSem set to 5 or 4
is <70%, without any real disk activity not blocking for disk IO (it's a 4GB RAM machine, 
and the files are allready cached/buffered when it hit the foreach loop)

Thus I'm missing the utilization of more than 1CPU for this :(

Please advise

Hendrik
---code.pl----

use threads;
use Thread::Queue;
use Thread::Semaphore;

#The Semaphore that dictates the max concurrent threads...
my $MaxSem = Thread::Semaphore->new(5);
#The semaphore that keeps the output serialized
my $OutputLock = Thread::Semaphore->new(1);

        foreach $File (@FList){

          async {
            $MaxSem->down(1); #Locking to prevent too many threads simultaneously..
            %Output=&Parse($File);
            $MaxSem->up(1);
            $OutputLock->down(1);
              print {$OFile} $Output;
            $OutputLock->up(1);
          };
        } #FList

        #Make sure none is still running:
        foreach $thr (threads->list) { 
          print "Thread id: ".$thr->tid."\n"
            if $DEBUG >1;
          $thr->join; }
                    
-----code.pl------
# psrinfo -v
Status of processor 0 as of: 09/28/03 11:16:39
  Processor has been on-line since 09/26/03 10:44:08.
  The sparcv9 processor operates at 440 MHz,
        and has a sparcv9 floating point processor.
Status of processor 1 as of: 09/28/03 11:16:39
  Processor has been on-line since 09/26/03 10:44:09.
  The sparcv9 processor operates at 440 MHz,
        and has a sparcv9 floating point processor.
Status of processor 2 as of: 09/28/03 11:16:39
  Processor has been on-line since 09/26/03 10:44:09.
  The sparcv9 processor operates at 440 MHz,
        and has a sparcv9 floating point processor.
Status of processor 3 as of: 09/28/03 11:16:39
  Processor has been on-line since 09/26/03 10:44:09.
  The sparcv9 processor operates at 440 MHz,
        and has a sparcv9 floating point processor.
# uname -a
SunOS server 5.8 Generic_108528-13 sun4u sparc SUNW,Ultra-80

% perl -V
Summary of my perl5 (revision 5.0 version 8 subversion 0) configuration:
  Platform:
    osname=solaris, osvers=2.8, archname=sun4-solaris-thread-multi
    uname='sunos niv-svr-03 5.8 generic_108528-13 sun4u sparc sunw,ultra-80 '
    config_args='-D'
    hint=previous, useposix=true, d_sigaction=define
    usethreads=define use5005threads=undef useithreads=define usemultiplicity=define
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=undef use64bitall=undef uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='gcc', ccflags ='-D_REENTRANT -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O',
    cppflags='-D_REENTRANT -fno-strict-aliasing -I/usr/local/include -D_REENTRANT -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
    ccversion='', gccversion='2.95.3 20010315 (release)', gccosandvers='solaris2.8'
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define

  Linker and Libraries:
    ld='gcc', ldflags =' -L/usr/local/lib '
    libpth=/usr/local/lib /usr/lib /usr/ccs/lib
    libs=-lsocket -lnsl -ldl -lm -lrt -lpthread -lc
    perllibs=-lsocket -lnsl -ldl -lm -lrt -lpthread -lc
    libc=/lib/libc.so, so=so, useshrplib=true, libperl=libperl.so
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' -Wl,-E -R /usr/local/lib/5.8.0/sun4-solaris-thread-multi/CORE'
    cccdlflags='-fPIC', lddlflags=' -Wl,-E -G -L/usr/local/lib'


Characteristics of this binary (from libperl): 
  Compile-time options: MULTIPLICITY USE_ITHREADS USE_LARGE_FILES PERL_IMPLICIT_CONTEXT
  Built under solaris
  Compiled at Aug  4 2003 22:33:45
  @INC:
    /usr/local/lib/5.8.0/sun4-solaris-thread-multi
    /usr/local/lib/5.8.0
    /usr/local/lib/site_perl/5.8.0/sun4-solaris-thread-multi
    /usr/local/lib/site_perl/5.8.0
    /usr/local/lib/site_perl
    .
%

Running at "peak" load:
CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  0    0   0  810   871  300 5754  545  202 3949    0  8780   75  15   0  10
  1    0   0  527   568  101 6082  538  240 3905    0  8849   72  12   0  16
  2    0   0  485   594  127 5997  523  224 3903    0  8969   72  13   0  15
  3    0   0  460   675  100 6053  664  202 3939    0  8854   71  11   0  18
CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  0    0   0  754   901  300 5282  568  182 3271    0  7620   70  12   0  18
  1    0   0  450   528  101 5394  479  199 3531    0  8109   67  12   0  20
  2    0   0  462   517  100 5281  477  194 3644    0  8494   75  12   0  12
  3    0   0  436   556  100 5530  511  180 3512    0  8339   76  10   0  14
CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  0    0   0  718   868  300 5572  548  196 3521    0  8265   76  13   0  11
  1    0   0  443   467  104 5141  412  178 3637    0  8036   78  11   0  11
  2    0   0  414   501  102 5104  446  189 3442    0  7738   66  13   0  21
  3    2   0  411   527  100 5239  486  178 3442    0  8002   73  12   0  15
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.