Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

Re: Multithreaded Script CPU Usage

by renodino (Curate)
on Aug 25, 2008 at 15:01 UTC ( #706702=note: print w/replies, xml ) Need Help??

in reply to Multithreaded Script CPU Usage

  1. What version of Perl are you using ?
  2. What version of threads are you using ?
  3. If you're using a fairly recent version of threads, have you tuned the per-thread stacksize to something small/reasonable ?

Perl Contrarian & SQL fanboy

Replies are listed 'Best First'.
Re^2: Multithreaded Script CPU Usage
by Zenshai (Sexton) on Aug 25, 2008 at 15:19 UTC
    Updated OP with the version info.

    As for your #3 I think the answer is no, but I cant seem find where to set that in

    Would changing 'use threads;' to
    use threads ( 'stack_size' => 64*4096, );
    in be the way to set the stack size? if so, whats a 'small' value?
      Your "use threads" should do the trick, or any of the alternatives described in the "THREAD STACK SIZE" section of the threads POD...just do it as early as possible. I'd suggest that 64 * 4096 is probably a lot more than you need, as Perl has its own notion of a runtime stack, and in reality doesn't use that much process/thread stack (unless you're using very large/complex regexes, and even that issue goes away in 5.10). Note that once stack size is set, its set for all the threads/modules, so you don't need to do anything in Thread::Pool.

      Also keep in mind that each thread has its own Perl interpretter, so memory size may be an unavoidable issue, esp if the threads are spawned from another thread that already has a lot of context (due to the interpretter cloning).

      I just realized your issue has 2 parts: memory and CPU; note that my comments thus far have been entirely about the memory issue. However, given the size of the Perl process, might the CPU issue be related to paging/swapping ?

      Perl Contrarian & SQL fanboy
        Re your update:
        Thats interesting, you might be right. This box has 2GB ram, so I didn't think I was in danger of running out... Unless WinServer2k3 decided to page/swap even when there is memory available... How would I check this?

        The reason I think you're right is that my kernel times tend to be rather high when running this script. Here's an example.

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (4)
As of 2020-09-24 08:46 GMT
Find Nodes?
    Voting Booth?
    If at first I donít succeed, I Ö

    Results (132 votes). Check out past polls.