Hello Folks,

I am currently working on CMUCL to build a search system for an
airline database. 

To improve performance, batches of requests are done in parallel. This
was my first time using the CMUCL MP.  My starting point was
<URL:http://www.trakt7.net/cmucl%20and%20multiprocessing>

I have found the CMUCL is extremely stable and very fast to work
with. Thank you guys for this wonderful software.

But I have been having several hard to trace problems in 2 areas,
namely, MP and sockets.  This is more likely due to my lack of
know-how. I would be very grateful if you could help.

Firstly, I am using trivial-sockets to make HTTP connections. We have
seen that whenever we try to connect to a system which is down, or
when my interface has gone down, CMUCL goes into continuous GC taking
up 99% CPU.  This is when MP is initialised.

After we abort from such errors and try to run anything I get the
following message.


Error in function LISP::ASSERT-ERROR:
   The assertion (NOT MULTIPROCESSING::*INHIBIT-SCHEDULING*) failed.
   [Condition of type SIMPLE-ERROR]

Restarts:
  0: [CONTINUE] Retry assertion.
  1: [ABORT-REQUEST] Abort handling SLIME request.
  2: [CONTINUE] Return NIL from load of "home:.cmucl-init".
  3: [ABORT] Skip remaining initializations.

Backtrace:
  0: (LISP::ASSERT-ERROR (NOT MULTIPROCESSING::*INHIBIT-SCHEDULING*) NIL NIL)
  1: (MULTIPROCESSING:PROCESS-WAIT-WITH-TIMEOUT "Waiting for Final Results" 55 
#<Closure Over Function "DEFUN AIR-SEARCH" {592F35A1}>)
      Locals:
        MULTIPROCESSING::ARGS = NIL
        MULTIPROCESSING::PREDICATE = #<Closure Over Function "DEFUN AIR-SEARCH" 
{592F35A1}>
        MULTIPROCESSING::TIMEOUT = 55
        MULTIPROCESSING::WHOSTATE = "Waiting for Final Results"



To manage the data between the different parallel requests I am using
a global hash table with a lock.  To wait for all the processes to
complete I have a counter locally and also one in the global hash
table which the processes on completion increment.

I use process-wait-with-timeout to keep checking the values of the
counter in the global hash table.  Is this a good way for a process to
wait ?

I will be gratefull for any insights into MP.

thanks,
quasi

-- 
quasi

Utopia Unlimited!

Reply via email to